dbexpress错误,急! 在使用dbexpress的存储过程组件做查询时,第一次能查询出数据来,但第二次却提示:Project Invocesystem.exe raised exception class EDatabaseError with message 'Database Server Error:SQL State:HY000,SQL Error Code:0 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 提示好像是sql出错,是不是你的查询控件在第二次使用的时候没有clear里面的sql语句? 说明什么数据库,存储过程参数列表。DBExpress在执行存储过程的时候是存在一些小问题 环境:Delphi2005 sp3,sqlserver2000数据库,并且打了补丁第二次查询时清空了SQL语句,存储过程参数肯定没问题,因为第一次都能查询 是否是DBExpress组件的错误啊?好像D7下就没有这个错误 可能数据库连接数的问题,先检查sqlserver2000的用户数,或者在第二次查询时重新初始化调用存储过程的控件(close然后重新设置存储过程名),断开服务器重新连接一下也可以解决问题。 请问Sql的用户数在哪设置啊,楼上说的第二次查询重置操作已经设置过了,还是不行 不用用参数的方式调用直接用begin call xx;end;这样的方式试一下 01 procedure TLocalDataModuleForm.InvoceReport(date1, date2, payee,flag: String);02 begin03 ClientDataSet.Active := False;04 with SQLStoredProc do05 begin06 Close;07 StoredProcName := 'invocereport';08 Params.ParamByName('@date1').Value := date1;09 Params.ParamByName('@date2').Value := date2;10 Params.ParamByName('@payee').Value := payee;11 Params.ParamByName('@flag').Value := flag;12 //Prepared := True;13 //Active := True;14 Open;15 end;16 DataSetProvider.DataSet := SQLStoredProc;17 ClientDataSet.Active := True;18 end;以上就是一个数据模块中的代码,在和二次查询时报错,报错信息见最顶楼,但将03,17行去掉却可以查询数据,但客户端DBGrid却无法更新连接模式如下:DBGrid-DataSource-ClientDataSet-DataSetProvider-SQLStoredProc因DBExpress无双向记录机制,故用类三层结构 比如我的存储过程create PROCEDURE abc @vchSourceSafeINI varchar(255) = '', @vchProjectName varchar(255) =''ASselect * from feeGO----那么我调用的时候直接用SQLDataSet 设置CommondText为:exec abc '1','3'通过 ClientDataSet查询数据集返回正常。 好办法,值得一试,不过DBExpress组件好像就是有最顶楼所述的问题,不知有没有高手遇到过呀! 奇怪用SQLDataSet试过了,一切正常,为什么SQLStoredProc就不对呢,有BUG啊? SQLStoredProc.close;SQLStoredProc.Params.Clear;SQLStoredProc.StoredProcName:='';SQLStoredProc.SchemaName:='dbo';SQLStoredProc.StoredProcName := 'invocereport';这样看看 将 03 ClientDataSet.Active := False;改成if ClientDataSet.Active =True then ClientDataSet.Active:=False;试一下 access时间查询 GPRS服务端关于GPRS连接的问题 100分!Oracle开发方面的诸多问题(连接、安装等)!希望不吝赐教! 请教有关内存操作的问题,谢谢帮助! 为什么我用程序发的邮件被当做垃圾邮件啊? 怪事! 如何读UDL文件的内容! 关于Delphi中调用dll中frame delphi中如何把SQL2000数据库附加到MSDE的一个实例中 请各位解释一下Tstream write,read/writebuffer,readbuffer的具体用法和意义,举例 listview中如何分页显示数据??? 命名空间是怎样制作的?
是不是你的查询控件在第二次使用的时候没有clear里面的sql语句?
DBExpress在执行存储过程的时候是存在一些小问题
第二次查询时清空了SQL语句,存储过程参数肯定没问题,因为第一次都能查询
直接用
begin
call xx;
end;
这样的方式试一下
02 begin
03 ClientDataSet.Active := False;
04 with SQLStoredProc do
05 begin
06 Close;
07 StoredProcName := 'invocereport';
08 Params.ParamByName('@date1').Value := date1;
09 Params.ParamByName('@date2').Value := date2;
10 Params.ParamByName('@payee').Value := payee;
11 Params.ParamByName('@flag').Value := flag;
12 //Prepared := True;
13 //Active := True;
14 Open;
15 end;
16 DataSetProvider.DataSet := SQLStoredProc;
17 ClientDataSet.Active := True;
18 end;
以上就是一个数据模块中的代码,在和二次查询时报错,报错信息见最顶楼,但将03,17行去掉却可以查询数据,但客户端DBGrid却无法更新
连接模式如下:
DBGrid-DataSource-ClientDataSet-DataSetProvider-SQLStoredProc
因DBExpress无双向记录机制,故用类三层结构
create PROCEDURE abc
@vchSourceSafeINI varchar(255) = '',
@vchProjectName varchar(255) =''
AS
select * from fee
GO----
那么我调用的时候直接用SQLDataSet 设置CommondText为:
exec abc '1','3'
通过 ClientDataSet查询数据集返回正常。
SQLStoredProc.Params.Clear;
SQLStoredProc.StoredProcName:='';
SQLStoredProc.SchemaName:='dbo';
SQLStoredProc.StoredProcName := 'invocereport';
这样看看
改成
if ClientDataSet.Active =True then
ClientDataSet.Active:=False;
试一下