我要把以前的DBF导入SQL内,导入、导出也都可以了,最后发现DBF里有个字段里在开头和其它位置内包含了CHR(0)的字符,造成那个字段的内容无法导入,全是空!我用了Replace字符T换,不行
用了POS查找字段内CHR(0)再读取,不行,根本返回的为0
用SQL自定义函数来判断再改写,也不行,当把字段发送到函数中时,内容已经是空的了
最后用TTable控件一个个字段调用附值,到那个字段时再做判断更改,还是不行,好像一被DELPHI调用时就已经是空值了。SQL的函数是这样判断的
 create function TCHR(@hexstr varchar(8))
 returns  varchar(8)
 begin
   declare @a int,@c  varchar(8)
   set @a=1
   set @c=''
  while  @a<=len(@hexstr)
  begin
     if substring(@hexstr,@a,1)=char(0)
        set @c=@c+'M'
    else   set @c=@c+substring(@hexstr,@a,1)
    set @a=@a+1
  end
  return @c   
 end而用TTABLE控件,我用ShowMessage
     ShowMessage(copy(Table1.FieldValues['字段'],pos(chr(0),Table1.FieldValues['字段'])+1,100));
这个POS找到的是0
   ShowMessage(length(Table1.FieldValues['字段']));
这个显示的是0
          Table1.FieldByName('字段').AsString;
          Table1.FieldByName('字段').AsWideString;
用这两个也是空和0值请高手帮忙下,谢谢了,现在我是没什么办法了.我认为,好像读出来之前已经没CHR(0)裁断了

解决方案 »

  1.   

    没有导过DBF文件。
    你可以在SQL SERVER中用导入导出向导看看行不行?如果导入导出向导都不行,可以确认通过程序来导是没有办法了。如果行,那么先将其手工导入为SQL SERVER的临时表,然后再用程序导。如果不行,就想办法在foxbase/foxpro/dbase等软件中看看有没有办法对这个字段进行处理。如果还是不行,你就自己想办法分析DBF的文件结构吧……Good Luck.
      

  2.   

    我以前也是搞VFP的,后来转向DELPHI,那阵子也碰到过你的类似问题。后来也没搞定,就用的程序直接搞的( while not eof)。汗....是有点麻烦,如果表结构很复杂的话。如果手上有VFP工具,看是不是把有问题的那个字段改改再导。祝你好运。
      

  3.   

    估计是没有人有办法了,只能再要导入的DBF文件,先用VFP把CHR(0)替换换再导入了,麻烦啊,DBF导入可不是只导一次就能完事的,这样每次在导入是还得教他们用VFP转换后再导入