说的好象是连接access数据库的连接,可以用select * from [Sheet$],insert 语句的麻烦举个例子.
我现在写了一段代码 procedure TForm1.Button1Click(Sender: TObject); var i,j:integer; // SAll:integer; s0,s1:string; // s2: Tdatetime; iss:string; begin if form1.OpenDialog1.Execute then begin try form1.ExcelApplication1:=Texcelapplication.create(application); form1.ExcelWorkbook1:=Texcelworkbook.create(application); form1.ExcelWorksheet1:=TexcelWorksheet.create(application); form1.ExcelApplication1.connect; except messagedlg('Excel 没有安装!',mtError,[mbYes],0); abort; end; try form1.ExcelApplication1.Workbooks.Open(form1.OpenDialog1.FileName, null,null,null,null,null,null,null,null,null,null,null,null,0); //打开指定的EXCEL 文件 except ExcelApplication1.Disconnect;//出现异常情况时关闭 ExcelApplication1.Quit; showmessage('请选择EXCEL电子表格!'); exit; end; form1.ExcelWorkbook1.ConnectTo(form1.ExcelApplication1.Workbooks[1]);//ExcelWorkbook1与Eexcelapplication1建立连接 form1.ExcelWorksheet1.ConnectTo(form1.ExcelWorkbook1.Worksheets[1] as _WorkSheet);//Excelworksheet1与Excelworkbook1建立连接 // SAll:= ExcelWorksheet1.UsedRange.Rows.Count; j:=1; for i:=2 to 1000 do // 利用取得excel表格内容的行数进行循环 begin
if trim(excelworksheet1.cells.item[i,1])<>'' then begin iss:=inttostr(i); s0:=trim(excelworksheet1.cells.item[i,1]); s1:=trim(excelworksheet1.cells.item[i,2]); form1.Label2.Caption:='正在导入第'+iss+'条数据,请等待...... '; form1.Label2.Font.Color:=clred; form1.Label2.Refresh; // showmessage(s0); // s2:=StrToDate(excelworksheet1.cells.item[i+1,3]); } with form1.Query1 do begin close; sql.Clear; {sql.add('insert into fjhd_yhw_mjs (ZCRQ) values('+''''+s0+''''+')'); } sql.Add('insert into fjhd_yhw_mjs (ZCRQ,LWDW) values (:ZCRQ,:LWDW)') ; form1.Query1.ParamByName('zcrq').AsString:=s0; execsql; end; end; end; form1.Label2.Caption:=' 数据导入完毕! '; form1.Label2.Font.Color:=clred; form1.Label2.Refresh; ExcelApplication1.Disconnect; ExcelApplication1.Quit; end; end;但是为什么提示出错'Project1.exe raise exception class EdatabaseError with message 'Query1:Parameter 'zcrq' not found'.process stopped.use step or run to continue.’
unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, DB, ADODB;type TForm1 = class(TForm) ADOConnection1: TADOConnection; Button1: TButton; Memo1: TMemo; ADOConnection2: TADOConnection; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject); var strSQL:string; begin try strSQL:='drop table [excel 8.0;database=G:\111.xls].[sheet11$]'; ADOConnection2.Execute(strSQL); ADOConnection2.Connected:=true; //strSQL:='select * into [excel 8.0;database=G:\111.xls].[sheet1] from orders'; //ADOConnection1.Execute(strSQL); //adoconnection1.Connected:=true; showmessage('SSS'); except on e:exception do memo1.Lines.Add(e.Message); end; end;end.我这里连接的是Access数据库,你可以自己修改一下
ADO.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='
+ FExcelName.Text
+';Extended properties="Excel 8.0;HDR=YES;IMEX=1";Persist Security Info=False';使用一个ADOQUERY通过上面的连接来访问EXCEL的的一个SHEETADOQuery.Close;
ADOQuery.SQL.Text := 'select * from [Sheet$]';<---这里的Sheet$是对应Excel的一个SHEET
的名字; 可以通过 ADO.GetTableNames(m_List, false) 来获取对应EXCEL的所有SHEET名字;
ADOQuery.Open;
剩下就是你自己去发挥了
procedure TForm1.Button1Click(Sender: TObject);
var i,j:integer;
// SAll:integer;
s0,s1:string;
// s2: Tdatetime;
iss:string;
begin
if form1.OpenDialog1.Execute then
begin
try
form1.ExcelApplication1:=Texcelapplication.create(application);
form1.ExcelWorkbook1:=Texcelworkbook.create(application);
form1.ExcelWorksheet1:=TexcelWorksheet.create(application);
form1.ExcelApplication1.connect; except
messagedlg('Excel 没有安装!',mtError,[mbYes],0);
abort;
end;
try
form1.ExcelApplication1.Workbooks.Open(form1.OpenDialog1.FileName,
null,null,null,null,null,null,null,null,null,null,null,null,0); //打开指定的EXCEL 文件
except ExcelApplication1.Disconnect;//出现异常情况时关闭
ExcelApplication1.Quit;
showmessage('请选择EXCEL电子表格!');
exit;
end;
form1.ExcelWorkbook1.ConnectTo(form1.ExcelApplication1.Workbooks[1]);//ExcelWorkbook1与Eexcelapplication1建立连接
form1.ExcelWorksheet1.ConnectTo(form1.ExcelWorkbook1.Worksheets[1] as _WorkSheet);//Excelworksheet1与Excelworkbook1建立连接
// SAll:= ExcelWorksheet1.UsedRange.Rows.Count;
j:=1;
for i:=2 to 1000 do // 利用取得excel表格内容的行数进行循环
begin
if trim(excelworksheet1.cells.item[i,1])<>'' then
begin
iss:=inttostr(i);
s0:=trim(excelworksheet1.cells.item[i,1]);
s1:=trim(excelworksheet1.cells.item[i,2]); form1.Label2.Caption:='正在导入第'+iss+'条数据,请等待...... ';
form1.Label2.Font.Color:=clred;
form1.Label2.Refresh;
// showmessage(s0);
// s2:=StrToDate(excelworksheet1.cells.item[i+1,3]); }
with form1.Query1 do
begin
close;
sql.Clear;
{sql.add('insert into fjhd_yhw_mjs (ZCRQ) values('+''''+s0+''''+')'); }
sql.Add('insert into fjhd_yhw_mjs (ZCRQ,LWDW) values (:ZCRQ,:LWDW)') ;
form1.Query1.ParamByName('zcrq').AsString:=s0;
execsql;
end;
end;
end;
form1.Label2.Caption:=' 数据导入完毕! ';
form1.Label2.Font.Color:=clred;
form1.Label2.Refresh;
ExcelApplication1.Disconnect;
ExcelApplication1.Quit;
end;
end;但是为什么提示出错'Project1.exe raise exception class EdatabaseError with message 'Query1:Parameter 'zcrq' not found'.process stopped.use step or run to continue.’
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, ADODB;type
TForm1 = class(TForm)
ADOConnection1: TADOConnection;
Button1: TButton;
Memo1: TMemo;
ADOConnection2: TADOConnection;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
strSQL:string;
begin
try
strSQL:='drop table [excel 8.0;database=G:\111.xls].[sheet11$]';
ADOConnection2.Execute(strSQL);
ADOConnection2.Connected:=true;
//strSQL:='select * into [excel 8.0;database=G:\111.xls].[sheet1] from orders';
//ADOConnection1.Execute(strSQL);
//adoconnection1.Connected:=true;
showmessage('SSS');
except
on e:exception do
memo1.Lines.Add(e.Message);
end;
end;end.我这里连接的是Access数据库,你可以自己修改一下
如果你只要几个字段的话,也是一样的啊,SELECT A,B,C,D FROM ......数据库操作是一样的.
可能是代碼代碼里的'zcrp'和query1的Params里的字段不一致