临时表创建
【打印文章】
数据输入是开发数据库程序的必然环节。在Client/Server结构中,客户端可能要输入一批数据后,再向服务器的后台数据库提交,这就需要在本地(客户端)建立临时数据表来存储用户输入的数据,待提交后,清除本地数据表。这种方法的好处是:提高输入效率,减小网络负担。
由于用户一次输入的数据量一般情况下较小(不会超过几百条记录),所以临时表可以建立在内存中,这样处理速度较快。临时表创建有如下两种方法:
1.使用查询控件创建临时表
第1步:在窗体上放入查询控件(TQuery),并设置好所连接的数据表。
第2步:添加如下语句:
TQuery. CachedUpdates=True;
TQuery. RequestLive=True。
第3步:在原有的SQL语句后加入一条Where子语句,要求加入这条Where子语句后SQL查询结果为空。
例如:
SELECT Biolife."Species No", Category, Common_Name, Biolife."Species Name", Biolife."Length (cm)", Length_In, Notes, Graphic
FROM "biolife.db" Biolife
where Biolife.Category=′A′ and Biolife.Category=′B′
这样临时表就建立好了。
2.使用代码创建临时表
函数代码如下:
function CreateTableInMemory(const AFieldDefs:TFieldDefs):
TDataSet;
var TempTable:TClientDataSet;
begin
TempTable:=nil;
Result:=nil;
if AFieldDefs〈〉nil then
begin
try
TempTable:=TClientDataSet.Create(Application);
TempTable.FieldDefs.Assign(AFieldDefs);
TempTable.CreateDataSet;
Result:=(TempTable as TDataSet);
Except
if TempTable〈〉nil then TempTable.Free;
Result:=nil;
raise;
end
end
end;
在程序中按如下方法调用:
procedure TForm1.Button1Click(Sender: TObject);
var ADataSet:TDataSet;
begin
ADataSet:=TDataSet.Create(Self);
with ADataSet.FieldDefs do
begin
Add(′Name′,ftString,30,False);
Add(′Value′,ftInteger,0,False);
end;
with DataSource1 do
begin
DataSet:=CreateTableInMemory(ADataSet.FieldDefs);
DataSet.Open;
end;
ADataSet.Free;
end;
这样,临时表就创建完成。
方法1使用简单,但由于利用了查询控件,清空数据时需要查询服务器后台数据库,所以速度稍慢,而且不适用于临时表中各个字段由几个数据表的字段拼凑而成的情况。方法2适用范围广、速度快,但需要编写代码。
由于用户一次输入的数据量一般情况下较小(不会超过几百条记录),所以临时表可以建立在内存中,这样处理速度较快。临时表创建有如下两种方法:
1.使用查询控件创建临时表
第1步:在窗体上放入查询控件(TQuery),并设置好所连接的数据表。
第2步:添加如下语句:
TQuery. CachedUpdates=True;
TQuery. RequestLive=True。
第3步:在原有的SQL语句后加入一条Where子语句,要求加入这条Where子语句后SQL查询结果为空。
例如:
SELECT Biolife."Species No", Category, Common_Name, Biolife."Species Name", Biolife."Length (cm)", Length_In, Notes, Graphic
FROM "biolife.db" Biolife
where Biolife.Category=′A′ and Biolife.Category=′B′
这样临时表就建立好了。
2.使用代码创建临时表
函数代码如下:
function CreateTableInMemory(const AFieldDefs:TFieldDefs):
TDataSet;
var TempTable:TClientDataSet;
begin
TempTable:=nil;
Result:=nil;
if AFieldDefs〈〉nil then
begin
try
TempTable:=TClientDataSet.Create(Application);
TempTable.FieldDefs.Assign(AFieldDefs);
TempTable.CreateDataSet;
Result:=(TempTable as TDataSet);
Except
if TempTable〈〉nil then TempTable.Free;
Result:=nil;
raise;
end
end
end;
在程序中按如下方法调用:
procedure TForm1.Button1Click(Sender: TObject);
var ADataSet:TDataSet;
begin
ADataSet:=TDataSet.Create(Self);
with ADataSet.FieldDefs do
begin
Add(′Name′,ftString,30,False);
Add(′Value′,ftInteger,0,False);
end;
with DataSource1 do
begin
DataSet:=CreateTableInMemory(ADataSet.FieldDefs);
DataSet.Open;
end;
ADataSet.Free;
end;
这样,临时表就创建完成。
方法1使用简单,但由于利用了查询控件,清空数据时需要查询服务器后台数据库,所以速度稍慢,而且不适用于临时表中各个字段由几个数据表的字段拼凑而成的情况。方法2适用范围广、速度快,但需要编写代码。
本栏文章均来自于互联网,版权归原作者和各发布网站所有,本站收集这些文章仅供学习参考之用。任何人都不能将这些文章用于商业或者其他目的。( Pfan.cn )
【编程爱好者论坛】