• ベストアンサー

mdbで使えたVBAの記述がadpで使えません

Access2003のmdbで以下のVBAの記述が動作するのですが、 adpでは「テーブルがありません」とエラーメッセージが出ます。 どなたか解決方法をご教授願います。 strSQL2 = "SELECT * FROM [製品マスター サブ] " & "WHERE 管理有無区分 = '3' ORDER BY 製品コード ASC, 工程No ASC;" rs2.Open strSQL2, cn2, adOpenKeyset, adLockReadOnly, adCmdTableDirect

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

  • ベストアンサー
  • bonaron
  • ベストアンサー率64% (482/745)
回答No.2

> rs2.Open strSQL2, cn2, adOpenKeyset, adLockReadOnly, adCmdTableDirect strSQL2 の内容は テーブル名ではありませんから adCmdTableDirect はまずいのでは? adCmdText で試してみては如何ですか?

teburon
質問者

お礼

問題が解決しました。 ありがとうございました

その他の回答 (1)

  • ShowMeHow
  • ベストアンサー率28% (1424/5027)
回答No.1

adpなるものを使ったことがないので、解決にはつながらないかもしれませんが、 テーブル名に「スペース」を入れるのはやめたほうが良いと思います。 http://support.microsoft.com/default.aspx?scid=kb;ja;826763

teburon
質問者

お礼

早速のご回答ありがとうございます。 すでにスペースありのテーブル名が存在し、 データベースが稼動しているものですから、 テーブル名を変えずに問題を解決したいのです

関連するQ&A

  • 【EXCEL VBA】ローカルmdbからデータを取得したい

    (環境)  WindowsXP  Excel2003  Access2003 現在、SQLサーバーからデータを取得しています。 下記のソースです(一部抜粋) Private Const SRC_SQL = "Provider=SQLOLEDB.1;User ID=testid;Password=testpass;Data Source=TEST-DB-1;Initial Catalog=testDB" Private Const TBL_TEST = "TEST.テストテーブル" Public Sub TEST_PRO Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = CreateObject("ADODB.Connection") cn.CommandTimeout = 0 cn.Open SRC_SQL strSQL = "SELECT X.*, FROM " & TBL_TEST & " X" strSQL = strSQL & " WHERE X.担当者CD = '" & wNAME & "'" strSQL = strSQL & " AND X.オープン日 >= '" & start_dt & "'" strSQL = strSQL & " AND X.オープン日 < '" & end_dt & "'" strSQL = strSQL & " ORDER BY X.オープン日 ASC" Set rs = CreateObject("ADODB.Recordset") rs.Open strSQL, cn With rs ~~~ End With Set rs = Nothing End Sub これを、SQLサーバーではなく、 C:\TESTACCESS.mdbのテーブル:テストテーブル からデータを取得するように変更したいのですが、 どのようにコーディングすればよろしいでしょうか? よろしくお願いします。

  • ACCESS VBAについて

    初歩的な質問かと思いますが、よろしくお願いします。 strSQL = "SELECT shain_cd,shime_ym FROM 社員マスター" strSQL = strSQL & " WHERE shain_cd = '" & work_shain_cd & "'" strSQL = strSQL & " AND shime_ym = '" & Me.shime_ym & "'" Set cn = CurrentProject.Connection Set rs = New ADODB.Recordset rs.Open strSQL, cn, adOpenKeyset, adLockOptimistic 上記を実行したところ、最終行にて エラーメッセージ: 「1つ以上の必要なパラメータの値が設定されていません。」 となります。 何が問題でしょうか? ※質問文に不足があれば、補足欄にて追記させていただきます。

  • WHERE句だと抽出できない VBA ADO

    アクセスのADOについて質問があります。 SQL文の中でWHERE句を使ってフィルタをすると返り値が0件になるのに、 rs.Open strSQLした後に、 rs.Filterで抽出すると、適切な数値が返ります。 具体的に言うと 【1】 strSQL = "SELECT T_会社名.*, T_会社名.住所 FROM T_会社名 WHERE (((T_会社名.住所) Like ""*埼玉*""));" rs.Open strSQL, cn, adOpenKeyset, adLockOptimistic i = rs.RecordCount 【2】 strSQL = "SELECT T_会社名.*, T_会社名.住所 FROM T_会社名;" rs.Open strSQL, cn, adOpenKeyset, adLockOptimistic rs.Filter = "T_会社名.住所 like '%埼玉%'" i = rs.RecordCount だと、【2】が、適切な数値が返ります。 なぜ【1】はダメなのでしょうか?

  • 【ACCESS2000】 VBAの更新処理に条件を加えたい。

    下記のような更新処理のVBAを組みました。 これにIDが5のものを更新するというのを加えるには どうすればよいでしょうか。 Dim cn As ADODB.Connection Dim rs As New ADODB.Recordset Set cn = CurrentProject.Connection rs.Open "tbl_D_売上", cn, adOpenKeyset, adLockOptimistic, adCmdTableDirect rs("入金方法") = 2 rs("入金方法名称") = "分割" rs.Update rs.Close Set rs = Nothing cn.Close Set cn = Nothing

  • excel vba で .mdb のデータ抽出

    excel vba で postdata.mdbのpostレコードから条件に合うデータを抽出しようとしています。 数日間、いろいろ調べていますが分かりません。 おそらく、SQLの部分だと思うのですが・・・ adoは初めて使う素人なので教えていただけないでしょうか。 On Error GoTo ErrGyo Set cn = New ADODB.Connection cn.Provider = "Microsoft.Jet.OLEDB.4.0" cn.Open ThisWorkbook.Path & "\postdata.mdb" Dim Rs As ADODB.Recordset Dim SQL As String Dim T_ken As String Dim T_si As String Dim T_mati As String Dim i As Long T_ken = TextBox1.Value  ’フォームにテキストボックス T_si = TextBox2.Value T_mati = TextBox3.Value SQL = "SELECT * FROM post WHERE ken like '" & T_ken & "' and si LIKE '" & T_si & "' and mati LIKE '" & T_mati & "'" Set Rs = New ADODB.Recordset Rs.Open SQL, cn, adOpenForwardOnly, adLockReadOnly MsgBox Rs.RecordCount  ’ここでチェックすると -1 となる??? If Rs.RecordCount = 0 Then MsgBox "該当するレコードは見つかりませんでした。", vbInformation Else For i = 1 To Rs.RecordCount Cells(i, 1) = Rs!num Cells(i, 2) = Rs!ken Cells(i, 3) = Rs!si Cells(i, 4) = Rs!mati Rs.MoveNext Next End If Rs.Close: Set Rs = Nothing cn.Close: Set cn = Nothing Exit Sub ErrGyo: MsgBox "postdataへの接続に失敗しました", vbCritical

  • 共有ロック・・・

    プログラム  VB データベース ACCESSを使っているんですが 次のようなエラーメッセージがでるんです、 ファイルの共有ロック数が制限を超えています。さらに 多段階のOLE DBの操作でエラーが発生しました。各OLE DBの状態の値をチェックしてください。作業は終了しませんでした。とでるんです。 Deleteのところでこのようなエラーがでるんです。何か解決方法はないですかね Set cn = New ADODB.Connection Set rs = New ADODB.Recordset ' 接続文字列を設定 cn.ConnectionString = _ "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=c:\****.mdb" ' コネクションをオープン cn.Open ' 選択クエリーを作成 strSQL = "Select * From 顧客 ORDER BY ID ASC" ' レコードセットをオープン rs.Open strSQL, cn, adOpenKeyset, adLockOptimistic, 1

  • 【ADO】mdbのレコードの条件検索

    日付+特定のレコードの値が優のレコードをExcelのセルに表示するマクロを組んでいます。 Option Explicit Const cnsADO_CONNECT1 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" Dim dbCon As New ADODB.Connection Dim dbRes As New ADODB.Recordset Dim dbCols As ADODB.Fields Dim strStartData As String, strEndData As String Dim strsql As String Dim Gyo As Long Public Sub testテスト() 'テスト用 strStartData = 20120401 strEndData = 20130331 '接続mdb名 FileName = \\~~テスト.mdb dbCon.Open cnsADO_CONNECT1 & FileName strsql = "SELECT * FROM テーブル名 WHERE 日付 BETWEEN '" & strStartData & "' AND '" & strEndData & "' ORDER BY 日付"   dbRes.Open strsql, dbCon, adOpenKeyset, adLockReadOnly strsql = Replace(strsql, "strEndData", strEndData) strsql = Replace(strsql, "strStartData", strStartData) dbRes.Filter = "座学判定  = '優' or WHERE 実技判定  = '優' "   dbRes.Open strsql, dbCon, adOpenKeyset, adLockReadOnly ←ここでエラー Gyo = 1 Rows("2:65536").ClearContents dbRes.MoveFirst Do Until dbRes.EOF ' 行の変数を加算し必要項目を選択してセルにセット Gyo = Gyo + 1 Set dbCols = dbRes.Fields 'DT_P_点検Tblテーブルよりを抜き出す Cells(Gyo, 1).Value = dbCols("ID").Value Cells(Gyo, 2).Value = dbCols("日付").Value Cells(Gyo, 3).Value = dbCols("座学判定").Value Cells(Gyo, 4).Value = dbCols("実技判定").Value ' 次のレコードに移る dbRes.MoveNext Loop ' レコードセット、データベースを閉じる dbRes.Close Set dbRes = Nothing dbCon.Close Set dbCon = Nothing End Sub dbRes.Open strsql, dbCon, adOpenKeyset, adLockReadOnly の部分でエラーになってしまいます。 「CommandオブジェクトのCommandTextが設定されていません」と表示されます。 dbRes.Filter = "座学判定  = '優' or WHERE 実技判定  = '優' "   ここの部分が無ければ、指定の期間のデータを抽出してくれています。 指定期間 + 特定の部分がTrueの場合の抜き出しをしたいのですが、どこかで指定が不足しているのでしょうか?

  • BeforeUpdateのADOの記述でエラー

    Access VBAです。 フォームの対象商品コードを入力後、他の項目にカーソルを移動すると 実行時エラー'91' オブジェクト変数またはWithブロック変数が設定されていません。 というメッセージが表示され、 rs.Open "商品T", cn, adOpenKeyset, adLockOptimistic, adCmdTableDirect が黄色くなります。 コーディングは、以下の通りです。 Option Compare Database Option Explicit Private cn As ADODB.Connection Private rs As ADODB.Recordset Private Sub Form_Load() 'フォームの読み込み時 Set cn = CurrentProject.Connection 'DB接続 End Sub Private Sub 対象商品コード_BeforeUpdate(Cancel As Integer) rs.Open "商品T", cn, adOpenKeyset, adLockOptimistic, adCmdTableDirect Set rs = New ADODB.Recordset rs.Index = "PrimaryKey" rs.Seek 対象商品コード, adSeekFirstEQ If rs.EOF Then MsgBox ("該当する商品は存在しませんでした。") Else 対象商品名.Caption = rs!商品名 End If End Sub

  • WHERE レコードが抽出されない

    ADOでSQL文を作ってるのですが WHERE句がうまくできません。 rs.Open "T_テーブル", cn, adOpenKeyset, adLockOptimistic rs.Filter = "URL like '#*'" なら、うまくいくのですが、 Filterを使うのをやめて、WHEREに書きかえると、エラーにはならないのですが 取得レコードが0件になります。 rs.Open "T_テーブル WHERE [URL] like '#*';", cn, adOpenKeyset, adLockOptimistic も rs.Open "T_テーブル WHERE URL like '#*';", cn, adOpenKeyset, adLockOptimistic も、0件が返ります。 何がおかしいのでしょうか? URLフィールドで、#で始まるレコードを抽出したいです。

  • データグリッド・・・?

    データグリッドにデータを入れたいのですが、入りません。ソースを書きますのでご指摘お願いします。 Set cn = New ADODB.Connection Set rs = New ADODB.Recordset ' 接続文字列を設定 cn.ConnectionString = _ "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=c:¥aaa.mdb" ' コネクションをオープン cn.Open ' 選択クエリーを作成 strSQL = "Select * From bbb where ID = " & dbid & _ " ORDER BY 年月日 DESC" ' レコードセットをオープン rs.Open strSQL, cn, adOpenStatic, adLockOptimistic set DataGrid1.DataSource = rs ' オブジェクトを閉じる rs.Close cn.Close ' オブジェクトを解放 Set rs = Nothing Set cn = Nothing