Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


6301 / 13646 ツリー ←次へ | 前へ→

【46050】エクセルとデータベースの連帯 もんち 07/1/21(日) 22:48 質問[未読]
【46053】Re:エクセルとデータベースの連帯 かみちゃん 07/1/21(日) 23:15 発言[未読]
【46055】Re:エクセルとデータベースの連帯 かみちゃん 07/1/21(日) 23:29 発言[未読]
【46056】Re:エクセルとデータベースの連帯 Kein 07/1/21(日) 23:31 発言[未読]
【46065】Re:エクセルとデータベースの連帯 neptune 07/1/22(月) 11:55 発言[未読]

【46050】エクセルとデータベースの連帯
質問  もんち  - 07/1/21(日) 22:48 -

引用なし
パスワード
   私は普段PHP&MYSQLのアプリケーションを開発しておりますが、この度友人からエクセルのみでのデータ管理をエクセル&アクセスでの管理に変えたいというので、試行錯誤中なのですが、色々調べて現状あるエクセルでのデータを一旦全てアクセスのmdbファイルにインポートし、そのデータを検索クエリ等を使い、エクセルのシートに抽出したいのですが、とりあえずネットで調べてDAOというものを使おうと思い、VBAの参照設定から、DAOをチェックして、以下のコードを見よう見真似で書いてみましたが、抽出条件でデータ型が一致しませんとエラーが出ます。
ちなみに変数のkokyakuNOはLong型で、テーブルのフィールドkokyakunoは数値型の長整数型にしております。
いまいちPHPとVBAと全く違う事が多くわからないのですが、よろしければご教授のほどよろしくお願いします。
あと、よろしければ、エクセルVBA&アクセスのテーブルの連帯や、クエリの書き方など、詳しく書いてあるサイト等があれば教えていただきたいです。


Dim moneyTotal As Currency
Dim kokyakuNO As Long
Dim dbobj As Database
Dim dbrecord As Recordset
Dim filename As String
Dim m As Field
Dim tsql As String
  
  kokyakuNO = Val(F請求業務.Textkode.Value)
  filename = "C:\Documents and Settings\aaa\aaa\aaa\aaa.mdb"
 
  Set dbobj = OpenDatabase(filename)
  tsql = "select * from T_kokyaku where kokyakuno = '" & kokyakuNO & "';"
  Set dbrecord = dbobj.OpenRecordset(tsql, dbOpenDynaset)

  Worksheets("請求印刷").Select
  Range("A6").CopyFromRecordset dbrecord

  dbrecord.Close
  dbobj.Close

【46053】Re:エクセルとデータベースの連帯
発言  かみちゃん E-MAIL  - 07/1/21(日) 23:15 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>エクセルVBA&アクセスのテーブルの連帯や、クエリの書き方など、詳しく書いてあるサイト等

詳しいかどうかわかりませんが、
私は以下のサイトを参考にして同様のことをしています。
http://www.vbasekai.com/tipsdao.html
(先頭から二文字は(全角になっているので)半角にしてください)

【46055】Re:エクセルとデータベースの連帯
発言  かみちゃん E-MAIL  - 07/1/21(日) 23:29 -

引用なし
パスワード
   こんにちは。かみちゃん です。

> VBAの参照設定から、DAOをチェックして、以下のコードを見よう見真似で書いて
> みましたが、抽出条件でデータ型が一致しませんとエラーが出ます。

どこの行で出ますか?

新規ブックで試しても出ますか?

参照設定には、
Microsoft DAO 3.x Object Library
にチェック(xはバージョンによって違う)が入っていますか?

Microsoft ActiveX Data Objects 2.x Library
にチェックが入っている場合、
Microsoft DAO 3.x Object Library
より下になっていますか?
これが上になっていると、
Set dbrecord = dbobj.OpenRecordset(tsql, dbOpenDynaset)
というコードで「型が一致しません」というエラーになります。

【46056】Re:エクセルとデータベースの連帯
発言  Kein  - 07/1/21(日) 23:31 -

引用なし
パスワード
   >抽出条件でデータ型が一致しません
ちょっと記憶が曖昧になってるけど、たしか数値型の場合は

tsql = "select * from T_kokyaku where kokyakuno = " & kokyakuNO

で良かったのでは・・?
>PHPとVBAと全く違う事が多くわからない
当然でしょうね。プログラミングの経験があれば、条件分岐やループなどは
何かしら書き方があるだろう、ぐらいのことは推測できるでしょうが、全く
触ったことがない言語は参考書を買って、一からとは言わないまでも三ぐらいから
勉強しないと使えないと思いますが・・。
>エクセルVBA&アクセスのテーブルの連帯や、クエリの書き方
DAOやADOを解説したページはいくつか知ってますが、SQL文を丁寧に解説している
ところは知りません。基本的なことなら
http://www.ann.hi-ho.ne.jp/hirok/sql/
http://www.rfs.jp/sb/sql/
http://www.agtech.co.jp/html/v8manuals/sqlref/sqlreftoc.html
DAOとADOと、僅かなクエリーの解説なども含めた解説サイトは
http://homepage2.nifty.com/inform/vbdb/
http://www.vbasekai.com/tipsdao.html
http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/sak3vb.htm
(URLの先頭4文字は半角に変換)

【46065】Re:エクセルとデータベースの連帯
発言  neptune  - 07/1/22(月) 11:55 -

引用なし
パスワード
   ▼もんち さん:

こんにちは、もう沢山のResが付いてますが、お邪魔します。
>ちなみに変数のkokyakuNOはLong型で、テーブルのフィールドkokyakunoは数値型の長整数型にしております。
ちなみにじゃなく、これは必須情報です。
>tsql = "select * from T_kokyaku where kokyakuno = '" & kokyakuNO & "';"
SQLには慣れておられるはずなのに数値型を文字列リテラルで囲ってらっしゃる。
これが敗因でしょうね?

debug.print tsql
としてイミディエイトウィンドウで確認してみてください。

SQL自体はDBによって方言はあるでしょうが、決まり事は同じと思いますよ。

ここからはお節介ですが、新しく書くならADOで書いた方が知識の使い回しが
効きますからそちらをお勧めします。AccessからSQLServer(無料のもあるし)
系に移行してもDBの設計が同じなら楽チンです。

6301 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free