用户一次输入的数据量一般情况下较小(不会超过几百条记 录),所以临时表可以建立在内存中,这样处理速度较快。临时表创建 有如下两种方法:
1.使用查询控件创建临时表 第 1 步:在窗体上放入
查询控件(TQuery),并设置好所连接的数 据表。 第 2 步:添加如下语句:
TQuery. CachedUpdates=True; TQuery. RequestLive=True。 第 3 步:在原有的 SQL 语句后加入一条 Where 子语句,要求加入 这条 Where 子语句后 SQL 查询结果为空。 例如:
SELECT Biolife."Species No", Category, Common_Name, Biolif e."Species Name", Biolife."Length (cm)", Length_In, Notes, Graph ic 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 适用范围广、速度快, 但需要编写代码。 在 InterBase 数据库中使用函数 程序员可能在用 InterBase 作为后台数据库时, 常会为其提供的函
数过少而感到使用不便(只有四个),无法方便地编写出复杂的存储过 程。InterBase 本身无法编写函数,但它可以使用外部函数(调用 DLL 中的函数)。下例中说明如何在 InterBase 中声明 SUBSTR 函数。
DECLARE EXTERNAL FUNCTION SUBSTR CSTRING(80), SMALLINT, SMALLINT RETURNS CSTRING(80) ENTRY_POINT "IB_UDF_substr" MODULE_NAME "ib_udf" 其中:MODULE_NAME 为 DLL 的名称,ENTRY_POINT 为函数名。
声明后便可以使用,例如:
select SUBSTR(country)
from country