2017-02-20 13 views
0

Обычно я выясняю свои DateTime вопросов в VBA и SQL пробной и ошибочной, но в этом случае я ударил стену.Доступ к VBA: SQL String со строкой tablefield преобразуется как дата

Я даже не уверен, что могу делать то, что хочу.

У меня есть временной таблицы с полями F1, F2 и т.д.

поле F7 содержит дату в виде строки н формате дд/мм/гггг.

Теперь я хочу скопировать данные из временной таблицы в таблицу, где данные в поле F7 должны храниться в поле Date/Time. Формат этого поля - Short Date (dd-MM-yyyy).

Я попытался с помощью CDate(), Format() и Trim() в одиночку и в нескольких комбинациях, а также дополняя свои данные даты с ## и добавить скобки [] к моему столу fieldname, но я просто не могу найти правильную комбинацию.

Это мой код. importedDate отлично работает, потому что я использую переменную. Но для поля F7, я смешение SQL запроса с преобразованием VBA даты, и он не работает для меня:

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

Я пробовал эту комбинацию среди других: & "SELECT F1, F2, F3, F4, F5, F6, 'CDate (Формат (Trim (F7)", & Chr (34) & "dd-mm-yyyy" & Chr (34) & ")) ', F8, F9,' ',' ',' ',' ', F10, F11, F12,' ',' ', 0,' '& CDate (Date) &"' " _ – ahsoe

+0

Можете ли вы объявить переменную (например, 'newDate') как тип' DateTime'. Выполните запрос SELECT для получения значения F7, затем запустите команду VBA Convert на значение, а затем вставьте его таким образом? Для каждой строки может потребоваться цикл, поэтому не самый эффективный способ, а просто проверить, работает ли он. – David

ответ

0

Это действительно очень просто:

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

или, если F7 пунктир (исправленный иметь одинарные кавычки с Replace):

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

Извините, у вас есть цитаты для смешивания _Replace_. Исправленный. – 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

Он содержит данные о форме: 25.02.2017 08.10.2016 01.12.2016 02.01.2017 21.10.2016 – ahsoe

+0

DateValue преобразует их после замены точки, так что-то еще должно идти. – Gustav

 Смежные вопросы

  • Нет связанных вопросов^_^