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;