小弟在DELPHI中要做一个把数据从一个表导到另一个表中的操作.使用的是stringlist.
我现在已经把一个表中的数据赋给了stringlist,现在想把数据从stringlist中取出,把相应数据插入到另外一个表相应的字段中,应该怎么写?
其中数据库表中有10多个字段,几万条数据.每个字段之间用","隔开,其中一些字段中还含有空格.
我已经从第一张表中取出的两个数据如下所示:
61100700,2007-6-7 20:00:00,151.5,5600,6,6,2007-6-7 17:10:00,61100700,61100700,,,021
61100800,2007-6-7 20:00:00,151.5,5600,6,6,2007-6-7 19:10:00,61100800,61100800,,,021其中用逗号隔开的是不同字段的内容。在时间和日期字段中有空格。,两个逗号连在一起则表示一个空记录。
现要把这两条数据一条一条插入另一张表里去,应该怎么做?
我现在已经把一个表中的数据赋给了stringlist,现在想把数据从stringlist中取出,把相应数据插入到另外一个表相应的字段中,应该怎么写?
其中数据库表中有10多个字段,几万条数据.每个字段之间用","隔开,其中一些字段中还含有空格.
我已经从第一张表中取出的两个数据如下所示:
61100700,2007-6-7 20:00:00,151.5,5600,6,6,2007-6-7 17:10:00,61100700,61100700,,,021
61100800,2007-6-7 20:00:00,151.5,5600,6,6,2007-6-7 19:10:00,61100800,61100800,,,021其中用逗号隔开的是不同字段的内容。在时间和日期字段中有空格。,两个逗号连在一起则表示一个空记录。
现要把这两条数据一条一条插入另一张表里去,应该怎么做?
解决方案 »
- DELPHI2006编译或运行程序时未响应
- delphi 数据敏感控件的疑问 太敏感了 还是我不会控制
- 完成了一个物业管理软件,想谈谈自己的一点体会。1.对delphi的看法 2.所谓的三层
- 女朋友考试结果出来,该怎么奖励她好呢?或者送她什么东西好呢?请大家帮忙
- 请问什么地方有 Delphi面向对象编程思想 的电子书可下载。
- [Delphi+Word]和大家共享(如何使用)
- 有关ADO控件的问题
- 谁能帮我说说actionlist和actio管理器的用法,以前没有遇到过这样的东西!谢谢!
- gsm610转pcm后有杂音,什么原因?
- 如何解除winpopup对机器的限制?
- Object Pascal的VMT,DMT是怎么回事?
- TMS DBAdvGrid怎么设置多行选择?
begin
SomeStringList.CommaText := DataList[I];
aDataSet.Append;
aDataSet.Fields[0].AsString := SomeStringList[0];
aDataSet.Fields[1].AsString := SomeStringList[1];
.....
aDataSet.Post;
end;
2.分割行字段用SplitColumns
Use IdStrings
SplitColumns
具体看帮助~
建议用SQL语句解决,效率高,速度快~
to zhangpuqing 小弟用过listview来处理,但数据一多,处理非常慢,有时候还会无法响应,听说stringlist速度快,直接一次性放进缓存就可以了。所以想看看,但不懂怎么操作。
to 西门吹牛 请问DATALIST是一个控件吗?不过小弟找了半天没找到,请赐教!
to 笑青天 你所说的SplitColumns小弟没找到帮助,请问你是否能帮助小弟一下,多谢!
Var
I: Ingeger
SomeStringList: TStringList;
Begin
SomeStringList := TStringList.Create;
Try
For I:= 0 to DataList.Count - 1 do
begin
SomeStringList.CommaText := DataList[I];
aDataSet.Append;
aDataSet.Fields[0].AsString := SomeStringList[0];
aDataSet.Fields[1].AsString := SomeStringList[1];
.....
aDataSet.Post;
end;
Finally
SomeStringList.Free;
End;End;
还有就是,我在一张表中取出的纪录是很多条放到Stringlist中去,如我在提问时列出的两行表示两条记录。那么怎么把一条记录插入完毕后,把后面的记录也插入到另一张表中去?
多谢了!
你的方法是把Stringlist中的数据插入到数据表中去吗?小弟用的是ADOQuery,请问是否可以这样用?
还有,小弟的数据量是以万条计,每条数据有10多个字段的内容。请问Datalist.count就是指stringlist中的数据条数吗?
如果结构麻烦你也可以在源数据集下写个循环一次次的insert
这样做有点出不不讨好 如果你坚持的话
大概这样吧procedure test(srcList:TStrings//你的源LIST);
var
i:Integer;
tmpList:TStrings;
begin
tmpList:=TStringList.Create ;
try
tmpList.Delimiter:=',';
for i:=0 to srcList.Count-1 do
begin
tmpList.DelimitedText:=srcList[i];
with Form1.qry1 do
begin
SQL.Text:='insert into tablename(field0,field1,...,field10)values('
+Quotedstr(tmpList[0])+','
+Quotedstr(tmpList[1])+','
// ...
+Quotedstr(tmpList[10])+')';
ExecSQL;
end;
end;
finally
FreeAndNil(tmpList);
end;
end;如楼上所说 如果你的数据中有','那多半是会出问题的了
问题已经解决了。
可以把SQL语句放到Stringlist中去,然后可以做到从一张表中把数据一条条往Stringlist里面放的时候,同时插入另一张表中。于是等那边取完了,这边也已经插完了,等于能一次完成,提高效率。with DM.ADO_zhk do
begin
Close;
SQL.Clear;
SQL.Text:='select * from st_river_f where stcd='''+s+''' and ftm>='''+starttime+''' and ftm<='''+endtime+'''';
Open;
first;
while not Eof do
begin
Stringlist.Add(Format('insert into st_river_f (stcd,ftm,fz,fq,wptn,FLWCHRCD,RLSTM,RLSINSTCD,DPNDST,REFTM,ANTRNF,BSAVP,FCCD,FLAG,rsSource) '+
'values (''%s'',''%s'',''%s'',''%s'',''%s'',''%s'',''%s'',''%s'',''%s'',''%s'',''%s'',''%s'',''%s'',''%s'',''%s'')',[FieldByName('stcd').AsString,
FieldByName('ftm').AsString,FieldByName('fz').AsString,FieldByName('fq').AsString,FieldByName('wptn').AsString,FieldByName('FLWCHRCD').AsString,
FieldByName('RLSTM').AsString,FieldByName('RLSINSTCD').AsString,FieldByName('DPNDST').AsString,FieldByName('REFTM').AsString,
FieldByName('ANTRNF').AsString,FieldByName('BSAVP').AsString,FieldByName('FCCD').AsString,FieldByName('FLAG').AsString,FieldByName('rsSource').AsString]));
Next;
end;
end;
就是以上这个程序段。
放在这里,也看能帮得上以后有相似需要的朋友吧。