这是将EXCEL导入SQLSEVER的代码,但我有一些问题,试了多次都没有解决。希望会的朋友帮我看看。(50分)

G

guguda

Unregistered / Unconfirmed
GUEST, unregistred user!
代码如下:
procedure TForm1.Button1Click(Sender: TObject);
var ExcelApp,MyWorkBook: OLEVariant;
i,j: Integer;
begin
try
ExcelApp:=CreateOleObject('Excel.Application');
MyWorkBook:=CreateOleobject('Excel.Sheet');
except
application.Messagebox('无法打开Xls文件请确认已经安装EXCEL.','',
mb_OK+mb_IconStop);
Exit;
end;
//ExcelApp.Visible := true;
if OpenDialog1.Execute then
MyworkBook:= ExcelApp.workBooks.Open(OpenDialog1.FileName);
for i := 2 to 10 do begin //这里要怎么写才能让EXCEL里的数据集依次导入?
adotable1.Append;
adotable1.FieldByName('Name').AsString := MyWorkBook.WorkSheets[1].Cells[i,1].Value;
adotable1.FieldByName('type').AsString := MyWorkBook.WorkSheets[1].Cells[i,2].Value;
adotable1.FieldByName('area').AsString := MyWorkBook.WorkSheets[1].Cells[i,3].Value;
adotable1.FieldByName('Area_no').AsString := MyWorkBook.WorkSheets[1].Cells[i,4].Value;
adotable1.FieldByName('piece').AsString := MyWorkBook.WorkSheets[1].Cells[i,5].Value;
adotable1.FieldByName('min').AsString := MyWorkBook.WorkSheets[1].Cells[i,6].Value;
adotable1.FieldByName('fee').AsString := MyWorkBook.WorkSheets[1].Cells[i,7].Value;
end;
ExcelApp:=Unassigned; //释放VARIANT变量
end;
-------------------------
问题是:
no.1 for i := 2 to 10 do 这里要怎么写循环才能让EXCEL里的数据依次导入到SQL里?
no.2 这里的表是已经事先做好的,我要怎么做才能在把EXCEL里的数据导入到SQL数据库里时自己建立一个表?表名要自己来写。
 
你可以将execl里的数据另存为dbf库,再来转到sqlsever里面
 
没人知道怎么解决吗?
一定要 excel to sql server 才可以。不能转成其他数据库。
 
在MS SQL机器上直接打开XLS文件的方法

SELECT *
INTO #temp
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:/temp/awfi.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...awfi

 
这是一个导excel数据到sql中的过程,你看一下吧!
procedure TFrmjcbxmdr.Button4Click2(Sender: TObject);
var

bmc:string; //表名称
rq:string;
sxm:integer; //顺序码
row:integer; //行计数
xmmc:string; //项目名称
xmlx:string; //项目类型
sc:string; //所属市场
xh:string; //适用型号
qzyh:string; //改进前专用号
hzyh:string; //改进后专用号
qcbj:string; //改进前成本价
hcbj:string; //改进后成本价
jje:string; //降价额
sl:string; //数量
dw:string; //单位
zrr:string; //责任人
gjcs:widestring; //改进措施
syze:string; //收益总额
year,month,date:string; //年月日
tzrq:string; //通知日期
tzssrq:string; //通知实施日期
sjrq:string; //实际实施日期
day:string;
i:integer; //计数
rowcount:integer; //行计数


begin

excelworksheet1.ConnectTo(excelworkbook1.worksheets[1] as _worksheet);
year:=edit3.text;
month:=combobox1.text;
if strtoint(edit2.text)<10 then
day:='0'+edit2.text
else
day:=edit2.text;

bmc:='降成本项目管理表';
rq:=year+'/'+month+'/'+day;

if MessageDlg('是否导入'+bmc,mtConfirmation, [mbYes, mbNo], 0) = mrYes then
begin
dm1.ac1.BeginTrans;

dm1.aq1.Close;
dm1.aq1.SQL.Clear;
dm1.aq1.SQL.Add('select * from '+bmc+' where 导入日期= '+''''+rq+'''');
// showmessage('select * from '+bmc+' where 导入日期= like '+''''+'%'+rq+'%'+'''');
dm1.aq1.Open;

if dm1.aq1.IsEmpty=false then
begin
if MessageDlg('该月的降成本项目已存在,是否重新导入?',mtConfirmation, [mbYes, mbNo], 0) = mrYes then
begin
dm1.aq1.Close;
dm1.aq1.SQL.Clear;
dm1.aq1.SQL.Add('delete from '+bmc+' where 导入日期='+''''+rq+'''');
dm1.aq1.execsql;
dm1.ac1.RollbackTrans;
showmessage('原纪录已被删除,请重新导入');

end
else begin
dm1.ac1.RollbackTrans;
excelapplication1.Disconnect;
exit;
end;
end;

rowcount:=0;
row:=2;
xmmc:=excelworksheet1.Cells.item[row,1];

while (xmmc<>'') do
begin
rowcount:=rowcount+1;
row:=row+1;
xmmc:=excelworksheet1.Cells.item[row,1];
end;

progressbar1.Min:=0;
progressbar1.Max:=rowcount+20;
progressbar1.Step:=1;

sxm:=1;
row:=2;

while (sxm<=rowcount) do
begin
try
xmmc:=excelworksheet1.Cells.item[row,2]; //项目名称
//xmlx:=excelworksheet1.Cells.item[row,1]; //项目类型
xh:=excelworksheet1.Cells.item[row,3]; //适用型号
gjcs:=excelworksheet1.Cells.item[row,4]; //改进措施
sc:=excelworksheet1.Cells.item[row,5]; //所属市场
zrr:=excelworksheet1.Cells.item[row,6]; //责任人

qzyh:=excelworksheet1.Cells.item[row,7]; //改进前专用号
hzyh:=excelworksheet1.Cells.item[row,9]; //改进后专用号
qcbj:=excelworksheet1.Cells.item[row,8]; //改进前成本价
hcbj:=excelworksheet1.Cells.item[row,10]; //改进后成本价
jje:=excelworksheet1.Cells.item[row,11]; //降价额
sl:=excelworksheet1.Cells.item[row,12]; //数量

// dw:=excelworksheet1.Cells.item[row,1]; //单位

syze:=excelworksheet1.Cells.item[row,13]; //收益总额

tzrq:=excelworksheet1.Cells.item[row,14]; //通知日期
tzssrq:=excelworksheet1.Cells.item[row,15]; //通知实施日期
sjrq:=excelworksheet1.Cells.item[row,16];
dm1.aq1.Close;
dm1.aq1.SQL.Clear;
dm1.aq1.SQL.add('insert into '+bmc+' (顺序码,项目名称,适用市场,适用产品型号,改进前专用号,改进后专用号,改进前物料成本价格,改进后物料成本价格,降价额,改进后物料数量,收益总额,改进后物料单位,责任人,改进措施,通知日期,通知实施日期,实际实施日期,导入日期) values ');
dm1.aq1.SQL.add('('+inttostr(sxm)+','+''''+xmmc+''''+','+''''+sc+''''+','+''''+xh+''''+','+''''+qzyh+''''+','+''''+hzyh+''''+','+qcbj+','+hcbj+','+jje+','+sl+','+syze+','+''''+dw+''''+','+''''+zrr+''''+','+''''+gjcs+''''+','+''''+tzrq+''''+','+''''+tzssrq+''''+','+''''+sjrq+''''+','+''''+rq+''''+')');
showmessage('insert into '+bmc+' (顺序码,项目名称,适用市场,适用产品型号,改进前专用号,改进后专用号,改进前物料成本价格,改进后物料成本价格,降价额,改进后物料数量,收益总额,改进后物料单位,责任人,改进措施,通知日期,通知实施日期,实际实施日期,导入日期) values ');
showmessage('('+inttostr(sxm)+','+''''+xmmc+''''+','+''''+sc+''''+','+''''+xh+''''+','+''''+qzyh+''''+','+''''+hzyh+''''+','+qcbj+','+hcbj+','+jje+','+sl+','+syze+','+''''+dw+''''+','+''''+zrr+''''+','+''''+gjcs+''''+','+''''+tzrq+''''+','+''''+tzssrq+''''+','+''''+sjrq+''''+','+''''+rq+''''+')');
dm1.aq1.ExecSQL;

except
if messagedlg('第'+inttostr(sxm+1)+'行记录导入出错,是否跳过?',mtconfirmation, [mbyes,mbno],0)=mrno then
begin
sxm:=sxm-1;
row:=row-1;
end;
end;

sxm:=sxm+1;
row:=row+1;
progressbar1.StepIt;
end;



dm1.ds1.DataSet:=dm1.aq1;

dm1.aq1.Close;
dm1.aq1.SQL.Clear;
dm1.aq1.SQL.Add('select * from '+bmc+' where 导入日期='+''''+rq+''''+' order by 顺序码');
dm1.aq1.Open;
showdbgrid(self);

progressbar1.Position:=progressbar1.Max;
MessageDlg('导入完毕', mtInformation,[mbOk], 0);
progressbar1.Position:=0;

if MessageDlg('是否保存'+bmc,mtConfirmation, [mbYes, mbNo], 0) = mrYes then
begin
dm1.ac1.CommitTrans;
excelapplication1.Disconnect;
end
else begin
dm1.ac1.RollbackTrans;
excelapplication1.Disconnect;
showmessage('导入取消');
end;

end;

showdbgrid(self);

end;
 
多人接受答案了。
 
顶部