使用带有postgresql表的vba填充组合框访问2007

时间:2016-09-07 12:59:04

标签: postgresql access-vba odbc

我试图用一个由父组合框过滤的表中的记录来填充组合框。 我要过滤的表称为muni,父表称为prov。它们由一个公共字段相关(muni有一个名为gid_prov的字段,其中包含每个记录的prov gid) 第一个组合框存储了prov gid并显示了prov名称。 这两个表都在postgresql的数据库中,连接到使用ODBC的DSN文件访问。 我尝试了很多选项,没有一个是正确的。 首先我尝试了一个简单的选项。这段代码现在没用了

Private Sub PROV_Change()
   MUNI.RowSourceType = "Table/Query"
   MUNI.RowSource = "select *  from memoria.muni  where gid_provs =" & PROV
   MUNI.Requery
   MUNI.SetFocus
   MUNI.Text = ""

   End Sub

PROV是存储prov gid的父组合框的名称。而MUNI我想填充的组合框。 我尝试的其他选项是使用sql语句创建查询,这是现在的代码,我尝试使用OpenRecordsetOutput,但是无法正常工作。我可以访问数据库并获取字段,但我无法填充组合框MUNI

     Private Sub PROV_Change()
    Dim oDb As DAO.Database
    Dim oRs As DAO.Recordset
    dbconnect = "ODBC;DRIVER=PostgreSQL ANSI;UID=***;PWD=***;PORT=5432;SERVER=127...;DATABASE=memoria_historica;DSN=C:\Users\***"
    Set oDb = OpenDatabase("", False, False, dbconnect)
Dim sql As String
sql = "select gid,nombre  from memoria.municipios m where m.gid_provs =" & PROV & "order by m.nombre;"
Set oRs = oDb.OpenRecordset(sql, dbOpenSnapshot, dbSQLPassThrough)
Me.muni2.RowSource = ""
If oRs.RecordCount > 0 Then
With oRs
.MoveFirst
.MoveNext

Do While Not .EOF
                    muni2.AddItem .Fields("nombre").Value

                    .MoveNext
Loop
End With
End Sub

在@Thaippo的支持下工作得很好。感谢

1 个答案:

答案 0 :(得分:0)

你可以DAO库。

你可以DAO。数据库和DAO。记录集如:

Dim oDb as DAO.Database
Dim oRs as DAO.Recordset

你的第二段代码可以完成这项工作。

Set oDb = OpenDatabase("", False, False, dbconnect)
Dim sql As String
sql = "select m.nombre  from memoria.muni 
m,memoria.prov p where st_within(m.the_geom,p.the_geom) and p.gid =" & PROV ";"

Set oRs = oDb.Openrecordset(sql) 

If oRs.Recordcount > 1 Theb
With oRs
.Movelast
.Movefirst

Do while not.EOF
                    PROV.Additem . Fields("nameOfFieldsYouNeed"). Value
                    .Movenext
Loop
End With

End if

在添加新项目之前清除combox框是个好主意。