2011-07-05 18 views
0

私の妻は次のコードを書いていて、彼女の組織がAccess 2007を使用していた時、彼女はうまく動作していました。私はAccessに全く慣れていませんが、Stackにプレゼンテーションして、Access 2010で動作しないものがまっすぐに見えるかどうかを確認することを提案しました。VBAコードはAccess 2007で動作しますが、Access 2010では動作しません。

Private Sub Originating_Zone_AfterUpdate() 

Dim EscortDB As DAO.Database 

Dim rstBldgs As DAO.Recordset 

Set EscortDB = CurrentDb() 
Set rstBldgs = EscortDB.OpenRecordset("SELECT BuildingName FROM" & _ 
" ZoneBldgLookup WHERE ZoneLocation = '" & _ 
Forms!DateID!EscortIDSubform.Form.[Originating Zone] & _ 
"' ORDER BY BuildingName", [dbOpenDynaset]) 


rstBldgs.MoveLast 

rstBldgs.MoveFirst 

Do Until rstBldgs.EOF 
Forms!DateID!EscortIDSubform.Form.[Pick Up Location].AddItem rstBldgs!BuildingName 
rstBldgs.MoveNext 
Loop 

rstBldgs.Close 


End Sub 

更新:彼女はそれが次のコードを使用して作業しました。ご協力いただきありがとうございます!

Private Sub Originating_Zone_AfterUpdate() 

Dim sBuildList As String 

sBuildList = ("SELECT BuildingName FROM" & _ 
" ZoneBldgLookup WHERE ZoneLocation = '" & _ 
Forms!DateID!EscortIDSubform.Form.[Originating Zone] & _ 
"' ORDER BY BuildingName") 

Forms!DateID!EscortIDSubform.Form.[Pick Up Location].RowSource = sBuildList 
Forms!DateID!EscortIDSubform.Form.[Pick Up Location].Requery 

End Sub 
+0

明らかに、その関数は、以前のドロップダウンリスト(ZoneBldgLookup)の入力に基づいてテーブルから作成されたレコードセットをドロップダウンメニューに移入するために使用されました。チェインセレクタ。 2番目のドロップダウンメニューにはもう何も表示されません。それは何の誤りも投げていません。それは32ビットです。 – Mobius

+1

これはアクセスアプリケーションです。接続文字列は無意味です。 –

答えて

1

@ David-W-Fentonの提案に加えて、SELECT文を保持するために文字列変数を使うべきだと思います。その後、Debug.Printイミディエイトウィンドウにそれを新しいクエリ(SQLビュー)にコピーし、実際に行を返すことを確認します。これはDateIDという名前のフォームのモジュール内のコードであれば

Dim strSql As String 
strSql = "SELECT BuildingName FROM" & _ 
    " ZoneBldgLookup WHERE ZoneLocation = '" & _ 
    Forms!DateID!EscortIDSubform.Form.[Originating Zone] & _ 
    "' ORDER BY BuildingName" 
Debug.Print strSql 
Forms!DateID!EscortIDSubform.Form.[Pick Up Location].Rowsource = strSql 

また、あなたは「このフォーム」の省略形である、キーワードMe(...あなたがしているコードを含むフォームでForms!DateIDを置き換えることができますランニング)。これは劇的に短くはありませんが、フォームの名前が変更された場合はMeを変更する必要はありません。まだ大したことではありません...あなたは道路を下っていくだけで、細かいことはしません。

+0

彼女は「私は2番目の人の提案をページで使用しましたが、行ソースのタイプを変更して動作させる必要がありました。2010年に行ソースタイプを別に設定する必要がありました。レコードセットを作成するのではなく、リストを文字列として定義することもできました。また、追加しないと再クエリーする必要があります。ご協力ありがとうございました! – Mobius

+0

はい、コンボボックス/リストボックスのrowsourceを割り当てるときに、SQL文字列である場合は、.AddItemを使用しているときとは異なるタイプでなければなりません。しかし、Rowsourceを設定すると、再クエリーが完全に冗長になります。 –

3

ひどいコードです。レコードセットや.AddItemを歩いてドロップダウンリストやリストボックスを設定するのは非常に効率が悪いです。単に文字列をコンボボックス/リストボックスのRowsourceプロパティに代入するだけで、コードなしですべてを実行できます。

ここでは、このAfterUpdateイベントが関連付けられているコントロールの選択肢に基づいてリストが変更されていますが、これはすべてこのイベントでRowsourceを割り当てることを意味します。おそらく、すべての上記のコードは、これと交換することができます。

Forms!DateID!EscortIDSubform.Form.[Pick Up Location].Rowsource = "SELECT BuildingName FROM" & _ 
    " ZoneBldgLookup WHERE ZoneLocation = '" & _ 
    Forms!DateID!EscortIDSubform.Form.[Originating Zone] & _ 
    "' ORDER BY BuildingName" 

を私は(私が起こっているサンドボックスモード/マクロのセキュリティ上の問題があります疑いがある)動作しないコードと間違っているものを言うことはできませんが、それは方法よります必要以上のコード行。

+0

彼女はそれを働かせました!ご協力いただきありがとうございます! – Mobius

関連する問題