[リストへもどる]
一括表示

投稿時間:2004/06/25(Fri) 13:14
投稿者名:ゆじん
Eメール:
URL :
タイトル:
VBでクエリを実行したい
こんにちは。
VB&Accessを使い始めて日の浅い、超初心者です。

VBからクエリを実行したいのですが、どうも上手くいきません。
Access上でクエリを実行するときちんとデータが入るのにVBで実行すると上手くデータが入りません。
(見よう見真似で作ってるけど・・・)
どなたか、よきアドバイスの程、よろしくお願いします。
※下記にプログラムの一部を記載しておきますのでお願いします。

Public cn As New ADODB.Connection
Public hs As New ADODB.Recordset

dim SQLSET as string

cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\test.mdb"

SQLSET = ""
SQLSET = "個別" 'クエリ名
cn.Execute SQLSET
cn.Close
・・・・

投稿時間:2004/06/25(Fri) 13:29
投稿者名:カン・ジュンサン
Eメール:
URL :
タイトル:
Re: VBでクエリを実行したい
> SQLSET = "個別" 'クエリ名

私の環境では実行できましたよ。
個別ってアクションクエリ( UPDATE, INSERT DELETE など)の名前ですよね?

投稿時間:2004/06/25(Fri) 14:44
投稿者名:ゆじん
Eメール:
URL :
タイトル:
Re^3: VBでクエリを実行したい
> カン・ジュンサンさん、回答ありがとうございます。
>
> 言い忘れましたが、”個別”とは、追加クエリのクエリ名です。
> ※testテーブルとdamyテーブルが存在します。
> どうしたら、上手く実行出来るのでしょうか?
>
> ○testテーブル
>  担当者
> ○damyテーブル
>  アドレス
>  担当者
>  完了日
>  備考
>
> ちなみに、”個別”クエリをSQLビューで表示すると下記のようになります。
> INSERT INTO test ( 入庫枚数 )
> SELECT Count(damy.アドレス) AS アドレスのカウント
> FROM damy, test
> WHERE (((Mid([damy].[完了日],1,10))=Date()) AND ((damy.担当者)=[test].[担当者]));

投稿時間:2004/06/25(Fri) 15:48
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re^4: VBでクエリを実行したい
> ※testテーブルとdamyテーブルが存在します。
damy = Dummy?

> INSERT INTO test ( 入庫枚数 )
> SELECT Count(damy.アドレス) AS アドレスのカウント
> FROM damy, test
> WHERE (((Mid([damy].[完了日],1,10))=Date()) AND ((damy.担当者)=[test].[担当者]));

Jet SQL の場合は、
  〜 FROM dammy INNER JOIN test damy.担当者 = test.担当者 WHERE 〜
の方が良いかもしれません。まぁ、WHEREで連結する事もできるでしょうけれども。


それはさておき、完了日の検索方法に問題がありそうです。

Mid関数は文字列操作を行う物であり、戻り値は 文字列型 (または Null) です。
一方、Date関数は日付を返す物であり、戻り値は 日付型 です。

文字列型 と 日付型 という、異なるデータ型を比較しているので、
型変換や値の比較に失敗して、望むべき結果が得られていないのかも知れません。

イコールの両辺のデータ型が一致するよう、比較条件を書き直して見てください。
それを修正しても更新できないようであれば、エラーメッセージの内容を投稿してみてください。

投稿時間:2004/06/25(Fri) 17:21
投稿者名:ゆじん
Eメール:
URL :
タイトル:
Re^5: VBでクエリを実行したい
魔界の仮面弁士さん、回答ありがとうございました。

テーブル上、一部変更して同じ処理を行ったのですが、やはり上手くいきません。
(エラーが表示される訳ではありません)
※”完了”というフィールドを作成してデータ型を日付/時刻型に設定しました。
また、SQLビューで表示してみると下記のようになってました。
あとは、どこを改造したらいいのでしょうか?
Access上で実行すると上手くいくのですが・・・。(-_-;)
お手数ですが、よきアドバイスの程お願いします。


INSERT INTO test ( 入庫枚数 )
SELECT Count(damy.アドレス) AS アドレスのカウント
FROM damy, test
WHERE (((damy.完了)=Date()) AND ((damy.担当者)=[test].[担当者]));

投稿時間:2004/06/25(Fri) 21:04
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re^6: VBでクエリを実行したい
> Access上で実行すると上手くいくのですが・・・。(-_-;)
ADOで実行できず、Accessでのみ実行できるとなると、

(a) Access側がANSI-89モードに設定されており、SQL文法に違いがある。(ADOではANSI-92構文です)

(b) SandBoxモードの設定に問題がある。
  http://support.microsoft.com/default.aspx?scid=kb;ja;239482

などを想像しますが……エラーが出ないとなると、これらとは違いそうですね。
(On Error Resume Next等でエラーを無視しているわけではないのですよね?)


確認のために、以下の事を試して見てください。

1) 『Date()』の替わりに、『#6/25/2004#』のような日付リテラルに変更してみる。
2) 『damy.完了=日付値』ではなく、『damy.完了 Between 前日 AND 翌日』の3日間で範囲検索してみる。
3) 抽出条件から『damy.完了』への絞込みをやめ、damy表内の全データを追加させてみる。
4) BeginTrans/CommitTransを明示的に記述してみる。
5) ExecuteメソッドのOptions引数に、adExecuteNoRecords を指定してみる。
6) クエリ名を指定するのではなく、クエリ内のSQLを直接 Execute させてみる。
7) 「cn.Execute "個別"」の替わりに、「cn.個別」の構文を使ってみる。
8) Jet 4.0 に Service Pack 8 を適用してあるかどうかを確認してみる。
http://support.microsoft.com/default.aspx?kbid=239114

投稿時間:2004/06/28(Mon) 14:07
投稿者名:ゆじん
Eメール:
URL :
タイトル:
Re^7: VBでクエリを実行したい
魔界の仮面弁士様、回答ありがとうございます。
言われた通り、いろいろと確認しながら処理を行ったところ、バッチリ巧く処理出来ました。
本当にありがとうございました。(^.^)
まだ、VBもAccessも使い始めたばかりなので、質問の意味もよく理解出来ない点が多いのですが、
これからも頑張って行きたいと思いますので、今後とも、よきアドバイスお願いします。
今回は、大変、勉強になりました。