//我不会数据库,先给你一个资料
//有一些全角字符自己处理一下
//建立临时表?我喜欢叫内存表!
数据输入是开发数据库程序的必然环节。在CLIENT/SERVER结构中,客户端可能要输
入一批数据后,再向服务器的后台数据库提交,这就需要在本地(客户端)建立临时数据
表来存储用户输入的数据,待提交后,清除本地表数据。这种方法的好处是:提高输入效
率,减小网络负担。
由于用户一次输入的数据量一般情况下较小(不会超过几百条记录),所以临时表可
以建立在内存中,这样处理速度较快。
方法1:使用查询控件(TQUERY)
第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适
用范围广、速度快,但需要编写代码。(代码中TFIELDDEFS的使用方法十分简单,
见DELPHI的联机帮助)。