2017-02-20 18 views
0

通常、DateTimeの問題はVBASQLにありますが、この場合は壁に当たっています。VBAへのアクセス:文字列tablefieldを含むSQL文字列を日付として変換します

私は私が欲しいことをすることができるかどうかもわかりません。

I等のフィールドF1、F2、と一時テーブルを有する

フィールドF7は、文字列のn形式DD/MM/YYYYのように日付を含みます。

今、テンポラリテーブルのデータを、フィールドF7のデータをDate/Timeフィールドに格納するテーブルにコピーします。このフィールドの形式は、短い日付(dd-MM-yyyy)です。

私は##で私の日付データをパディングし、私のテーブルfieldnameにブラケット[]を追加するとともに、単独で、及びいくつかの組み合わせでCDate()Format()Trim()を使用してみましたが、私は単純に正しい組み合わせを見つけることができません。

これは私のコードです。私は変数を使用しているので、importedDateは正常に動作します。しかし、フィールドF7のために、私はVBA日付変換でSQLクエリを混合していて、それは私のために働いていません。

Sub MoveImportedData() 
Dim SQLStr As String 


SQLStr = "INSERT INTO TblDebitorSaldoListe " _ 
& "(CompanyCode,CompanyName, CustomerNumber, CustomerName, OneTimeCustomerName, TermsOfPayment, NetDueDate, Reference, " _ 
& "DunningBlock,Comment, ReminderOne, ReminderTwo, DebtCollection, TotalAmountDKK, TotalNotYetDueDKK, TotalOverdueDKK, " _ 
& "ReminderOneFile, ReminderTwoFile, NoReminder, ImportedDate) " _ 
& "SELECT F1, F2, F3, F4, F5, F6, #" & CDate("F7") & "#, F8, F9, '', '', '', '', F10, F11, F12, '', '', 0, '" & CDate(Date) & "' " _ 
& "FROM TEMP WHERE Len(F1)=4" _ 

MsgBox SQLStr 

DoCmd.RunSQL SQLStr 

End Sub 

任意の助けもいただければ幸いです。私はAccess 2013を使用しています。

ありがとうございました。

+0

'DataType'の変換に使用したコードを追加できますか?ここで使用していたコードに何か問題があった可能性がありますか? – David

+0

私はこの組み合わせを試してみました:& "F1、F2、F3、F4、F5、F6、" CDate(フォーマット(Trim(F7)、 "&Chr(34)&" dd-mm-yyyy "&Chr F10、F11、F12、 ''、 ''、0、 '"&CDate(Date)&"' "、" F8、F9、 _ – ahsoe

+0

'DateTime'の型として変数(' newDate'など)を宣言できますか? 'SELECT'クエリを実行してF7の値を取得し、次にVBA Convertコマンドを実行して、この方法で挿入しますか?それは、各行に対してそれを行うためにループを必要とする可能性があります。最も効率的な方法ではなく、それを確認するだけです。 – David

答えて

0

それは実際にはかなり簡単です:F7が点在している場合、

& "SELECT F1, F2, F3, F4, F5, F6, DateValue(F7), F8, F9, '', '', '', '', F10, F11, F12, '', '', 0, Date() " _ 

をか(交換すると、単一引用符を持つように修正):グスタフの提案を使用した作業

& "SELECT F1, F2, F3, F4, F5, F6, DateValue(Replace(F7, '.', '-')), F8, F9, '', '', '', '', F10, F11, F12, '', '', 0, Date() " _ 
+0

申し訳ありませんが、_Replace_ mixesを引用しています。修正されました。 – Gustav

0

デンマークのロケールのために、DateValueが機能しませんでした。私はそれがNULLのテーブルのF7フィールドに挿入されていた(私にとって)間違った日付形式を返したと思います。

& "SELECT F1, F2, F3, F4, F5, F6, DateValue(Replace(F7, ""."", ""-"")), F8, F9, '', '', '', '', F10, F11, F12, '', '', 0, Date() " _ 

しかしCDateは余分"を追加するとともに、私の問題を解決しました:それは、これは動作しませんでしたが、異なる日付形式で他の人のために働く可能性があります。これは私のために働いた:

& "SELECT F1, F2, F3, F4, F5, F6, CDate(Replace(F7, ""."", ""-"")), F8, F9, '', '', '', '', F10, F11, F12, '', '', 0, Date() " _ 

すばやく便利なヘルプの両方をありがとう!

+0

_DateValue_は'23 -10-2016 'のような文字列を変換します。また、純粋な整数を除いて、_DateValue_が変換できない式が_CDate_できないべきではありません。あなたのデータは本当にどのように見えますか? – Gustav

+0

それは、フォーム上のデータが含まれています。2017年2月25日 2016年8月10日 2016年1月12日 2017年2月1日 2016年10月21日 – ahsoe

+0

DATEVALUEは、ドットを交換した後、これらを変換しますので、他の何かが起こっている必要があります。 – Gustav

関連する問題