アクセス2000VBA DAOをADOに書き換えてください

このQ&Aのポイント
  • アクセス2000VBAのDAOをADOに書き換える方法について教えてください
  • 下記のプログラムをADOに書き換えてください。DAT1とDAT2は既にモジュールで定義されています
  • 現在のプログラムはDAOを使用していますが、ADOに書き換えたいです
回答を見る
  • ベストアンサー

アクセス2000VBA DAOをADOに書き換えてください

アクセス2000VBA DAOをADOに書き換えてください 下記プログラムをADOに書き換えてください。(DAT1、DAT2はモジュールにて定義してあります) Option Compare Database Dim DBS As Database Dim QDF As QueryDef Dim RST As DAO.Recordset Dim COUNT1 Private Sub Form_Load() On Error Resume Next DAT2 = [Forms]![伝票]![HAKKOU1] Set DBS = CurrentDb Set QDF = DBS.QueryDefs("発行") With QDF .Parameters("DAT1") = DAT2 ’もしかしたら DAT2 ではエラーがでるかもしれません。 Set RST = .OpenRecordset() ’正しい記述を教えてください .Close End With With RST COUNT1 = !指示書 .Close End With

質問者が選んだベストアンサー

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

Googleででも、「ACCESS ADO」で照会するとコード例が出てくる。 比べれば差はわかるはず。 http://www.accessclub.jp/ado/06.html http://www.happy2-island.com/access/gogo04/capter01301.shtml など。 ーー または{ADO DAOとの違い Access」で照会する http://msdn.microsoft.com/ja-jp/library/cc948691.aspx など

zoro180
質問者

お礼

今後の参考にさせて頂きます。ありがとうございました

その他の回答 (2)

  • layy
  • ベストアンサー率23% (292/1222)
回答No.3

DAOとADOを比較する http://www.tsware.jp/labo/labo_23.htm 同じロジックで性能比較した結果があります。 説明サイトも多数、こういうのを探してみてください。

zoro180
質問者

お礼

今後の参考にさせて頂きます。ありがとうございました

  • layy
  • ベストアンサー率23% (292/1222)
回答No.1

DAOとADOの違いがわからない???。 せめて、 どっから手をつけていいかわからない、とか どの行が問題で投稿したのか、とか はっきりさせてください。 回答者は便利屋ではないんですから。 それでも回答例はあると思います・・・・。

関連するQ&A

  • Access VBAでパラメータクエリをSQL文へ

    すみません、、初めて質問しますが、 お手柔らかに宜しくお願い致します。 1.集計クエリ1    ID--Group化 出庫数--合計 日付--Where条件 2..集計クエリ2  ID--Group化 入庫数--合計 日付--Where条件 3.出力用クエリ  ID 商品名 集計クエリ1の合計 集計クエリ2の合計  IDと左結合で、上記のクエリを作成 デザインビューでは1~3は完成しており、 VBA上で1と2を3のSQLに置き換えるところで悩んでおります。。 どなたか教えてください。 ちなみに1.集計クエリの下記のように試してみましたが、 Dim dbs As DAO.Database Dim qdf As QueryDef Dim rst As DAO.Recordset Set qdf = dbs.QueryDefs("Q_データ抽出をしたいクエリ") With qdf .Parameters("[Forms]![f_DataEx]![txt_YearStart]") = "2011" .Parameters("[Forms]![f_DataEx]![txt_MonthStart]") = "02" .Parameters("[Forms]![f_DataEx]![txt_DayStart]") = "23" .Parameters("[Forms]![f_DataEx]![txt_YearEnd]") = "2011" .Parameters("[Forms]![f_DataEx]![txt_MonthEnd]") = "02" .Parameters("[Forms]![f_DataEx]![txt_DayEnd]") = "23" Set rst = .OpenRecordset End With 上記で求めた"rstを基にSQL文が実行できれば、実現できそうなんですが、 うまく行きません。 言葉足らずの内容もあるかと思いますが、宜しくお願い致します。

  • ACCESS2007でのDAO(?)につきまして

    お世話になっております。 ACCESSの件で色々教えて頂き、とても感謝しております。 つきましては、ACCESS2007で疑問に思える点がありましたので 以下に記述いたします。 あるACCESS2007のVBAの記述で Dim myDB As Database Dim myQueryDef As QueryDef なる変数定義がされているのを見たのですが 質問があります <質問1> 上記の定義はDAOを使用しているという事になるのでしょうか? <質問2> DAOであるならば Dim myDB As DAO.Database Dim myQueryDef As DAO.QueryDef と記述するのが正しいのではないでしょうか? (Option Explicitは記述してあります) 私には謝った記述に見えるのですが、動作 している理由がわかりません。 質問が変かもしれませんが、どなたか教えて 頂けるありがたいです。

  • ACCESS VBA クエリを開く

    ACCESS初心者です。 VBAはEXCELで独学した程度の知識です。 フォームから受注納期を入力し、クエリを抽出。 クエリでレコード毎に製品票の印刷枚数を計算し レポートで各レコード毎に求められた印刷枚数分を 印刷させたいのですが・・・ クエリを開く段階でつまずいており困っています。 Private Sub コマンド23_Click() Dim db As DAO.database Dim rs As DAO.Recordset Dim qdf As DAO.QueryDef Set db = CurrentDb() Set qdf = db.QueryDefs("受注クエリ") With qdf .Parameters("納期") = Format(Forms![受注データ一覧]![納期], "yyyy/mm/dd") Set rs = .OpenRecordset .Close End With MsgBox rs![注文番号] rs.Close End Sub パラメータクエリの開き方、上記コードで問題ないでしょうか? そしてこのコードを実行した際 実行時エラー3421 データ型の変換エラーが発生しましたと表示されます。 ローカルウィンドウで 変数rs = nothingとなっており クエリのレコードが読み込めていないようです。 (Msgbox rs!注文番号はデータが読み込めたかテストするために コードを書いています。) どうぞ宜しくお願いいたします。

  • OpenRecordSet  他について

    Accessプロジェクトを使用しています。 Dim strSQL As String Dim DBS As Database Dim RST As DAO.Recordset Set DBS = CurrentDb Set RST = DBS.OpenRecordset("TESTDATA", dbOpenDynaset,dbReadOnly) 「実行時エラー'91': オブジェクト変数またはWithブロック変数が設定されていません。」 と出てきます。デバッグを押すと、 上記最終行でSTOPします。 次のように変更しても同じでした。 Set RST = DBS.OpenRecordset("TESTDATA") 又は Set RST = DBS.OpenRecordset("TESTDATA", dbOpenDynaset) ヘルプ等を見ると、Jetワークスペースでのみ 使用可と出てきます。 ADO,DAO,OpenRecordset等が理解しきれていないように思うのですが、 Access97(DAO?)では 何も出てこなかった上記のような内容、 何故Accessプロジェクトでは 上手くいかないのでしょうか?

  • アクセス2000(ADO)のレコード更新について

    1件しかレコードがない[リスト連番T]テーブルのレコードを読みだして、(フィールド)リストNOをプラス1して更新したいです。 DOAが混ざっているのか、下記のようにエラーがでます。プラス1して更新する正しいプログラムを教えて下さい。 Private Sub リスト_Click() Dim DBS As Databasu Dim CNC As New ADODB.Connection Dim RST As New ADODB.Recordset Dim LISTNO As Intejer Set CNC = CurrentProject.Connection RST.Open "リスト連番T", CNC, adOpenKeyset,adLockOptimistic, adCmdTableDirect LISTNO = RST!リストNO RST.Close Set RST = Nothing CNC.Close Set CNC = Nothing Set DBS = CurrentDb Set RST = DBS.OpenRecordset("リスト連番T") With RST -----.Edit で コンパイルエラー-----   メソッドまたはデータメンバーがみつかりません .Edit !リストNO = LISTNO + 1 .Update .Close

  • Access2007 データ型エラーについて

    お世話になっております。 下記のVBAでコードを数値型からテキスト型に変更したところ、「抽出条件でデータ型が一致しません。」というエラーが出ました。 デバッグをクリックすると、dbs.Execute strSQLの部分が黄色に反転しています。 VBAはあまり詳しくありませんので、エラーが出なくなる方法を教えていただければ助かります。 よろしくお願いいたします。 Private Sub 在庫差引_Click() Dim dbs As Database Dim rst As Recordset Dim strSQL As String Set dbs = CurrentDb Set rst = Me!サブフォーム.Form.RecordsetClone With rst .MoveFirst Do Until .EOF strSQL = "UPDATE マスター " & _ "SET 在庫数 = NZ(在庫数) - " & Nz(!数量, 0) & " " & _ "WHERE コード = " & !コード dbs.Execute strSQL .MoveNext Loop .Close End With End Sub

  • Access2007 サブフォームのレコードを一括印刷する方法

    お世話になっております。 サブフォームは帳票型になっており、下記で表示されている全レコードのチェックが入ります。 これと平行して、各レコードを印刷したいのですが、カーソルがあるレコードのみがレコードの数だけ印刷されてしまいます。 これを各レコードごとに印刷したいと思います。 Dim dbs As Database Dim rst As Recordset Dim strSQL As String Set dbs = CurrentDb Set rst = Me.RecordsetClone With rst If .RecordCount > 0 Then .MoveFirst Do Until .EOF .Edit !チェック = True DoCmd.OpenReport "印刷", acNormal, , "コード=" & Me.コード .Update .MoveNext Loop End If .Close End With ご教授いただければ幸いです。よろしくお願いいたします。

  • テーブルのリンク(ACCESS)

    ACCESS2003で下記の記述で「実行時エラー ’3219’ 無効な処理です。」というエラーメッセージがでます。 外部mdbでテーブルをリンクさせるとこのエラーがでます。同じmdbファイルにデータテーブルを置くと問題なく処理できます。 参照設定も過去ログを見てチェックしています。 Dim dbs As DAO.Database Dim rst As DAO.Recordset Set dbs = CurrentDb Set rst = dbs.OpenRecordset("テーブル名", dbOpenTable) ACCESS97では何の問題もなかったのですが, 2003ではうまくいきません。 どうかよろしくお願いします。

  • VBAでADOの質問です。かなり困ってます。

    質問なのですが、 Sub excel_access4() Dim dbs As New ADODB.Connection 'ADOコネクション Dim rcs As New ADODB.Recordset 'ADOレコードセット Dim mydbF As String 'アクセス ファイル Dim mydbT As String 'アクセス テーブル Dim mtr As Variant 'エクセル 全データ Dim rcd As Long 'アクセス 行指定 Dim fld As Long 'アクセス 列指定 '例として acctest2.mdb の テーブル4 に書き込む mydbF = "acctest2.mdb" 'アクセス ファイル指定 mydbT = "テーブル4" 'アクセス テーブル指定 'アクセスデータベースを指定 dbs.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & ThisWorkbook.Path & _ "\" & mydbF & ";" 'アクセスデータベースを開く rcs.Open Source:=mydbT, _ 'A ActiveConnection:=dbs, _  'B CursorType:=adOpenKeyset, _ 'C LockType:=adLockOptimistic, _ 'D Options:=adCmdTableDirect 'E 'エクセルシート全データ範囲(2次元配列) With Worksheets("Sheet1").Range("A1").CurrentRegion Let mtr = .Resize(.Rows.Count - 1).Offset(1, 0).Value For rcd = LBound(mtr, 1) To UBound(mtr, 1) '1次行 rcs.AddNew 'LB:最小値(1) UB:最大値(5) For fld = LBound(mtr, 2) To UBound(mtr, 2) '2次列 'アクセスに行列で書き込み Let rcs.Fields(fld - 1).Value = mtr(rcd, fld) Next rcs.Update Next End With rcs.Close dbs.Close Set rcs = Nothing Set dbs = Nothing End Sub AとBはわかりますが、CDEは一体何をしているのかわかりません。 また実行すると実行時エラー3709がでます。 この実行時エラーの原因がさっぱりわかりません。 どなたか詳しい方お教え願えないないでしょうか?

  • DAOでのコードをADOへ書き直し

    Access2003、WinXPです。 レコードセットの取得関係をDAOで書いていたのですが ADOに途中から変更しました。 変数宣言を Public db As DAO.Database ⇒Public cn As ADODB.Connection Public rs As DAO.Recordset ⇒Public rs As ADODB.Recordset Public Fld As DAO.field  ⇒Public Fld As ADODB.field レコードセット取得を Set db = CurrentDb      Set rs = db.OpenRecordset(strSQL) ↓ Set cn = CurrentProject.Connection Set rs = New ADODB.Recordset rs.Open strSQL, cn レコードセット クローズを Set rs = Nothing Set db = Nothing ↓ rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing としました。今のところ動いているようですが、 何か勘違い、気をつけないといけない事等ありますでしょうか・・・?

専門家に質問してみよう