Microsoft Access ClubAccess超初心者対象ForumAccess初級者対象ForumAccess初・中級者対象ForumAccess VBA Tips ForumDAO、ADO、SQL Forum

     

No9784.SQL文をVBAで使うには

タイトルSQL文をVBAで使うには
記事No: 9784
投稿日: 2003/07/14(Mon) 19:07
投稿者: さとう
OS:Win2000
Access Version:2000
超初心者です。
クエリを作成しそのSQL文をVBAで使用するにはどう書けば良いでしょうか?
SQL文をコピーしてDoCmd.RunSQL""やstrSQL""の""の中に貼り付けて見ましたが、エラーになってしまいます。
宜しくお願いします。

タイトルRe: SQL文をVBAで使うには
記事No: 9788
投稿日: 2003/07/14(Mon) 20:12
投稿者: Dodonpa
こんにちは。

> 超初心者です。
> クエリを作成しそのSQL文をVBAで使用するにはどう書けば良いでしょうか?
> SQL文をコピーしてDoCmd.RunSQL""やstrSQL""の""の中に貼り付けて見ましたが、エラーになってしまいます。
> 宜しくお願いします。

普通の方はAccessでSQLを学習しようとする場合、データベースウィンドウのクエリでSQLで記述を
して学んでいかれると思います。そのほうが記述に誤りがあるかどうかがすぐにわかり、どの個所が間違ってい
るのかもある程度把握できるからです。自分の場合はVBAから学習してしたので当然SQLもVBEで直接記
述してきました。ですから、果てしなくエラーに遭遇し何日も悩んだこともありました。VBAでSQLを記述
し、もしエラーがあった場合レコードセットのオープン時、あるいはアクションクエリの実行時に処理が中止さ
れ、SQL文の誤りの個所を指摘してくれません。こういった意味でクエリのSQLビューで学習されることを
お奨めします。
どうしても、直接VBEに記述したいのであればそれ相当の覚悟と根気が必要です。VBEに記述するSQL文
はテキスト型として扱います。さらにそのSQL文中に変数をかませたり、SQL文中にテキスト値を記述する
場合は複雑なことになりがちです。スペース1つ入れ忘れても簡単にエラーになっちゃいます。
自分がよくやるエラーの例です。
<クエリのSQLビューでの記述>
SELECT * FROM [Table_Name] WHERE [FieldName] = "定数";

<VBA上での記述>(strSQLはテキスト型変数)
(1)strSQL = "SELECT *" _
(2) & "FROM [Table_Name] " _
(3) & "WHERE [FieldName] = "定数";"

クエリのSQLビューでの記述は問題なく結果セットが返されます。
これをVBAで例のように記述するとエラーになります。間違いは2箇所。
(1)のアスタリスク(*)のあとにスペースがない。(3)の定数はシングルクォーテーション(')で囲まなければ
ならない。ですから

(1)strSQL = "SELECT * " _
(2) & "FROM [Table_Name] " _
(3) & "WHERE [FieldName] = '定数';"
が正解となります。その他いろいろな場合が考えられますので作成されたSQL文をよく見直してみてください

ではでは

タイトルRe^2: SQL文をVBAで使うには
記事No: 9839
投稿日: 2003/07/15(Tue) 19:08
投稿者: さとう
回答ありがとうございます。
コンパイルでエラーは無くなったのですが、実行してもデータが更新されません。(Delete処理実施)
やはりしっかりSQLを学ばないと難しそうです。
色々とご丁寧にありがとうございました。

タイトルRe^3: SQL文をVBAで使うには
記事No: 9840
投稿日: 2003/07/15(Tue) 19:22
投稿者: Dodonpa
こんにちは。

> 回答ありがとうございます。
> コンパイルでエラーは無くなったのですが、実行してもデータが更新されません。(Delete処理実施)
> やはりしっかりSQLを学ばないと難しそうです。
> 色々とご丁寧にありがとうございました。

コンパイルがとおるってことは、例えば、DELETE句とFROM句の間にスペースがないとかなどの単純なものかもしれません。Debug.PrintでイミディエイトウィンドウにSQL文を出力させるなどしてみるとわかるかも知れません。
もしくは、DELETEする対象レコードがないとかかな?
よろしければ、VBEに記述したSQL文をそのままアップすればわかるかも知れません。

ではでは。

タイトルRe^4: SQL文をVBAで使うには
記事No: 9943
投稿日: 2003/07/17(Thu) 16:34
投稿者: さとう
連絡が遅くなりましたが、回答ありがとうございます。

> コンパイルがとおるってことは、例えば、DELETE句とFROM句の間にスペースがないとかなどの単純なものかもしれません。Debug.PrintでイミディエイトウィンドウにSQL文を出力させるなどしてみるとわかるかも知れません。
上記チェックしましたが問題はありません。

> もしくは、DELETEする対象レコードがないとかかな?
> よろしければ、VBEに記述したSQL文をそのままアップすればわかるかも知れません。
対象データは確かにあります。

下記に構文を記しますので宜しくお願いします。

Public Function データ削除()

strsql = "DELETE 受発送T.JANコード, 受発送T.発送数量 " _
& "FROM 受発送T WHERE " _
& "(((受発送T.JANコード) = '4519462139921') AND ((受発送T.発送数量) = 0)) OR " _
& "(((受発送T.JANコード) = '4539913009870') AND ((受発送T.発送数量) = 0));"

End Function

タイトルRe^5: SQL文をVBAで使うには
記事No: 9966
投稿日: 2003/07/17(Thu) 19:49
投稿者: Dodonpa
こんにちは。

>Public Function データ削除()
>
> strsql = "DELETE 受発送T.JANコード, 受発送T.発送数量 " _
> & "FROM 受発送T WHERE " _
> & "(((受発送T.JANコード) = '4519462139921') AND ((受発送T.発送数量) = 0)) OR " _
> & "(((受発送T.JANコード) = '4539913009870') AND ((受発送T.発送数量) = 0));"
>
>End Function


あれっ、上記SQLをテストデータ作ってやってみましたが該当レコードは削除されますよ。
考えられるのは、テーブルのデータ型ですかね。JANコードフィールドはテキスト型ですよね。


あとは、上記Functionプロシージャでいろいろ問題点が。
1.データ削除()関数は呼出されてもなにも起きませんよ
2.strsqlは変数ですが、宣言部で宣言されていますか?PublicなFunctionだからあまりおすすめはできないですけど
3.SQL文自体は単なるテキストですから、DoCmdオブジェクトやADO、DAOで実行しないと処理はされませんよ。

単に、SQL文のみをアップしたのでしたら当方の杞憂ですが、Public Function〜End Functionが記述してあったのであえてコメントさせていただきました。

ではでは

タイトルRe^6: SQL文をVBAで使うには
記事No: 10016
投稿日: 2003/07/18(Fri) 17:23
投稿者: さとう
回答ありがとうございます。

Function 受注データ削除()
DoCmd.RunSQL "DELETE 受発送T.JANコード, 受発送T.発送数量 " _
& "FROM 受発送T WHERE " _
& "(((受発送T.JANコード) = '4519462139921') AND ((受発送T.発送数量) = 0)) OR " _
& "(((受発送T.JANコード) = '4539913009870') AND ((受発送T.発送数量) = 0));"
End Function

上記の構文で動作しました。
全くスキル不足でお手数お掛けしました。
ありがとうございました。


このAccessフォーラム過去ログ集は、Microsoft Access Club が運営しています

cPanel と PLESKをインストールした専用・共有レンタルサーバーを銀行振込でご提供中。契約書は一切不要です。
cPanelやPLESKをインストールした専用・共有レンタルサーバー
まずは1ヶ月から...。
日本国内の銀行振込がOK、クレジットカード、契約書が不要です。
対応は全てメールアドレスを介して行なっています。

 

ページの先頭へ 前ページへ戻る