delphi adoquery操作(转)

procedure TForm1.btn1Click(Sender: TObject);
begin
  With ADOQuery1 Do Begin
    Close;
    SQL.Clear ;
    SQL.Add(' EXECUTE Test :aa, :bb, :cc Output, :dd Output ') ;
    Parameters.Items[0].Value := 'Test aa';
    Parameters.Items[1].Value := 1234;
    Prepared;
    ExecSQL;
    Edit1.Text := Parameters.Items[2].Value + ' : ' + IntToStr(Parameters.Items[3].Value);
    Close;
  end;
end;

Delphi在数据库操作是非常好用的,delphi把ADO一些方法属性都集成了,以下是我的一些总结:

通过sql的存储过程来实现:添加
With ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add(' Insert Into Table1(Field1,Field2)')
SQL.Add(' Values(10,20)');
ExecSQL;
end;

修改
With ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add(' Update Table1 Set Field1=20,Field2=30)')
ExecSQL;
end;

删除
With ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add(' Delete From Table1')
SQL.Add(' Where Field1=20 and Field2=30');
ExecSQL;
end;

查询
With ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add(' Select Field1,Field2 From Table1')
SQL.Add(' Where Field1=20 and Field2=30');
Open;
end;***************************************************通过Delphi自有的方法属性实现:
添加:
with ADOQuery1 do
append;
......
post;
删除:
with ADOQuery1 do
delete(选择删除的记录); //默认删除记录指针指向的记录
修改:
with ADOQuery1 do
edit;
......
post;


adotable1.Append; //添加
ADotable1.Fields.FieldByName('gxid1').Value:=gx;
adotable1.Post;

adotable1.delete; //删除

adotable1.edit; //修改
ADotable1.Fields.FieldByName('gxid1').Value:=gx;
adotable1.post;
WITHI adoquery do
begin//添加
adoquery.open;//motice set adoquery.sql
adoquery.append;//OR adoquery.insert;
fieldbyname(fieldname).asstring:=trim(edit1.text);
......
adoquery.post;
end;
删除:
adoquery.delete
修改:
adoquery.edit;
fieldbyname(fieldname).asstring:=trim(edit1.text);
有关细节可以参看帮助OR DEMOADOQuery 的几个事件:

procedure ADOQuery1_BeforePost ( DataSet : TDataSet);

begin

end;

是在ADOQuery1或者相关联的DataSource的数据集改动后,在将改动保存到内存之前激发的事件,上次使用这个事件是用来判断修改之后的数据是否规范,如果不规范,就给出提示

示例如下: 要修改的列关联的Column 是Score

procedure ADOQuery1_BeforePost ( DataSet : TDataSet);】

var

score:string;

begin

score:=DataSet.FieldByName(‘score’).AsString; // 提取修改之后的数据

if (‘score不符合规则’) then

self.msgWarning(‘’输入的数据有错);

end;


procedure ADOQuery1_AfterScroll (DataSet: TDataSet);

begin

end;

是在点击与ADOQuery1相关联的DBGridEh1中的记录后激发的事件,可以用来做两个DBGridEh控件的关联事件。

如:点击DBGridEh1 中的记录1,在DBGridEh2中就显示记录1的详细信息(DBGridEh2与ADOQuery2相关联),(示例如下:

procedure ADOQuery1_AfterScroll (DataSet: TDataSet);

var

sql : string;

begin

sql:=’select * from tableneme where key=’”+ADOQuery1.fieldbyname(‘key’).AsString+”’’

ADOQuery2.SQL.Close;

ADOQuery2.SQL.Clear;

ADOQuery2.SQL.Add(sql);

ADOQuery2.SQL.Open;

end;
 

/
3)、编写命令Button1的OnClick事件处理程序:

procedure TForm1.Button1Click(Sender: TObject);

begin

  With ADOQuery1 do

  begin

    SQL.Clear;

    SQL.Add('select * from Employee where 县市=:XianShi');

    Parameters[0].Value:=edit1.Text;

    Open;

  end;
其中的“XianShi”就是一个参数,名称由用户自定,但参数之前必须加上冒号,而且必须紧跟在参数之前,中间不能有空格!

SQL语句中引入参数之后,在执行SQL语句之前就必须给参数赋值。如何赋值呢?这就要用到ADOQuery组件的Parameters属性。该属性是一个下标从0开始的数组:

 

Parameters[0]、Parameters[1]、Parameters[2]、…、

 

其中的每个数组元素与ADOQuery组件的SQL语句中的参数相对应,例如要给SQL语句中的第一个参数赋值,可以执行如下语句:

 
1.2.2          SQL命令中带有多个参数的情形
 

SQL命令中可以带有多个参数,例如:某个Query组件,为它编写如下的动态SQL语句:

 

Insert Into Customer(CustNo,Name,Country)  Values(:CustNo ,:Name ,:Country)

 

对于上述这条动态SQL语句中的三个参数,可以利用Query的Params属性为参数赋值:

Query.Params[0].AsString:=”1998” ;

Query.Params[1].AsString:=”AAA”  ;

Query.Params[2].AsString:=”China”;

 

上述语句将把“1998”赋给参数CustNo,“AAA”赋给参数Name,“China”赋给参数Country。
1.2.3          调用ADOQuery的ExecSQL方法
 

有些SQL命令执行后并不象Select命令那样返回一个结果集,如:INSERT、 UPDATE、DELETE、CREATE TABLE等。执行这些SQL时就不能用Open方法,而必须使用ExecSQL方法;反之,对于Select命令,则必须使用Open方法,否则得不到查询结果。

posted @ 2011-05-24 09:46  高文  阅读(2685)  评论(0编辑  收藏  举报