Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Date 在SSRS报告中使用AS400日期_Date_Reporting Services_Oledb_Ibm Midrange - Fatal编程技术网

Date 在SSRS报告中使用AS400日期

Date 在SSRS报告中使用AS400日期,date,reporting-services,oledb,ibm-midrange,Date,Reporting Services,Oledb,Ibm Midrange,使用IBMDA400 OleDb提供程序对AS400运行SELECT似乎会将日期作为字符串值返回,当您尝试将日期格式应用于字段时,SSRS只是嘲笑您。我在选择中尝试了一个简单的强制转换,但没有效果 如何从iSeries OleDb提供程序获取实际的DBTYPE_DBDATE结构 我应该提到,所讨论的日期都是由带有日期类型的UDF返回的。IBM似乎将日期类型映射为DBTYPE\u STR OleDb类型。表中的字段可能未定义为日期类型。您需要在查询中使用函数转换它们 您可以使用命令、或查询SYSI

使用IBMDA400 OleDb提供程序对AS400运行SELECT似乎会将日期作为字符串值返回,当您尝试将日期格式应用于字段时,SSRS只是嘲笑您。我在选择中尝试了一个简单的强制转换,但没有效果

如何从iSeries OleDb提供程序获取实际的DBTYPE_DBDATE结构

我应该提到,所讨论的日期都是由带有日期类型的UDF返回的。IBM似乎将日期类型映射为DBTYPE\u STR OleDb类型。

表中的字段可能未定义为日期类型。您需要在查询中使用函数转换它们

您可以使用命令、或查询SYSIBM.SQLCOLUMNS表来查看字段定义


更新 在使用IBMDA400提供程序进行进一步测试后,我发现Convert Date Time To Char属性隐藏在OLE DB Technical Reference(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数据类型,请参阅。地址是133


IBM i Access for Windows OLE DB技术参考 IBM i OLE DB提供程序函数>特殊属性 将日期时间转换为字符

指定将DB2forIBMi日期、时间和时间戳数据类型转换为相应的PC数据类型,反之亦然

设置和返回值

设置或返回以下字符串值之一。默认值为“TRUE”

“正确”

DB2forIBMi日期、时间和时间戳数据类型被视为字符串。读取IBM i数据时,这些值将转换为字符串。将数据写入系统时,字符串应作为这些值的输入。日期数据类型支持的字符串格式为ISO格式:yyyy-mm-dd。时间数据类型支持的字符串格式为ISO格式的早期版本:hh.mm.ss。时间戳数据类型支持的字符串格式为:yyyy-mm-dd-hh.mm.ss.nnnn

“假”

DB2forIBMi日期、时间和时间戳数据类型将转换为PC日期、时间和时间戳数据类型。在仅支持变量日期数据类型(如Visual Basic)的环境中使用此值时应小心。由于变量日期数据类型的限制导致截断或溢出,您可能会遇到意外错误

以下是将日期时间转换为字符为FALSE时的其他注意事项

  • variant Date数据类型实际上是一个时间戳,它不支持微秒(DB2forIBMi时间戳的精度)。OLE DB提供程序将截断分数时间戳而不报告错误。例如,1990-03-02-08.30.00.100517将变为1990-03-02-08.30.00.000000。所有更新或插入的时间戳值都将有0微秒
  • 闰秒溢出错误。OLE DB时间戳最多允许两个闰秒(值为60或61)。DB2forIBMi支持的最大值为59。如果设置了闰秒,则返回溢出错误
  • 变量日期数据类型不支持ISO日期或时间戳的数据限制。在许多数据库(包括DB2forIBMi)中用作默认日期的值“0001-01-01”将导致溢出
  • 对于某些较旧的时间数据类型格式,DB2forIBMi支持24:00:00的时间值。OLE DB提供程序将24:00:00的值转换为00:00:00,而不显示任何错误消息或警告
  • 通常,对于VB变量,日期值1899-12-30(即0日期)用于表示仅限时间的变量日期。午夜时间(00:00:00)用于表示仅限日期的变体日期
备注

此自定义属性在ADO连接对象上可用。该属性在连接关闭时为读/写,在连接打开时为只读

德尔福示例

<connection>.Provider := 'IBMDA400';
<connection>.Properties('Convert Date Time To Char') := "TRUE";
<connection>.Provider = "IBMDA400"
SetProperty(<connection>), "Convert Date Time To Char", "TRUE")
<connection>.Provider = "IBMDA400"
<connection>.Properties("Convert Date Time To Char") = "TRUE"
.Provider:=“IBMDA400”;
.Properties('Convert Date Time To Char'):=“TRUE”;

.Open('Provider=IBMDA400;数据源=SystemA;将日期时间转换为Char=TRUE','Userid','Password');
PowerBuilder示例

<connection>.Provider := 'IBMDA400';
<connection>.Properties('Convert Date Time To Char') := "TRUE";
<connection>.Provider = "IBMDA400"
SetProperty(<connection>), "Convert Date Time To Char", "TRUE")
<connection>.Provider = "IBMDA400"
<connection>.Properties("Convert Date Time To Char") = "TRUE"
.Provider=“IBMDA400”
SetProperty(),“将日期时间转换为字符”,“TRUE”)

.Open(“Provider=IBMDA400;数据源=SystemA;将日期时间转换为Char=TRUE”、“Userid”、“Password”)
Visual Basic示例

<connection>.Provider := 'IBMDA400';
<connection>.Properties('Convert Date Time To Char') := "TRUE";
<connection>.Provider = "IBMDA400"
SetProperty(<connection>), "Convert Date Time To Char", "TRUE")
<connection>.Provider = "IBMDA400"
<connection>.Properties("Convert Date Time To Char") = "TRUE"
.Provider=“IBMDA400”
.Properties(“将日期时间转换为字符”)=“TRUE”
和/或

<connection>.Open "Provider=IBMDA400;Data Source=SystemA;Convert Date Time To Char=TRUE", "Userid", "Password")
.Open“Provider=IBMDA400;数据源=SystemA;将日期时间转换为Char=TRUE”、“Userid”、“Password”)
表中的字段可能未定义为日期类型。您需要在查询中使用函数转换它们

您可以使用命令、或查询SYSIBM.SQLCOLUMNS表来查看字段定义


更新 在使用IBMDA400提供程序进行进一步测试后,我发现Convert Date Time To Char属性隐藏在OLE DB Technical Reference(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数据类型,请参阅。地址是133


IBM i Access for Windows OLE DB技术参考 IBM i OLE DB提供程序函数>特殊属性 将日期时间转换为字符

指定数据库的转换