2016-09-07 9 views
0

コンボボックスでフィルタリングされたテーブルのレコードでコンボボックスを作成しようとしています。 フィルタリングするテーブルはmuniと呼ばれ、親テーブルはprovと呼ばれます。これらは共通のフィールドで関連付けられています(muniには、各レコードのprov gidを含むgid_provというフィールドがあります)。 最初のコンボボックスはprovのgidを格納し、prov名を表示します。 両方のテーブルは、ODBCを使用してDSNファイルによるアクセスに接続されたpostgresqlのデータベースにあります。 私は多くのオプションを試しましたが、どれも正しいものではありません。 まず、簡単なオプションを試しました。このコードは今役に立たないコンボボックスアクセス2007にvbaを使用してpostgresqlテーブルを作成する

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のサポートTIHうまく働いたコンボボックスを移入することはできません。ありがとう

+0

質問を編集してコードを現在の内容に更新しないのはなぜですか?私はあなたが上に示しているもののようなものではないと想像します – dbmitch

+0

ありがとう!今それは正常に動作しています。 設定ORS場合は最後に、私はこの –

+0

'もしoRs.recordCount> 0次に Me.txtTextbox =のORSなどの変化に別のクエリを作っid_muniフィールドを埋めるために!エルス Me.txtTextbox = "N/A" 終了gidその= Nothing Set oDb = Nothing End Sub' from @Fiounnala –

答えて

0

あなたはDAOライブラリができます。

あなたはDAOできますか?データベースとDAO。レコードセットは次のようになります。

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

2つ目のコードブロックで作業できます。

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 

そして、新しい項目を追加する前にコンボボックスを消去することをお勧めします。

+0

そしてコードの書式を設定しないと申し訳ありません、私は携帯電話にいます!病気のときに私は後で編集する – Thapipo

+0

答えをありがとう、それは動作していません。 oDb.Openrecordset(sql)はローカルマシンのデータベースを開こうとします。「エラー、データベースC:\ Users \ Documents \ memoria.mdbが見つかりません」と表示されます。なぜ私は理解していない、なぜならdbconnectはODBCドライバDSNを呼び出しているからです。なにか提案を?前もってありがとう –

+0

私は、オプションでレコードセットのタイプとdbSQLPassThroughでdbSnapshotを使用しようとしましたが、現在はこのエラーは発生していませんが、フィルタは機能していません。私は完全に失われている:-( –

関連する問題