我正在尝试为SDF(空格分隔文件)生成行。我正在使用具有扩展属性DBASEIV的OLEDB适配器从DBASE IV DBF文件创建这些行以获取数据。我的数据列输出在填充后长度为425个字符,我将它放入VB.NET中的datagridview中以显示它。OLEDB Jet 4.0 SQL字符限制
但是,当我运行我的查询,而似乎正确执行结果字段限制为256个字符。我正在阅读的最长单个字段是35个字符,我将返回包含2个字段(条形码和SDF线)的数据集。据我了解,OLEDB Jet 4.0尝试基于前8行来猜测类型,但是因为所有行的数据列长度相同(425个字符),所以我不明白为什么它会选择较小的字段类型。我认为这是因为我的字段是使用字符串连接生成的字段。我在这个问题的底部列入了可怕的SQL。所以我的问题是如何获得完整的425字符输出?或者有没有一种方法可以将我自己的字段的数据类型指定为备忘录?
SELECT scan,
RIGHT('0000000000000' + trim(cstr(scan)), 13) +
LEFT(trim(cstr(name)) + ' ', 35) +
LEFT(trim(cstr(name)) + ' ', 16) +
' ' +
' ' +
' ' +
'1 ' +
'0.00 ' +
'0.00 ' +
'1' +
'0.00 ' +
'0.01 ' +
'0.00 ' +
'F' +
'2' +
'0.00 ' +
'0.00 ' +
' ' +
' ' +
' ' +
'SALS' +
' ' +
' ' +
LEFT(trim(cstr(plof)) + ' ', 13) +
' ' +
' ' +
'0.00 ' +
'0.00 ' +
'0.00 ' +
'F' +
'T' +
'001' +
' ' +
'T' +
'01' +
' ' +
' ' +
' ' +
' ' +
'F' +
'F' +
' ' +
' ' +
'0 ' +
'0.00 ' +
' ' +
'0 ' +
'0.00 ' +
'0.00 ' +
'0.00 ' +
'0.00 ' +
'1 ' +
'1 ' +
'1 ' +
'0.00 ' +
'0.00 ' +
'0.00 ' +
'0.00 ' +
'0.00 ' +
'0.00 ' +
' ' +
' ' +
' '
as STTEMPLINE
from salus where cstr(scan) in (select distinct cstr(scan) from nonscan)
在此先感谢您的帮助。
啊,我还以为我已经覆盖了这一点,我的每一行都是相同的长度。每行只有一列是导入的数据列和默认值的混合,从代码中可以看出,最长的输入列只有35个字符,但所有结果表行都是425个字符,因此读取每行仍然不会有帮助,因为所有行都超出限制,它必须对查询生成的结果列执行不同的操作,而不是直接导入。基本上我试图从一个DBF文件创建一个固定长度的记录文件。 – feldoh 2012-08-20 21:49:09
对不起,我想我很快就读了你的问题,而且还不够彻底。你可能曾经有任何空或只有空白的名称或扫描值?这是我能想到的唯一可能影响这一点的事情。也许一开始就有空行?无论如何,如果是我,我只需选择名称和扫描值,然后在VB或C#代码中执行所有此字符串连接,而不是在select语句中。在OLEDB加载数据之后,而不是在查询期间,这应该相当直接。 – Jim 2012-08-21 16:15:52
hmmm,nope,no whitespace,我们使用0填充SCAN到13位,所以SCAN始终为0000000000000 - 9999999999999.我想在SQL中这样做的原因是我编写了一个工具,它允许我通过以下方式对几乎任何数据文件进行操作:提供连接字符串和查询。我几乎每次获得新客户都需要做这样的事情,但输入文件总是不同的,能够快速创建SQL数据文件比每次编写新程序要好得多到目前为止,我们有超过100个不必要的程序。 – feldoh 2012-08-21 20:11:09