成功显示出来了!~谢谢你!!下一步是否就是放一个BitBtn按钮,然后 procedure TForm1.RzBitBtn1Click(Sender: TObject); begin while not ADOTable1.eof do begin ADOQuery1.SQL.Append; ADOQuery1.SQL.FieldByName('编号').Asstring := adotable1.sql.FieldByName('编号').Asstring; //其他字段 ADOQuery1.SQL.Post; ADOTable1.Next; end;end; 就行了?
对 最好在循环之前加上ADOTable1.first,这样保证不丢失记录
procedure TForm1.RzBitBtn1Click(Sender: TObject); begin while not ADOQuery2.eof do begin ADOQuery1.SQL.Append; ADOQuery1.SQL.FieldByName('编号').Asstring := ADOQuery2.sql.FieldByName('编号').Asstring; //其他字段 ADOQuery1.SQL.Post; ADOQuery2.Next; end;end; 报错 [Error] Unit1.pas(51): Not enough actual parameters [Error] Unit1.pas(52): Undeclared identifier: 'FieldByName' [Error] Unit1.pas(52): Missing operator or semicolon [Error] Unit1.pas(52): Undeclared identifier: 'FieldByName' [Error] Unit1.pas(52): Missing operator or semicolon [Error] Unit1.pas(54): Undeclared identifier: 'Post' [Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'
最笨的办法,借用OLE,写代码输出给excel.
qryexcel.connection:='provider=microsoft.jet.oledb.4.0;data source=aa.xls;extended property=excel 8.0;persist security info=false';qrysql.connection:='sqloledb.1;......';with qryexcel do begin sql.clear; sql.add('select * from [sheet1$]'); open; first; end;while not qryexcel.eof do begin with qrysql do begin begin sql.clear; sql.add('insert into t1 (f1,f2) values (:v1,:v2)'); parametersbyname('v1').value=qryexcel.fieldbyname('f1').asstring; execsql; end; qryexcel.next; end; end; 大概这个样子,另外你可以搞一个通用的导入导出程序
[email protected]
谢谢你了,我确实不知道怎么写!~~
连接用TADOConnection,
数据集控件用TADOQuery,用两个这样的控件
sqlQ 连接sql server;
excelQ 连接 excel
都open后
while not excelQ.eof do
begin
sqlQ.append;
sqlQ.FieldByName('编号').Asstring := excelQ.FieldByName('编号').Asstring;
//其他字段
sqlQ.Post;
excelQ.Next;
end;
[Sheet1$]为excel中的页签
procedure TForm1.RzBitBtn1Click(Sender: TObject);
begin while not ADOTable1.eof do
begin
ADOQuery1.SQL.Append;
ADOQuery1.SQL.FieldByName('编号').Asstring := adotable1.sql.FieldByName('编号').Asstring;
//其他字段
ADOQuery1.SQL.Post;
ADOTable1.Next;
end;end;
就行了?
最好在循环之前加上ADOTable1.first,这样保证不丢失记录
begin while not ADOQuery2.eof do
begin
ADOQuery1.SQL.Append;
ADOQuery1.SQL.FieldByName('编号').Asstring := ADOQuery2.sql.FieldByName('编号').Asstring;
//其他字段
ADOQuery1.SQL.Post;
ADOQuery2.Next;
end;end;
报错
[Error] Unit1.pas(51): Not enough actual parameters
[Error] Unit1.pas(52): Undeclared identifier: 'FieldByName'
[Error] Unit1.pas(52): Missing operator or semicolon
[Error] Unit1.pas(52): Undeclared identifier: 'FieldByName'
[Error] Unit1.pas(52): Missing operator or semicolon
[Error] Unit1.pas(54): Undeclared identifier: 'Post'
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'
sql.clear;
sql.add('select * from [sheet1$]');
open;
first;
end;while not qryexcel.eof do begin
with qrysql do begin
begin
sql.clear;
sql.add('insert into t1 (f1,f2) values (:v1,:v2)');
parametersbyname('v1').value=qryexcel.fieldbyname('f1').asstring;
execsql;
end;
qryexcel.next;
end;
end;
大概这个样子,另外你可以搞一个通用的导入导出程序
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, RzButton, ADODB, Provider, DBClient, DB, Grids, DBGridEh,
RzShellDialogs;type
TForm1 = class(TForm)
ADOConnection1: TADOConnection;
DBGridEh1: TDBGridEh;
DataSource1: TDataSource;
ADOConnection2: TADOConnection;
ADOQuery1: TADOQuery;
DataSource2: TDataSource;
DBGridEh2: TDBGridEh;
RzBitBtn1: TRzBitBtn;
ADOQuery2: TADOQuery;
procedure FormCreate(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure RzBitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
begin
try
ADOConnection2.Connected:=true;
Except
Application.MessageBox('数据库连接失败,请检查参数!','警告',mb_iconwarning)
end;
end;procedure TForm1.RzBitBtn1Click(Sender: TObject);
begin
with ADOQuery2 do begin
ADOQuery2.SQL.clear;
ADOQuery2.SQL.add('select * from [sheet1$]');
open;
first;
end;while not ADOQuery2.eof do begin
with ADOQuery1 do begin
begin
ADOQuery1.SQL.clear;
ADOQuery1.SQL.add('insert into Pub_Btype (FullName,UserCode) values (:名称,:编码)');
ADOQuery2('名称').value:=adoquery2.fieldbyname('FullName').asstring;
execsql;
end;
ADOQuery2.next;
end;
end;
end;procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
ADOConnection2.Connected:=false;
end;end.
错误提示:
[Error] Unit1.pas(60): Missing operator or semicolon
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select * from T_RES_ECO_PASS');
ADOQuery1.Open;
SMImportFromXLS.SourceFileName:=RzButtonEdit2.Text;
SMImportFromXLS.Mappings.Clear;
SMImportFromXLS.Mappings.Add('WKO_TYPE=A');
SMImportFromXLS.Mappings.Add('SendData=B');
SMImportFromXLS.Mappings.Add('ECONO=C');
SMImportFromXLS.Mappings.Add('subject=D');
SMImportFromXLS.Mappings.Add('EcrNo=E');
SMImportFromXLS.Mappings.Add('ECOCC=F');
SMImportFromXLS.Mappings.Add('Model=G');
try
SMImportFromXLS.Execute;
InsertECOLOG;
except
MessageDlg('請選擇要導入的Excel檔案!',mtWarning,[mbOK],0);
Exit;
end;
adosrp_eco.ExecProc;
RefreshECO;
ESPStoredProcedure;
end;