O
onedot
Unregistered / Unconfirmed
GUEST, unregistred user!
在DELPHI中大家一般都习惯使用TQuery组件的SQL.open()或者SQL.execsql()来执行SQL语句。
但是这种方法有以下不便:
1、首先得必须有TQuery组件,无论是窗体中加或者是数据模块里作个公用的(这种每次使用后必须释放)
2、执行时必须先清空SQL,然后重新赋SQL,太过于麻烦。更关键是对SQL语句执行情况的处理需要使用TRY{}。。。,而且如果使用open()方法还要防止没有返回记录。
而在DELPHI中还有一种方法可以直接控制SQL,就是对TDatabase对象执行EXECUTE()
它的优点是:思路清晰(就是对Tdatabase所指向的数据库操作);操作简洁(执行前后不需要做额外的处理);控制方便(根据操作成功的返回值方便处理)
但现在我遇到问题如下:
如果我使用静态SQL语句,执行没有问题
但是我希望使用动态SQL语句,进行参数传递时,总有“Can't find the object!”错误!,而且不是编译错误,是执行时的错误。不知道是什么原因,哪位大侠请指点!
BOW
//静态代码如下:
Sqlstr:='select * from employee where em_id=''hchen'';
database1.Connected :=true;
err_flg:=database1.execute(Sqlstr,nil,false,nil);
if err_flg=0 then
application.MessageBox ('数据库操作成功!','提示',0)
//动态代码如下:
stmtParams := TParams.Create;{其中stmtParams在窗体里已经定义为Tparams类型变量}
stmtParams.CreateParam(ftString, 'add_id', ptInput);
stmtParams[0].asstring:='hchen';
Sqlstr:='select * from employee where em_id=:add_id';
database1.Connected :=true;
err_flg:=database1.execute(Sqlstr,stmtParams,false,nil);
if err_flg=0 then
application.MessageBox ('数据库操作成功!','提示',0)
但是这种方法有以下不便:
1、首先得必须有TQuery组件,无论是窗体中加或者是数据模块里作个公用的(这种每次使用后必须释放)
2、执行时必须先清空SQL,然后重新赋SQL,太过于麻烦。更关键是对SQL语句执行情况的处理需要使用TRY{}。。。,而且如果使用open()方法还要防止没有返回记录。
而在DELPHI中还有一种方法可以直接控制SQL,就是对TDatabase对象执行EXECUTE()
它的优点是:思路清晰(就是对Tdatabase所指向的数据库操作);操作简洁(执行前后不需要做额外的处理);控制方便(根据操作成功的返回值方便处理)
但现在我遇到问题如下:
如果我使用静态SQL语句,执行没有问题
但是我希望使用动态SQL语句,进行参数传递时,总有“Can't find the object!”错误!,而且不是编译错误,是执行时的错误。不知道是什么原因,哪位大侠请指点!
BOW
//静态代码如下:
Sqlstr:='select * from employee where em_id=''hchen'';
database1.Connected :=true;
err_flg:=database1.execute(Sqlstr,nil,false,nil);
if err_flg=0 then
application.MessageBox ('数据库操作成功!','提示',0)
//动态代码如下:
stmtParams := TParams.Create;{其中stmtParams在窗体里已经定义为Tparams类型变量}
stmtParams.CreateParam(ftString, 'add_id', ptInput);
stmtParams[0].asstring:='hchen';
Sqlstr:='select * from employee where em_id=:add_id';
database1.Connected :=true;
err_flg:=database1.execute(Sqlstr,stmtParams,false,nil);
if err_flg=0 then
application.MessageBox ('数据库操作成功!','提示',0)