我也正在写一个把SQL中的数据转化成DBF文件。
现在程序快编完了。可是有个问题还特烦的。我开始是用ADOTable1连DBF文件。用
TADODataSet1连SQL 的。可是在删除记录时,我不知道用什么删除。就用ADOQuery1
连DBF了。删除代码:
MessageInt:=MessageBox(0,'DBF文件中已存在数据,是否覆盖其数据?','导出数据',MB_YESNO);
If MessageInt=6 then //是
begin
MessageBool:=True;
DataModule2.ADOQuery1.SQL.Clear ;
DataModule2.ADOQuery1.SQL.Add('delete * from yjf_2211test');
DataModule2.ADOQuery1.ExecSQL ;
end
不过这样删除后。我不知是什么原因。我的TDBGrid中还有数据。我再导SQL数据进去。
在程序中,依然有以前的记录。可是我把文件用EXCEL之类的打开时,只有后面加
进去的记录了。这可能汲及一个压缩的问题。
现在我用文件模板,没有涉及删除记录了不知你用不用得到。呵呵 ,我就再占点空间吧:
procedure TForm1.Button2Click(Sender: TObject);
var
SQLString:String;
NString,YString:String;
FilePath:String;
File1,File2:String;
SqlUdlFile,DbfUdlFile:String;
begin
NString:=Edit1.Text ;
YString:=Edit2.Text ;
if Edit1.Text ='' then
begin
ShowMessage('请输入年份');
exit;
end;
if Edit2.Text ='' then
begin
ShowMessage('请输入份');
exit;
end;
//********************转卡数据:Zksj.dbf******************//
FilePath:=ExtractFilePath(Application.ExeName);
File1:=FilePath+'模板/Zksj.dbf';
File2:=FilePath+'导出的数据库/Zksj.dbf';
SqlUdlFile:=FilePath+'Sql.udl';
DbfUdlFile:=FilePath+'Dbf.udl';
//showmessage(File1);
//showmessage(File2);
//showmessage(SqlUdlFile);
//showmessage(DbfUdlFile);
CopyFile(pChar(File1), pChar(File2),false);
SqlUdlFile:='FILE NAME='+SqlUdlFile;
DbfudlFile:='FILE NAME='+DbfudlFile;
//showmessage(SqlUdlFile);
//***********连接本文件夹下的SQL文件********************//
DataModule2.ADODataSet1.ConnectionString:=SqlUdlFile;
//showmessage('ok');
//exit;
//***********SQL语句********************//
SQLString:='SELECT TABLE_ZGJBXX.ZGBH, TABLE_ZGJBXX.XM, ';
SQLString:=SQLString+'TABLE_ZGGZ.ZKGZE, TABLE_GZZZ.ZZMC,';
SQLString:=SQLString+'TABLE_ZZ.ZZMC, TABLE_ZGGZ.ZJZH ';
SQLString:=SQLString+' FROM TABLE_ZGJBXX, TABLE_ZGGZ, TABLE_GZZZ,';
SQLString:=SQLString+' TABLE_ZZ ';
SQLString:=SQLString+' WHERE TABLE_ZGGZ.RYID = TABLE_ZGJBXX.RYID ';
SQLString:=SQLString+' AND TABLE_GZZZ.ZZBM = TABLE_ZGGZ.BZ1 ';
SQLString:=SQLString+' AND TABLE_ZZ.ZZBM = TABLE_ZGJBXX.GZDW ';
SQLString:=SQLString+' AND TABLE_ZGGZ.N = '''+NString+'''';
SQLString:=SQLString+' AND TABLE_ZGGZ.Y = '''+YString+'''';
SQLString:=SQLString+' ORDER BY TABLE_ZGJBXX.ZGBH ';
DataModule2.ADODataSet1.CommandText:=SQLString;
DataModule2.ADODataSet1.Active :=True;
//***********连接本文件夹下的BDF文件********************//
DataModule2.ADOTable1.Active :=False;
DataModule2.ADOTable1.ConnectionString:=DbfUdlFile;
DataModule2.ADOTable1.TableName :='Zksj'; //转达卡数据
DataModule2.ADOTable1.Active :=True;
DataModule2.ADODataSet1.First ;
DataModule2.ADOTable1.First ;
//****************赋值********************//
while not DataModule2.ADODataSet1.Eof do
begin
DataModule2.ADOTable1.Append ;
DataModule2.ADOTable1.FieldByName('ZGBH').value:= DataModule2.ADODataSet1.FieldByName('ZGBH').Value ;
DataModule2.ADOTable1.FieldByName('GZZH').value:=DataModule2.ADODataSet1.FieldByName('ZJZH').Value ;
DataModule2.ADOTable1.FieldByName('CKCS').value:='热电厂';//DataModule2.ADODataSet1.FieldByName('XM').Value;
DataModule2.ADOTable1.FieldByName('UNIT1').value:=DataModule2.ADODataSet1.FieldByName('ZZMC_1').Value ;
DataModule2.ADOTable1.FieldByName('UNIT2').value:=DataModule2.ADODataSet1.FieldByName('ZZMC').Value ;
DataModule2.ADOTable1.FieldByName('XM').value:=DataModule2.ADODataSet1.FieldByName('XM').Value ;
DataModule2.ADOTable1.FieldByName('CRJE').value:=DataModule2.ADODataSet1.FieldByName('ZKGZE').Value ;
DataModule2.ADOTable1.UpdateRecord ;
DataModule2.ADODataSet1.Next ;
end;
ShowMessage('转卡数据导出完毕,'#13#10+'下面将导出转卡工资汇总数据');