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;试一下 不知那個報表能夠響應雙擊事件,並能獨得雙擊位置的數據。 爱国爱自己的同志请进!不进后悔!!! 如何判断在文本框输入的数据类型???如:汉字,数字,英文等等 请教:向表添加记录时 用DB时间控件选择时间 确被取消掉了新记录 记录指针指向最后一条记录 求解,如何使DBGrid表格显示的数据行是反向排序(和sql表中的数据行相反)???? 关于串口通信的问题? 如何判断地址冲突的问题 一个简单的小问题! 关于版本号的问题。 用哪个函数查找某个字段的值? 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;
试一下