Delphi ADOQuery 的一些操作

Prepared用来确定ADOquery是否要准备好了再查询,如设为true,则系统会先编译后再运行,在多次重复使用某一查询的情况下能有效提升运行速度,但对于只执行一次的查询反面会导致速度下降(编译会消耗时间):
adoquery.sql.text:='select * from table1'
adoquery.prepared:=true;
while condition do 
adoquery.open;
end;

ADOQuery.Prepared属性的True/False与ADOQuery.Prepare; ADOQuery.UnPrepare;方法相对应,
就象ADOQuery.Open;ADOQuery.Close;与ADOQuery.Active的(Ture/False)相对应一样
至于Prepare的功能,是为查询做准备内存区和优化语句;UnPrepare当然是撤消查询所占系统资源了。

 

//目前查到Insert的这种用法~
ADOQuery.SQL.Text:= 'select * from table1';
ADOQuery.Open;
ADOQuery.Insert;
ADOQuery.Edit ;
ADOQuery.FieldByName('field1').AsString:='field1' ;
ADOQuery.Post;
ADOQuery.Close;

ADOQuery.Close;
ADOQuery.SQL.Text:= 'select * from Table';
ADOQuery.Open;
ADOQuery.Append; //添加
ADOQuery.FieldByName('name').Value:= 'test1';
(ADOQuery.FieldByName('logo') as TBlobField).LoadFromFile(Path+'logo.bmp');
//BLOB字段的一种添加方式
ADOQuery.Post;   //提交
ADOQuery.Close;
定义:
TUser = packed record
   Name : string[50];
   CanAsk : boolean;
   NumberOfQuestions : integer;
end;
 
存储:
var
   User : TUser;
   blobF : TBlobField;
   bs : TStream;
begin
   User.Name := edName.Text;
   User.NumberOfQuestions := StrToInt(edNOQ.Text) ;
   User.CanAsk := chkCanAsk.Checked;

   myTable.Insert;
   
   blobF := myTable.FieldByName('data') as TBlobField;
   bs := myTable.CreateBlobStream(blobF, bmWrite) ;
   try
     bs.Write(User,SizeOf(User)) ;
   finally
     bs.Free;
   end;
end;
 
读取:
var
   User : TUser;
   blobF : TBlobField;
   bs : TStream;
begin
   if myTable.FieldByName('data').IsBlob then
   begin
     blobF := DataSet.FieldByName('data') as TBlobField;
     bs := myTable.CreateBlobStream(blobF, bmRead) ;
     try
       bs.Read(user,sizeof(TUser)) ;
     finally
       bs.Free;
     end;
   end;

   edName.Text := User.Name;
   edNOQ.Text := IntToStr(User.NumberOfQuestions) ;
   chkCanAsk.Checked := User.CanAsk;
end;
//通过sql的存储过程来实现:
//添加
With ADOQuery1 do
begin
  Close;
  SQL.Clear;
  SQL.Add(' Insert Into Table1(Field1,Field2)')
  SQL.Add(' Values(1,2)');
  ExecSQL;
end;


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


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


//查询
With ADOQuery1 do
begin
  Close;
  SQL.Clear;
  SQL.Add(' Select Field1,Field2 From Table1')
  SQL.Add(' Where Field1=11 and Field2=22');
  Open;

  Close;//用完就释放
end;

//***************************************************
//通过Delphi自有的方法属性实现:
//添加:
with ADOQuery1 do
begin
  Close;
  SQL.Clear;
  SQL.Add(' Select * From Table1');
  open;
  append;
  ADotable1.FieldByName('Field1').Value:= '111';
  post;
  Close;//用完就释放
end;

//删除:
with ADOQuery1 do
begin
  Close;
  SQL.Clear;
  SQL.Add(' Select * From Table1')
  SQL.Add(' Where Field1=11 and Field2=22');
  open;
  delete(选择删除的记录); //默认删除记录指针指向的记录
  Close;//用完就释放
end;

//修改:
with ADOQuery1 do
begin
  Close;//保险,防止非Close状态~~
  SQL.Clear;
  SQL.Add(' Select * From Table1');
  open;
  edit;
  ADotable1.FieldByName('Field1').Value:= '111';
  post;
  Close;//用完就释放
end;

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值