插入临时表: with dm1.ADOQ1 do begin close; sql.Clear; sql.Add('insert into 临时表(字段1,字段2) values(值1,值2)'); execsql; end; 所有的插入、修改、删除都用这个格式,只是把sql 换一下就行了查询临时表: with ADOQ1 do begin close; sql.Clear; sql.Add('select * from 临时表'); open; end;所有的查询都用这种格式。 用 ADOQ1.FieldByName('字段1'); 获得查询出来的该字段的值
创建临时表,用的时候在调用,代码如下: //创建临时表 procedure CreateTemporaryTable; 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;//创建临时表函数 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;//***********************************************************/
已经有点眉目了。等代码完成了就贴上来共享或者留下E-mail我发你。顺便问下。好比 select * from tablenumber可以写成存储过程么?实质就是表名可以用参数传递么? create procedure selecttable as @tablename select * from @tablename
begin
adoquery1.updatebatch();
end;
with dm1.ADOQ1 do begin
close;
sql.Clear;
sql.Add('insert into 临时表(字段1,字段2) values(值1,值2)');
execsql;
end; 所有的插入、修改、删除都用这个格式,只是把sql 换一下就行了查询临时表:
with ADOQ1 do begin
close;
sql.Clear;
sql.Add('select * from 临时表');
open;
end;所有的查询都用这种格式。
用
ADOQ1.FieldByName('字段1');
获得查询出来的该字段的值
//创建临时表
procedure CreateTemporaryTable;
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;//创建临时表函数
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;//***********************************************************/
[InforID] [int] IDENTITY (1, 1) NOT NULL ,
[MobileType] [varchar] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[SN] [varchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[MalCode] [varchar] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[whereIs] [varchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[Analyst] [varchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[State] [varchar] (15) COLLATE Chinese_PRC_CI_AS NULL ,
[InforDT] [datetime] NULL ,
[Number] [varchar] (10) COLLATE Chinese_PRC_CI_AS NULL ===================================================================
我想用户输入数据。一次可能是20条一批输入。在这批提交前能在一个DBGRID看到。如果有错误能修改。最后再全部提交到真正的MaintainInfor表中。请问是用临时表好么???
select * from tablenumber可以写成存储过程么?实质就是表名可以用参数传递么?
create procedure selecttable
as @tablename
select * from @tablename