本人如下程序段,想通过从文框中取得输入的编码,确认后,进入代码表中查询是否有此编码,有则修改此条记录,无则添加此条记录。程序片断如下:
if (edit1.Text ='') or (edit2.Text='') then
begin
messagedlg('类别编码及名称不能为空',mtconfirmation,[mbOK],0);
edit1.SetFocus;
end;
dm_name:=edit1.Text;
with Data_use do //数据模块
ADOQuery_lb1.Close;
ADOQuery_lb1.sql.clear;
//ADOQuery_lb1。sql.add(.....
望同仁赐教,谢谢!
其中有网友认为利用数据库存储过程进行编程,但我不知如何操作?能否告之具体点,
详细点最点,定当以100分相送..
if (edit1.Text ='') or (edit2.Text='') then
begin
messagedlg('类别编码及名称不能为空',mtconfirmation,[mbOK],0);
edit1.SetFocus;
end;
dm_name:=edit1.Text;
with Data_use do //数据模块
ADOQuery_lb1.Close;
ADOQuery_lb1.sql.clear;
//ADOQuery_lb1。sql.add(.....
望同仁赐教,谢谢!
其中有网友认为利用数据库存储过程进行编程,但我不知如何操作?能否告之具体点,
详细点最点,定当以100分相送..
象你这里所说的。只须在后台建一存储过程,而在前台给存储过程输入变量赋值即Ok了。
create procedure 存储名
(
输入变量
输出变量
)在前台编程中
存储名.fields[0].asstring:=edit1.text;
依次类推赋值
存储名.execproc;
再判断是否执行成功。
Create PROCEDURE Bes_GerAuth
@Pass varchar(50),
@Name varchar(50)
@Auth int output
AS
if Exits(select * from Pass_Table where Name=@Name and Password=@Pass)
set @Auth=1
else
Set @Auth=02、在前選用TStoredProc控件,設置DataBaseName與StoredProcName屬性與Params中的變量Value-->Type屬性3、前台調用:
var E_Succ :integer; with StoredProc1 do
begin
if active then close;
Parambyname('@Pass).asboolean:=Edit2.Text;
Parambyname('@Name).asstring:=Edit1.Text;
Prepare;
ExecProc;
E_Succ := Params[3].AsInteger;
end;
if E_Succ=0 then
begin
Application.MessageBox('你沒有權限!','',0);
Abort;
end
方法太多了,下面介绍一点我用得最多的方式:
使用ADO的TADOQUERY组件Aq1.
如果这个存储过程有返回值:
A1.close;
a1.sql.text:='Exec your_proc_Name :C1,:c2';
A1.parameters[0].value:=...
A1.Parameters[1].value:=...
try
A1.open;
A1.frist;
While not eof do
begin
.
.
end;
except
...
end;
没有返回值的存储过程:
A1.close;
a1.sql.text:='Exec your_proc_Name :C1,:c2';
A1.parameters[0].value:=...
A1.Parameters[1].value:=...
try
A1.ExecSql;
except
...
end;另外还可使用TStoreProc\TQuery\TAdoStoreProc\TADoCommand.....
storedproc1.parambyname('@id'):=edit1.text;
storedproc1.parambyname('@name'):=edit2.text;
storedproc1.execute;
storedproc1.execute一定要写两行