使用IBMDA400 OleDb提供程序在AS400上运行SELECT似乎会将日期返回为字符串值,当您尝试将日期格式应用于字段时,SSRS只会嘲笑您。我已经在SELECT中尝试了简单的CAST,但没有成功。
如何从iSeries OleDb提供程序取回实际的DBTYPE_DBDATE结构?
我应该提到,有关的日期都是由类型为DATE的UDF返回的。IBM似乎将DATE类型映射为DBTYPE_STR OleDb类型。
表中的字段可能未定义为日期类型。您将需要使用DATE
函数将它们转换为查询的一部分。
您可以使用DSPFFD
命令Navigator或查询SYSIBM.SQLCOLUMNS表来查看字段定义。
在与IBMDA400提供程序进行进一步测试之后,我发现在“ OLE DB技术参考”中隐藏了“将日期转换为字符”属性,这是作为带有Access的程序员工具包的一部分安装的。默认值为TRUE。在连接字符串或属性中将“转换日期时间设置为Char = FALSE ”以禁用此“功能”。
这是一个快速的VBA测试:
Set cn = CreateObject("ADODB.Connection")
cn.Open "Provider=IBMDA400;Data Source=...;User ID=...;Password=...;Convert Date Time To Char=FALSE"
Set rs = cn.Execute("SELECT DATE(NOW()) FROM SYSIBM.SYSDUMMY1")
MsgBox "Returned ADO type: " & rs.Fields(0).Type
有关可能的ADO数据类型,请参见MSDN:DataTypeEnum。adDBDate是133。
将日期时间转换为字符
指定将IBM i Date,Time和Timestamp数据类型的DB2转换为相应的PC数据类型,反之亦然。
设置和返回值
设置或返回以下字符串值之一。默认值是true”。
“真的”
DB2 for IBM i日期,时间和时间戳记数据类型被视为字符串。读取IBM i数据时,这些值将转换为字符串。在将数据写入系统时,应将字符串作为这些值的输入。Date数据类型支持的字符串格式是ISO格式:yyyy-mm-dd。时间数据类型支持的字符串格式是ISO格式的早期版本:hh.mm.ss。Timestamp数据类型支持的字符串格式为:yyyy-mm-dd-hh.mm.ss.nnnnnn。
“错误的”
DB2 for IBM i日期,时间和时间戳数据类型将转换为PC日期,时间和时间戳数据类型。在仅支持Variant Date数据类型的环境(如Visual Basic)中使用此值时,应格外小心。由于变量日期数据类型的限制而导致的截断或溢出,可能会遇到意外错误。
当“将日期时间转换为字符”为FALSE时,以下是其他注意事项。
评论
该自定义属性在ADO连接对象上可用。当连接关闭时,该属性为读/写;当连接打开时,该属性为只读。
Delphi的例子
<connection>.Provider := 'IBMDA400';
<connection>.Properties('Convert Date Time To Char') := "TRUE";
或者
<connection>.Open('Provider=IBMDA400;Data Source=SystemA;Convert Date Time To Char =TRUE', 'Userid', 'Password');
PowerBuilder示例
<connection>.Provider = "IBMDA400"
SetProperty(<connection>), "Convert Date Time To Char", "TRUE")
或者
<connection>.Open("Provider=IBMDA400;Data Source=SystemA;Convert Date Time To Char=TRUE", "Userid", "Password")
Visual Basic示例
<connection>.Provider = "IBMDA400"
<connection>.Properties("Convert Date Time To Char") = "TRUE"
与/或
<connection>.Open "Provider=IBMDA400;Data Source=SystemA;Convert Date Time To Char=TRUE", "Userid", "Password")
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句