2017-02-20 3 views
0

Normalerweise finde ich meine DateTime Probleme inund SQL durch Versuch und Irrtum, aber in diesem Fall habe ich eine Wand getroffen.Access VBA: SQL-String mit Zeichenfolge Tabelle als Datum konvertiert

Ich bin nicht einmal sicher, dass ich tun kann, was ich will.

Ich habe eine temporäre Tabelle mit Feldern F1, F2, usw.

Feld F7 ein Datum als Zeichenfolge n Format TT/MM/yyyy enthält.

Jetzt möchte ich die Daten aus der temporären Tabelle in eine Tabelle kopieren, in der die Daten in Feld F7 in einem Feld Date/Time gespeichert werden sollen. Das Format dieses Felds lautet Kurzes Datum (TT-MM-JJJJ).

Ich habe versucht, mit CDate(), Format() und Trim() allein und in verschiedenen Kombinationen, zusammen mit meinen aktuellen Daten mit ## Klotzen und das Hinzufügen von Klammern [] an meinen Tisch fieldname, aber ich kann einfach nicht die richtige Kombination finden.

Dies ist mein Code. Die importedDate funktioniert gut, weil ich eine Variable verwende. Aber für das Feld F7, ich bin Mischen die SQL Abfrage mit der VBA Datumsumstellung, und es funktioniert nicht für mich:

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 

Jede Hilfe wäre sehr geschätzt. Ich benutze Access 2013.

Danke.

+0

Können Sie den Code hinzufügen, mit dem Sie versucht haben, den 'DataType' zu ​​konvertieren? Es könnte sein, dass etwas mit dem Code, den du hier benutzt hast, nicht stimmt? – David

+0

Ich habe diese Kombination unter anderem ausprobiert: & "SELECT F1, F2, F3, F4, F5, F6, CDate (Format (Trim (F7)," & Chr (34) & "TT-MM-JJJJ" & Chr (34) & "))", F8, F9, '', '', '', '', F10, F11, F12, '', '', 0, '"& CDate (Datum) &"' " _ – ahsoe

+0

Können Sie eine Variable deklarieren, zB 'newDate' als Typ von' DateTime'. Führen Sie eine SELECT-Abfrage aus, um den Wert von F7 zu erhalten, führen Sie dann einen VBA-Konvertierungsbefehl für den Wert aus und fügen Sie ihn dann auf diese Weise ein. Es kann eine Schleife erfordern, um es für jede Zeile zu tun, also nicht der effizienteste Weg, sondern nur um zu überprüfen, ob es funktioniert. – David

Antwort

0

Es ist wirklich ganz einfach:

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

oder, wenn F7 punktiert (korrigiert mit Ersetzen Apostrophe haben):

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

Sorry, habe die Zitate für _Replace_ vermischt. Korrigiert. – Gustav

0

mit Vorschlag des Gustav Arbeit.

DateValue hat nicht funktioniert, vielleicht wegen meiner dänischen locale. Ich denke, es gab ein falsches Datumsformat (für mich) zurück, was dazu führte, dass NULL in das Feld F7 der Tabelle eingefügt wurde. Das ist dies nicht funktioniert hat, aber vielleicht für andere mit unterschiedlichen Datumsformaten arbeiten:

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

Aber CDate löste mein Problem mit zusätzlichen " hinzufügen. Das hat bei mir funktioniert:

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

Vielen Dank für die schnelle und hilfreiche Hilfe!

+0

_DateValue_ wird Zeichenfolgen wie '23 -10-2016 'konvertieren. Abgesehen von reinen Ganzzahlen sollte es auch keinen Ausdruck geben, der _DateValue_ nicht konvertieren kann, was _CDate_ kann. Wie sehen Ihre Daten wirklich aus? – Gustav

+0

Es enthält Daten über die Form: 25.02.2017 08.10.2016 01.12.2016 02.01.2017 21.10.2016 – ahsoe

+0

DatWert diese nach dem Austausch der Punkte umwandeln, so etwas anderes gehen müssen. – Gustav

Verwandte Themen