3

これは非常に基本的な質問ですが、フォームが存在するMS Accessデータベースに対していくつかのフォーム値を介して構築しているクエリを実行しようとしています。正式にADOを実行する必要はないと思いますが、多分私は行う。

とにかく、いくつかの助けをいただければ幸いです。n00bでごめんなさい。;)

4

4 に答える 4

3

次のDAOコードを使用して、AccessDBにクエリを実行できます。

Dim rs As DAO.Recordset
Dim db As Database

Set db = CurrentDb
Set rs = db.OpenRecordset("SELECT * FROM Attendance WHERE ClassID = " & ClassID)

do while not rs.EOF
  'do stuff
  rs.movenext
loop

rs.Close
Set rs = Nothing

私の場合、ClassIDはフォームのテキストボックスです。

于 2008-09-25T16:24:12.737 に答える
0

ADO バージョンが必要な場合に備えて、次のようにします。

Dim cn as new ADODB.Connection, rs as new ADODB.RecordSet
Dim sql as String

set cn = CurrentProject.Connection
sql = "my dynamic sql string"

rs.Open sql, cn ', Other options for the type of recordset to open, adoOpenStatic, etc.

While Not rs.EOF
  'do things with recordset
  rs.MoveNext   ' Can't tell you how many times I have forgotten the MoveNext. silly.
Wend
rs.Close
cn.Close
Set rs = Nothing
Set cn = Nothing

DAO と ADO の使用法は非常に似ています。DAO を使用すると制御が強化され、ADO を使用するとパフォーマンスがわずかに向上します。私が遭遇したほとんどのアクセスデータベースアプリケーションでは、実際には違いはありません。私が見た大きな違いは、リンクされたテーブルにあります。多くの場合、ADO の方がパフォーマンスが向上します。

于 2008-09-30T01:21:23.357 に答える
0

これは私が思いついたもので、実際に機能します。

Dim rs As DAO.Recordset
Dim db As Database

Set db = CurrentDB
Set rs = db.OpenRecordset(SQL Statement)

While Not rs.EOF
    'do stuff
Wend

rs.Close
于 2008-09-25T19:03:12.527 に答える
0

あなたが与えられた答えと、DAO レコードセットのループを受け入れているようです。これは一般に、テキストを完成させるための非常に非効率的な方法です。たとえば、これは次のとおりです。

  Set db = CurrentDB()
  Set rs = db.OpenRecordset("[sql]")
  If rs.RecordCount > 0
     rs.MoveFirst
     Do While Not rs.EOF
       rs.Edit
       rs!Field = "New Data"
       rs.Update
       rs.MoveNext
     Loop 
  End If
  rs.Close
  Set rs = Nothing
  Set db = Nothing

次のものよりもはるかに効率が低下します。

  UPDATE MyTable SET Field = "New Data"

次のコマンドで実行できます:

  CurrentDb.Execute "UPDATE MyTable SET Field = 'New Data'"

レコードセットをループする必要があることはめったになく、ほとんどの場合、SQL 更新は桁違いに高速になります (データ ページで保持される読み取り/書き込みロックがはるかに短くなります)。

于 2008-09-26T19:45:49.397 に答える