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;

 

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页