Access (VBA)

Access VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : Access 2016)
cmd.Executeでのエラー
投稿日時: 19/03/08 08:09:51
投稿者: ゴマゴマ

お世話になります。
長いSQL文をフォームに表示しようとしたら最終行しか表示されなかったので、検索して下記のコードを作成しました。そうしたところ←※のところで実行時エラー「入力テーブルまたはクエリstrSQLが見つかりませんでした。」となりました。クエリの指定のしかたが悪いと思うのですが、解決方法が不明でハマっています。解決方法をよろしくご教示ください。
 

Private Sub Form_Open(Cancel As Integer)
 
    Dim cn As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    Dim cmd As New ADODB.Command
    Dim strSQL As String
             
    Set cn = CurrentProject.Connection
    Set cmd.ActiveConnection = cn
    
    strSQL = "SELECT 〜FROM〜LEFTJOIN〜;"
    cmd.CommandText = strSQL
    Set rs = cmd.Execute
    
    With rs
        cmd.CommandText = " DELETE FROM strSQL; "
        cmd.Execute ←※
        Do Until .EOF
            cmd.CommandText = "INSERT INTO strSQL" & "(〜〜);"
            cmd.Execute
        .MoveNext  
        Loop
    End With
    Me.Requery
    rs.Close: Set rs = Nothing: cn.Close: Set cn = Nothing
End Sub

 
以上

回答
投稿日時: 19/03/08 09:30:28
投稿者: sk

引用:
長いSQL文をフォームに表示しようとしたら最終行しか表示されなかったので

具体的にどんなテーブルを元にどのような結果を得たいのか
ということについて明記された上、(その意図に反して)
そういう表示になってしまう原因を突き止める方が先なのでは。
 
引用:
実行時エラー「入力テーブルまたはクエリstrSQLが見つかりませんでした。」となりました。

引用:
cmd.CommandText = " DELETE FROM strSQL; "

[strSQL]という名前のテーブル/クエリが存在しないからでしょう。
 
そのステートメントを記述された意図としては
「"DELETE FROM " という文字列リテラルと
変数 strSQL に格納されている値とを
文字列連結しようとしている」ということ
なのでしょうけど、
 
引用:
strSQL = "SELECT 〜FROM〜LEFTJOIN〜;"

この文字列をそのまま DELETE 文の後ろに付加したところで、
構文エラーになるのは目に見えています。
 
引用:
cmd.CommandText = "INSERT INTO strSQL" & "(〜〜);"

同上。

投稿日時: 19/03/08 10:21:09
投稿者: ゴマゴマ

sk様
 
早速にご返信ありがとうございます。
私の考えとしては strSQL = "SELECT 〜FROM〜LEFTJOIN〜;" としていることでstrSQLというクエリは存在しているじゃんと考えていましたが違う!? SELECT文は中身は長かったので省略して質問してしましました。
 

strSQL = "SELECT T_テーブル!受注番号,T_テーブル!納期,T_wT_取込み前データ!納期(もう少しあります)
FROM wT_取込み前データ LEFT JOIN T_メインテーブル ON(T_テーブル!寸法=wT_取込み前データ);"

 
取込み済みデータでも納期が変わることがあるので、変更になった納期のデータを一旦ワークテーブルに入れ、比較して確認するためのフォームを作ることが目的です。
 
以上

回答
投稿日時: 19/03/08 10:50:07
投稿者: Suzu

"SELECT T_テーブル!受注番号,T_テーブル!納期,T_wT_取込み前データ!納期(もう少しあります)
FROM wT_取込み前データ LEFT JOIN T_メインテーブル ON(T_テーブル!寸法=wT_取込み前データ);"
 
DELETE FROM 〜 に上記が入っ【たとして】、
 先の SELECT〜〜FROM のFROM に複数のテーブルが指定されています。
  wT_取込み前データ / T_メインテーブル どちらのレコードを消しますか?
  LECT JOINだから wT_取込み前データ?
 結論、入りません。
 
DELETE FROM テーブル名 WHERE句 に、SELECTの抽出と同じになる様に設定を行う必要があります。
個人的には、EXEST を使い サブクエリが楽ちんと思います

回答
投稿日時: 19/03/08 10:51:44
投稿者: Suzu

というか。。
 
個人的には

引用:
長いSQL文をフォームに表示しようとしたら最終行しか表示されなかったので

こちらの方がなんで?? って事で、そちらの原因を探して解決するのが本筋なのであれば
そちらを優先しますけどね。。

投稿日時: 19/03/08 13:15:02
投稿者: ゴマゴマ

Suzu様
 
ありがとうございます。DELETEのところにSELECTと同じものをEXESTで入れてやってみたいと思います。
引き続きよろしくお願いします。
 
以上