用三层做系统时,将DBF倒入SQL SERVER 7时,当倒入一定的数据后出现错误?(150分)

  • 主题发起人 主题发起人 苯苯
  • 开始时间 开始时间

苯苯

Unregistered / Unconfirmed
GUEST, unregistred user!
用三层做系统时,将DBF倒入SQL SERVER 7时,当倒入一定的数据后出现:
This Application has imporperly defined a parameter object.
就是说,有10000条记录要倒换,每次只倒了一部分如1000条等不等,就出现这个错误。
我用的是ADO+SQL SERVER 7的存储过程来做的。
 
你怎么到的,用程序吗
还是用datapump
 
可能是CLIENTDATASET的设置方面有问题吧,具体的情况,我先试一试再对你说吧。
 
当然是用程序。不是说了使用存储过程来完成的吗
 
我的做法是作BATCHMOVE先把DBF-->SQL,然后用SQL语句
把临时结果转成正式数据库.
 
wumeng,你是怎么实现的?
 
To Wumeng:因为在程序中对数据要先进行判断,符合条件的记录才允许加入到SQL SERVER 中
TO xixi12359:我也用了SQL语句来写,问题依然。用SQL时,我采用了两种方法:一种是在
  客户端直接使用SQL语句:
cds.commandText:='insert into table1(t0,total) values(:t0,:total)';
cds.Params.ParamByname('T0').AsString := table_dbfT0.Asstring;
cds.Params.ParamByname('total').AsFloat := table_dbftotal.asfloat;
  却提示“parameter "t0(total)' not found" 即不允许这样进行。
  二、在应用服务器端的的ADOQuery.SQL ='insert into table1(t0,total) values(:t0,:total)‘;
再在客户端用
cds.Params.ParamByname('T0').AsString := table_dbfT0.Asstring;
cds.Params.ParamByname('total').AsFloat := table_dbftotal.asfloat;
第一次倒数据时就出现相同的错误!
To zengr:你有没有帮我试啊!
 
如果有人回答正确的话,我再加150分!
 
看看不会是没有磁盘空间了吧 :-)
 
空间肯定是有的。
 
跟踪执行,看table_dbfT0.Asstring和你原来设想的值一样么?
 
这个值是对的,他的提示只是说明在CLIENTDATASET中这样写cds.commandText:='insert into table1(t0,total) values(:t0,:total)';
是不对的(好象不能在CommandText中写入:t0,:total这样的参数)
 
zengr兄,问题中
"在应用服务器端的的ADOQuery.SQL ='insert into table1(t0,total) values(:t0,:total)‘;
再在客户端用..."
如果在客户端给的table_dbfT0.Asstring对(并且没忘记close,open),
在应用服务器端应该没问题了。
好像他的table_dbfT0.Asstring是一个字段的值,在三层的客户端不能直接引用
应用服务器上TDataset的字段值啊

 
哦,千兄:table_dbfto是dbf文件的一个字段值。
我就是这样用的:
应用服务器端的的ADOQuery.SQL ='insert into table1(t0,total) values(:t0,:total)‘;
再在客户端用cds.Params.ParamByname('T0').AsString := table_dbfT0.Asstring;
cds.Params.ParamByname('total').AsFloat := table_dbftotal.asfloat;
这就是本问题的所在了。
我在348245中说的情况是,当我在客户端使用CDS.CommandText时出现的情况。
 
在客户端添加clientdataset,把table_dbfT0.Asstring的值通过clientdataset
传递给cds.Params.ParamByname('T0').AsString 试下。
毕业后就没机会接触三层结构了,不一定对
 
你的字段名和变量名是不是改一改好呢?我想最好两个是不一样,这样做会减少出现错误
 
你们说的,都没什么实际意义啊
 
To :苯苯
好象不能在CommandText中写入:t0,:total这样的参数
可以 试试 在AP端 .TLB 开一个函数(无须端口)
利用字符串相连的办法
应用服务器端的的ADOQuery.SQL ='insert into table1(t0,total) values('+param1+
','+param2+')‘;
再在客户端用cds.appserver.function_name(param1,param2);
 
能不能把你的这个存储过程贴上来呢?
如果INSERT语句是放在存储过程中的,你看一下源数据库的字段大小和目的数据库的字段大小
是不是一样(最好目的数据库比源数据库的字段值大)。如果你的INSERT语句是放在程序中的,那么你的写法就有点问题了!
 
后退
顶部