2009-05-22 3 views
0

Я использую VB6 для своего приложения. Я заполнил Excel с помощью RecordSet, полученного из SQL-запроса.Формат даты в VB6

Одна колонка называется Time_period имеет значения, как

"2/31/2006" 
"12/29/2000" 
etc. 

мне нужно передать эти входы в другой SQL запрос для обработки. Я немного путаюсь с форматами, поскольку Oracle принимает входные данные типа «23-Jul-2009», «02-Jan-1998» и так далее.

Можете ли вы помочь преобразовать один формат в другой в VB6?

+0

Пожалуйста, разместите исходный SQL-запрос, который вы используете для заполнения объекта RecordSet. – Tomalak

+0

Это, вероятно, не относится к исходному вопроснику, но формат даты, используемый в Excel, инструкция VB6 Format и т. Д., Зависит от ваших региональных настроек. Я предполагаю, что вы находитесь в США из ваших форматов даты m/d/yyy. Я просто хотел бы записать, что решения, опубликованные ниже, не будут работать для некоторых из нас в других странах мира. – MarkJ

ответ

2

использовать формат.

Debug.Print Format$(Now, "dd-mmm-yyyy") 

Это будет работать в вашем случае.

Вы можете попробовать использовать следующий формат (стандарт ISO):

Debug.Pring Format$(Now, "yyyy-MM-dd") 
+0

Работает только в том случае, если ваши региональные настройки являются английскими. В противном случае названия месяца появятся на другом языке. Я полагаю, что Oracle может возразить. – MarkJ

+0

Стандарт ISO определенно предпочтительнее – barrowc

1

Dim oracleDate As String Dim excelDate Как DateTime

oracleDate = Format$(excelDate , "dd-mmm-yyyy") 
+0

«Dim excelDate As DateTime» - VB6 не имеет типа данных DateTime. Возможно, вы имели в виду Date? – onedaywhen

1

Если вы получаете дату из записей, вы можете сохранить его в переменной дате и просто вызвать следующее форматирование функции, чтобы получить строковое представление вам нравится:

Format(myDateVar, "dd-mmm-yyyy") 

Затем вы можете передать это значение для вашего запроса вместе с соответствующими разделителями дат. (если не используются параметры)

Возможно, вы также захотите проверить на значения, так как они не будут работать с вышеуказанной функцией.

0

Обычно можно «передать» набор результатов одного запроса другому, создав JOIN между ними в SQL-коде. Надеемся, что значения даты в столбце Time_period уже имеют временный тип; если они не могут быть применены к одному с использованием SQL. Даже если данные находятся в другой базе данных (например, Oracle и Excel), вы могли бы использовать ACE/Jet (доступ к MS Access) для создания запроса на объединение двух, либо напрямую, либо через подписанную таблицу. Подробнее о том, чего вы пытаетесь достичь, пожалуйста.

1

Вот фрагмент кода из Excel VBA, должен работать в VB6 с некоторыми настройками.

Sub temp() 
    Dim lConn, lRs, sSQL As String 
    Set lConn = CreateObject("ADODB.Connection") 
    Set lRs = CreateObject("ADODB.Recordset") 

    lConn.Open "DSN=yourdns; UID=youruid; PWD=yourpwd;" 

    Dim oWS As Worksheet 
    Set oWS = Worksheets(1) 

    sSQL = " SELECT * FROM Product WHERE Last_Upd_Date > to_date('" & oWS.Range("A1").Value & "', 'MM-DDD-YYYY') " 
    lRs.Open sSQL, lConn 

    Debug.Print lRs.EOF 
    lRs.Close 
    lConn.Close 
End Sub 

Надеюсь, это поможет.

+0

спасибо! плохое использование – divinci

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