请问如何用delphi程序实现,将EXCEL导入ACCESS数据库,谢谢!
解决方案 »
- 吐槽:想找几个简历,结果给闹心的。。。散分
- DEPHI应用开发--连接DB2数据的几个问题
- 大家帮我看个动态树的问题。不知道问题出在哪里?
- oracle中如何将大于32K的文件在LONG RAW字段中读出?
- 急:delphi打印的问题:每次联机后必须先用别的软件打印一次,delphi程序才能正常打印
- winapi函数可以 在delphi中直接使用吗?如果 不可以,还有那些手续要办!?
- 关于TDrawGrid刷新的问题
- 我通过DLL调用一个MDICHILD窗体怎么判断它是不是已经在运行.
- DELPHI6.0的帮助不知为何没有了索引?我不记得一开始时有没有了,若原来有的,如何恢复?
- 启动Database Desktop时,显示无法初始化BDE是怎么回事?而且连接数据库也连不上,怎么办?
- 一个简单的删除问题?帮个忙!
- 怎样处理MIDAS中的问题: Windows socket error:远程主机强迫关闭了一个现有的连接
var
OpenDialog:TOpenDialog;
iCount:integer;
begin
if ShowIYN('是否真的要导入Excel数据,要生的数据将被删除?')<>IDCANCEL then
try
OpenDialog:=TOpenDialog.Create(Self);
OpenDialog.DefaultExt := 'xls';
OpenDialog.Filter := 'Microsoft Excel 文件 (*.xls)|*.xls';
OpenDialog.Execute;
if OpenDialog.FileName<>'' then
try
Screen.Cursor:=crSqlWait;
ADOConExcel.Close;
ADOConExcel.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data
Source='
+OpenDialog.FileName+';Extended
Properties=Excel 8.0;Persist Security Info=False';
ADOConExcel.Open;
with ADOQryExcel do
begin
Close;
Sql.Clear;
Sql.Add('SELECT 材料编号,百平米用量,预算价,最低价 FROM
[Sheet1$]');
Prepared:=true;
Open;
end;
iCount:=ADOQryExcel.RecordCount;
ADOConExcel.BeginTrans;
with F_DataModule.ADOCom do
begin
CommandText:='DELETE FROM MatPriCal WHERE
cYearMonth='+''''+FormatDateTime('yyyymm',DateTimePicker.DateTime)+'''';
Execute;
end;
ADOQryExcel.First;
while not ADOQryExcel.Eof do
begin
with F_DataModule.ADOCom do
begin
CommandText:='INSERT INTO MatPriCal
VALUES('+''''+FormatDateTime('yyyymm',DateTimePicker.DateTime)+''''+','+''
''+Trim(ADOQryExcel.FieldByName('材料编号
').AsString)+''''+','+Trim(ADOQryExcel.FieldByName('百平米用量
').AsString)+','+Trim(ADOQryExcel.FieldByName('预算价
').AsString)+','+Trim(ADOQryExcel.FieldByName('最低价').AsString)+')';
Execute;
end;
ADOQryExcel.Next;
F_Main.StatusBar.Refresh;
F_Main.StatusBar.Panels[2].text:='当前数
:'+IntToStr(ADOQryExcel.RecNo)+'(共'+IntToStr(iCount)+'条)';
end;
ADOConExcel.CommitTrans;
ShowWIE(2,'导入成功!');
except
ADOConExcel.RollbackTrans;
ShowWIE(2,'导入失败!');
end;
finally
ADOQryExcel.Close;
ADOConExcel.Close;
OpenDialog.Free;
Screen.Cursor:=crDefault;
F_Main.StatusBar.Panels[2].Text:='';
end;
end;或用sql 自带的openrowset,参考程序
if ShowIYN('是否真的要导入Excel数据?')<>IDCANCEL then
try
ADOConInfoExcel.Open;
OpenDialog:=TOpenDialog.Create(Self);
OpenDialog.DefaultExt := 'xls';
OpenDialog.Filter := 'Microsoft Excel 文件 (*.xls)|*.xls';
OpenDialog.Execute;
if OpenDialog.FileName<>'' then
try
with ADOQryInfoExcel do
begin
Close;
Sql.Clear;
Sql.Add(' SELECT TOP 1 * FROM OPENROWSET');
Sql.Add('(');
Sql.Add('''MSDASQL.1''');
Sql.Add(',');
Sql.Add('''DRIVER=Microsoft Excel Driver (*.xls);');
Sql.Add('DBQ='+OpenDialog.FileName+'''');
Sql.Add(',');
Sql.Add('''SELECT * FROM [Sheet1$]''');
Sql.Add(')');
Open;
end;
if Copy(ADOQryInfoExcel.Fields[2].AsString,1,4)<>mUser.UserArea
then
begin
ShowWIE(1,'不能导入其它地区数据!');
ADOQryInfoExcel.Close;
ADOConInfoExcel.Close;
exit;
end;
//ADOConInfoExcel.BeginTrans;
with ADOComInfoExcel do
begin
CommandText:=' UPDATE C';
CommandText:=CommandText+' SET C.MNo=A.类别编码,C.MName=A.材料名称
,C.spec=A.材料规格,C.unit=A.材料单位,C.Factory=A.生产厂家,C.TradeMark=A.厂
牌,C.Price=A.材料单价,C.pingyin=A.材料拼音,C.hs=A.换算系数 FROM
InfoPrice'+mUser.UserArea;
CommandText:=CommandText+' C, OPENROWSET';
CommandText:=CommandText+'(';
CommandText:=CommandText+'''MSDASQL.1''';
CommandText:=CommandText+',';
CommandText:=CommandText+'''DRIVER=Microsoft Excel Driver
(*.xls);';
CommandText:=CommandText+'DBQ='+OpenDialog.FileName+'''';
CommandText:=CommandText+',';
CommandText:=CommandText+'''SELECT * FROM [Sheet1$]''';
CommandText:=CommandText+') A WHERE C.RDate=A.发布日期 AND
C.RNO=A.发布编号 AND C.Area=A.地区编码';
Execute;
CommandText:=' INSERT INTO InfoPrice'+mUser.UserArea;CommandText:=CommandText+'(RDate,RNO,Area,MNo,MName,spec,unit,Factory,Trad
eMark,Price,pingyin,hs) ';
CommandText:=CommandText+' SELECT 发布日期,发布编号,地区编码,类别
编码,材料名称,材料规格,材料单位,生产厂家,厂牌,材料单价,材料拼音,换算系数
FROM OPENROWSET';
CommandText:=CommandText+'(';
CommandText:=CommandText+'''MSDASQL.1''';
CommandText:=CommandText+',';
CommandText:=CommandText+'''DRIVER=Microsoft Excel Driver
(*.xls);';
CommandText:=CommandText+'DBQ='+OpenDialog.FileName+'''';
CommandText:=CommandText+',';
CommandText:=CommandText+'''SELECT * FROM [Sheet1$]''';
CommandText:=CommandText+') A';
CommandText:=CommandText+' WHERE NOT EXISTS(SELECT 1 FROM
InfoPrice'+mUser.UserArea+' C';
CommandText:=CommandText+' WHERE C.RDate=A.发布日期 AND C.RNO=A.发
布编号 AND C.Area=A.地区编码)';
Execute;
end;
//ADOConInfoExcel.CommitTrans;
RefreshGridData;
ShowWIE(2,'导入成功!');
except
//ADOConInfoExcel.RollbackTrans;
ShowWIE(2,'导入失败!');
end;
finally
ADOQryInfoExcel.Close;
ADOConInfoExcel.Close;
OpenDialog.Free;
end;
AA: OleVariant; try
//创建Access Application对象,并打开Access临时数据库
AA:=CreateOleObject('Access.Application');
if not FileExists(sTempPath)
then AA.NewCurrentDatabase(sTempPath)
else AA.OpenCurrentDatabase(sTempPath,False);
AA.DoCmd.TransferSpreadsheet(acImport,acSpreadsheetTypeExcel8,sacTableName,sPathNameStr,true,'');
AA.CloseCurrentDatabase;
except
WARNING('文件格式有误,转换过程中发生错误!');
end;
if FileExists(sTempPath) then DeleteFile(sTempPath);
这句不要,我这儿是删除临时产生的Access文件。
一个批量导入数据的控件也就是,把Excel和WORD内的数据导入数据的控件!!
有需要请到http://api8.8u8.com/Excel1.rar下载!!
本控只有一个方法和3个属性!!
本控件为V2。0版注:本版为V2。0版,可以导入SQL、Access、Oracle等数据库~~
本控件只有一个方法(mygaoload),4个要设置的属性(DatabaseName、RecordSource、wordtable、ExcelRows)!!下面让我一一说明!!
1。mygaoload(方法) 该方法,在正确的设置好上面所说的4个属性后,就会调用出一个对话框让用户选择Excel或word的文件(运行时才知)
2。DatabaseName(属性) 设置数据库的路径和文件名!!
3。RecordSource(属性) 设置,你被导入数据的表!
4。wordtable(属性) 设置,word中的表格ID,因为不知你在word中的表格有多少个,所以要指定word表的ID,比如说,你在word中
有3表格,如果你要导入第一个表格的数据就填1,如要导入第二个表格的数据就填2,反之则然!!(注意,一定要把数据放在word的表格中,不然的话将会不导数据!!)
该属性的默认值为15。ExcelRows(属性) 设置,读取Excel表中的数据从第几行开始读,因你可能会在表中的头N行打进该表的名称,因为哪个表的名称可能
是你不想导入数据库的!!比如你要从2行开始读取数,因为第一行你要用放一些不想导入数据库的数据(比如标题),就个属性就要填2
http://wplll.126.com
http://www.csdn.net/Develop/Read_Article.asp?Id=18589
http://www.csdn.net/develop/Read_Article.asp?Id=18595看看行不
ADOConnection2.Execute('SELECT * into abc FROM OpenDataSource(''Microsoft.Jet.OLEDB.4.0'',''Data Source="C:\1.xls";Extended Properties=Excel 8.0'')...[Sheet1$]');
报"FROM子句语法出错"
而用
ADOConnection1.Execute('select * into abc from [excel 8.0;database=''c:\1.xls''].[Sheet1$]');
报"不能更新,数据库或对象为只读"
哪位高手指点下,谢谢!