1

VBA を使い始めたばかりで、セットアップしたダミー テーブルのすべてのデータにアクセスしようとしていますEmployees

これは私がしようとしているコードです:

Sub getRecords()

Dim dbs As Database
Dim rst As Recordset
Dim sql As String

Set dbs = CurrentDb
sql = "SELECT * FROM Employees"
Set rst = dbs.OpenRecordset(sql)

End Sub

ここでの最終的な目的は、コンテンツを画面に出力することです。これには、レコード セットをさまざまなコンポーネントに分割することが含まれますか? もしそうなら、どのコンポーネントが典型的なレコードセットを構成できますか?

表の形式は次のとおりです。

Emp_Id    - Number
Emp_Name  - Text
Emp_Email - Text
4

2 に答える 2

4

フィールドを反復処理できます。

Sub getRecords()

Dim dbs As Database
Dim rst As Recordset
Dim sql As String

Set dbs = CurrentDb
sql = "SELECT * FROM Employees"
Set rst = dbs.OpenRecordset(sql)

Do while not rst.eof
   For each fld in rst.Fields
      Debug.Print fld, fld.name
   Next
   rst.MoveNext

   ''You can also edit or add
   rst.Edit
   rst!Emp_Name = "Something"
   rst.UpDate
Loop

End Sub

SQL など、プロパティでもある変数名を呼び出すことは避けます。

更新の場合は、通常、アクション クエリを使用してデータベース オブジェクトを再実行するのが最適です。

 db.Execute "UPDATE aTable SET aField = 'Some text'", dbFailOnError
于 2013-01-11T11:44:06.203 に答える
0

レコードをループすることから始める必要があります。試す:

Do While Not rst.EOF And Not rst.BOF
...
Loop

それをするために。BOF と EOF は、それぞれレコードセットの先頭と末尾に関連しています。テーブルにデータがない場合、ループ全体がスキップされます。

そこから、インデックスを使用して選択リスト内のフィールドの位置に関連付けるか、次のようにフィールド名を参照することで、フィールドを個別に確認できます。

Do While Not rst.EOF And Not rst.BOF
    Debug.Print rst.Fields("myfield")
    Debug.Print rst.Fields(0)
Loop

それが出発点です。Intelisense は、これに本当に役立つはずです。

PS:recordset後でオブジェクトを閉じて、メモリを再利用することを忘れないでください: rst.Close() Set rst = Nothing

敬具、ポール。

于 2013-01-11T11:45:53.907 に答える