问题描述:1. 用ADODataSet1.SaveToFile('..\DownDataxml\SQ_JT_JiBen.xml', pfXML)将表的记录导出到XML文件,
2. 用最简洁的方式(代码)再把这些XML数据导入(保存)到其他结构完全相同的SQL数据表中。问题:
上面第1步,很容易实现。而第2步实现实在很难。
在C#中,这是很容易的事情。在delphi6有没有快捷简洁的办法? 谢谢!
2. 用最简洁的方式(代码)再把这些XML数据导入(保存)到其他结构完全相同的SQL数据表中。问题:
上面第1步,很容易实现。而第2步实现实在很难。
在C#中,这是很容易的事情。在delphi6有没有快捷简洁的办法? 谢谢!
解决方案 »
- 高分请教一个有关textarea的简单问题,弄了一天一夜搞不定!
- 100求一個像Windows桌面上的工具欄一樣的Toobar或者像窗口按鈕一樣的Button。2天沒人回答就當散分貼!!
- 关于已有值的字段赋为空的问题
- 为什么Delphi7的MessageDLG()的按钮是英文文字?
- 如何在DBGrid中加入底图。
- opendialog控件有问题?
- 文字问题!!如何使"pppp1111"变为"1111qqqq"
- 请教一个SQL语句,如何得到每个职工的每个月实发工资的统计。
- 使用父窗口时碰到的问题
- 如何新建一个文本文件把一个字符串存到里面?
- 如何 加密自已的配置文件
- D7 通过 XML DATA Binding 生成接口和类的问题
var ADOCommand1: TADOCommand;
MySqlStr:string;
MySqlValue:string;
i:integer;
begin
ADOCommand1 := TADOCommand.Create(Application);
ADOCommand1.Connection:=ADOConn; //字段列表
MySqlStr:='insert ' + TabName + '(';
for i:=0 to ADOQry.FieldCount-1 do
begin
MySqlStr:=MySqlStr+ADOQry.FieldDefList[i].Name;
if i<ADOQry.FieldCount-1 then MySqlStr:=MySqlStr + ',' else MySqlStr:=MySqlStr + ')';
end; ADOQry.First;
while not ADOQry.Eof do
begin //值列表
MySqlValue:=' values(';
for i:=0 to ADOQry.FieldCount-1 do
begin
if ADOQry.FieldList[i].DataType=ftString then
begin
MySqlValue:=MySqlValue+ '''' + ADOQry.FieldList[i].AsString + '''';
end
else
begin
if ADOQry.FieldList[i].AsString='' then
begin
case ADOQry.FieldList[i].DataType of
ftCurrency: MySqlValue:=MySqlValue+ '0';
ftInteger: MySqlValue:=MySqlValue+ '0';
ftTimeStamp: MySqlValue:=MySqlValue+ 'null';
else
MySqlValue:=MySqlValue + 'null';
end;
end
else
begin
MySqlValue:=MySqlValue+ ADOQry.FieldList[i].AsString;
end;
end;
if i<ADOQry.FieldCount-1 then MySqlValue:=MySqlValue + ',' else MySqlValue:=MySqlValue + ')';
end; //执行插入
ADOCommand1.CommandText:=MySqlStr+MySqlValue;
ADOCommand1.Execute; ADOQry.Next;
end; ADOCommand1.Free;
end;
insert tbname (field1name,field2name,...,fieldNname)
select 'f1-1','f1-2',...,'f1-N'
union all select 'f2-1','f2-2',...,'f2-N'
...
union all select 'fm-1','fm-2',...,'fm-N'
1、运行效率高
2、sql语句短
3、不管类型,都加引号是不会错的(不用判断null字段)(但是,datetime类型字段的毫秒信息会丢失)
var ADOCommand1: TADOCommand;
MySqlStr:string;
MySqlValue:string;
i:integer;
begin try ADOCommand1 := TADOCommand.Create(Application);
ADOCommand1.Connection:=ADOConn; ADOCommand1.CommandText:='begin tran'; //开始1个事务
ADOCommand1.Execute; //字段列表 开始
MySqlStr:='insert ' + TabName + '(';
for i:=0 to ADOQry.FieldCount-1 do
begin
if ADOQry.FieldList[i].DataType <> ftBytes then //放弃ftTimeStamp类字段
begin
MySqlStr:=MySqlStr+ADOQry.FieldDefList[i].Name;
if i<ADOQry.FieldCount-1 then MySqlStr:=MySqlStr + ',' else MySqlStr:=MySqlStr + ')';
end;
end;
//字段列表 结束 ADOQry.First;
while not ADOQry.Eof do
begin //值列表 开始
MySqlValue:=' values(';
for i:=0 to ADOQry.FieldCount-1 do
begin
if ADOQry.FieldList[i].DataType <> ftBytes then //放弃ftTimeStamp类字段
begin
if ADOQry.FieldList[i].DataType = ftString then
begin
MySqlValue:=MySqlValue+ '''' + ADOQry.FieldList[i].AsString + '''';
end
else
begin
if ADOQry.FieldList[i].AsString='' then
begin
case ADOQry.FieldList[i].DataType of
ftBCD: MySqlValue:=MySqlValue + '0'; //money
ftInteger: MySqlValue:=MySqlValue + '0'; //int
else
MySqlValue:=MySqlValue + 'null';
end;
end
else
begin
MySqlValue:=MySqlValue+ ADOQry.FieldList[i].AsString;
end;
end;
if i<ADOQry.FieldCount-1 then MySqlValue:=MySqlValue + ',' else MySqlValue:=MySqlValue + ')';
end;
end;
//值列表 结束
//执行插入
ADOCommand1.CommandText:=MySqlStr+MySqlValue;
ADOCommand1.Execute; ADOQry.Next;
end; ADOCommand1.CommandText:='commit tran'; //提交1个事务
ADOCommand1.Execute;
Result := '0'; //返回值(成功)
ADOCommand1.Free; except
ADOCommand1.CommandText:='rollback tran'; //回滚1个事务
ADOCommand1.Execute;
Result := '1'; //返回值(失败)
ADOCommand1.Free;
end;end;