2009-05-22 44 views
0

我正在为我的应用程序使用VB6。我已经使用从SQL查询获得的RecordSet填充Excel。所谓Time_periodVB6中的日期格式

一列有一个像

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

值,我需要这些输入传递给另一个SQL查询处理。我对这些格式有些困惑,因为Oracle接受了“2009年7月23日”,“02年1月2日”等类型的输入。

你能帮助转换从VB6的一种格式到另一种?

+0

请发布原始SQL查询,即您用于填充RecordSet对象的查询。 – Tomalak 2009-05-22 09:46:39

+0

这可能与原始提问者无关,但在Excel,VB6格式语句等中使用的日期格式取决于您的区域设置。我猜你是在美国的m/d/yyy日期格式中。我只想记录下面发布的解决方案不适用于我们世界其他地方的其他人。 – MarkJ 2009-05-22 11:19:04

回答

2

使用的格式。

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

这将适用于您的情况。

你可以尝试使用以下格式(ISO标准):

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

只有当您的区域设置为英语时才有效。否则,月份名称将以另一种语言出现。我想甲骨文可能会反对。 – MarkJ 2009-05-22 15:04:52

1

昏暗oracleDate作为字符串 昏暗excelDate为DATETIME

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

“Dim excelDate As DateTime” - VB6没有DateTime数据类型。也许你是说日期? – onedaywhen 2009-05-22 12:57:52

1

如果从记录让你的日期,你可以将其存储在一个日期变量,只需要调用下面的格式化功能来获得字符串表示你喜欢:

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

然后你就可以用适当的日期分隔符沿着这条价值传递给您的SQL查询。 (如果不使用参数)

您可能还想检查null值,因为它们不会与上述函数一起使用。

0

通常通过在SQL代码中创建两个JOIN之一,将一个查询的结果集“传递”给另一个查询。希望列Time_period中的日期值已经是时间类型;如果不是,可以使用SQL将它们转换为一个。即使数据位于不同的数据库中(例如Oracle和Excel),您也可以使用ACE/Jet(a.k.a.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 

希望这会有所帮助。