- ベストアンサー
VBAでCSVを読み込みテーブルに追加する際、日付型にする方法
- ACCESS2003を使用している場合、VBAからCSVを読み込みテーブルに追加する際、日付型にしたいです。現在、納入日がテキスト型となっていますが、実行時にエラーが発生します。
- 納入日を8桁表記のテキスト型にすることで、エラーを回避することができますが、データベースの仕様上、納入日を日付/時刻型にする必要があります。
- どのようにすれば、VBAからCSVを読み込みテーブルに日付型で追加することができるのでしょうか?お知恵をいただければ幸いです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
試しにやってみました。当方の試験環境に合わせたコードですので、ご質問とは異なっている箇所がありますが、ご参考まで。strDateのところはアメリカ流の並びにすべきでしょうが、手抜きです。 Sub test() Dim cn As ADODB.Connection Dim objFSO As Object, objFile As Object Dim strkanri As String Dim buf As Variant Dim mySQL As String, strDate As String Set cn = CurrentProject.Connection Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile(CurrentProject.Path & "\" & "管理.csv") Do Until objFile.AtEndOfStream strkanri = objFile.ReadLine buf = Split(strkanri, ",") strDate = "#" & Left(buf(0), 4) & "/" & Mid(buf(0), 5, 2) & "/" & Right(buf(0), 2) & "#" mySQL = "UPDATE Table1 SET 管理コード=" & buf(2) & " WHERE 納入日=" & strDate & " AND 仕入NO=" & buf(1) & ";" cn.Execute mySQL Loop Set objFile = Nothing Set objFSO = Nothing cn.Close: Set cn = Nothing End Sub
その他の回答 (1)
- mitarashi
- ベストアンサー率59% (574/965)
#1です。SQL Serverは分かりませんので、一般論ですが、 mySQL = "UPDATE Table1 SET 管理コード=" & buf(2) & " WHERE 納入日=" & strDate & " AND 仕入NO=" & buf(1) & ";" の納入日と、仕入れNOを変数でなく、存在する値を定数で与えたら機能するのでしょうか。 それでも駄目な場合、 mySQL = "SELECT * FROM Table1 WHERE 納入日=" & strDate & " AND 仕入NO=" & buf(1) & ";" として、 rs.Open mySQL, cn, adOpenKeyset, adLockOptimistic ならば、レコードセットが取得できるでしょうか。 ご確認下さい。 実は、最初はこの方法で取得したレコードセットをUpdateするコードを書きましたが、もっと短く出来ないかと#1の形にしました。
お礼
mitarashi様 アドバイスありがとうございます、 いろいろ試しているのですが、以下を試しました MsgBox "strDateの値は" & strDate & "です" mySQL = "UPDATE Table1 SET 納入日= " & strDate & ";" strDateの値は2010/02/28ですと表示されますが 納入日の全部のレコードが以下の数値になります 1900/04/22 16:00:00 同じように mySQL = "UPDATE Table1 SET 仕入NO= " & buf(1) & ";" 先頭が0から始まる数値は0が取り除かれてしまいます、 先頭のゼロも残したままでテーブルに追加したいのです あと以下追加しましたがレコードセットはどのようにして取得するのでしょうか? Set rs = CreateObject("ADODB.Connection") rs.Open mySQL, cn, adOpenKeyset, adLockOptimistic 完成までもう少しだとは思うのですが、今しばらくお付き合い頂きたく存じます。 よろしくお願いします。
補足
mitarashi様 お世話になっています、 上記の疑問が以下のようにコードを修正することで解決しました。 mySQL = "UPDATE dbo_tbl03_jyutyuu SET 管理番号= " & buf(0) & " WHERE 受注日=# " & strDate & " # AND 連絡先電話番号='" & buf(7) & "';" 日付型を # #で囲いました → # " & strDate & " # 文字型を ' 'で囲いました → '" & buf(7) & "' 結局私がSQL serverの基本的な事を知らなかっただけでした、 あとすべてmitarashi様のコードでうまくいっています。 今回はmitarashi様の貴重なお時間とお知恵を拝借できて期待通りのものが出来ました、 大変感謝いたします、有難う御座いました。
お礼
mitarashi様 早速お知恵拝借させて頂ありがとう御座います。 こちらの環境ですと strDate = "#" & Left(buf(0), 4) & "/" & Mid(buf(0), 5, 2) & "/" & Right(buf(0), 2) & "#" の#をつけると抽出条件でデーター型が一致しませんとエラーが出ます。 そこで strDate = Left(buf(1), 4) & "/" & Mid(buf(1), 5, 2) & "/" & Right(buf(1), 2) に変更したところエラーはなくなりました。 エラーはないのですが WHERE 納入日=" & strDate & " AND 仕入NO=" & buf(1) & ";" がうまく機能してないようです。 Table1 の中と管理.csv中には 同じ納入日と仕入NOがあるのですが管理コードに追加できません。 ちなみにTable1はマイクロソフトのMSSQLからのリンクテーブルです 原因が分かりません、このような時はどのようにして原因究明すれば良いのでしょうか? またよきアドバイスを何卒お授けくだされば助かります。 管理コード