我们使用VBA使用Microsoft.ACE.OLEDB.12.0提供程序从Oracle数据库中检索数据。
我们长时间使用这种方法没有问题,但我们遇到了来自特定表的特定数据查询的问题。
在VBA下运行时,我们得到“运行时错误'1004':应用程序定义或对象定义的错误。但是进一步调查,我们发现以下内容:
我们运行的查询是动态生成的,我们处理它们的方法是将结果读入变量数组,然后将该数组输出到Excel中。当我们逐步执行特定查询时,我们发现一个特定的数据库字段是“空白”:本地窗口显示的值是完全空白的:它不是空字符串,它不是null,它不是零。 VarType()将它显示为十进制数据类型,但它是空的。
我似乎无法阻止锁定此错误:
On Error Resume Next
......仍然休息。
if (isEmpty(theValue)) then
...没有抓住它,因为它不是空的
if (theValue is nothing) then
...没有抓住它,因为它不是一个对象
等
我们在.NET应用程序中使用了SQL,并得到了更多信息:
十进制的比例值必须介于0和28之间(包括0和28)。参数名称:Scale
所以:我认为这是两个问题: 1.)在VBA中,如何捕获变量数据类型值-the-is-not-empty-or-null,以及; 2.)如何解决Oracle Decimal问题?
对于#2,我从Oracle decimal data type看到,它可以支持多达31个位置的精度,我认为我使用的提供程序只能支持28.我想我需要将它转换为查询中的较小类型。
还有其他想法吗?