一段导入CSV文件WIN 7 64位下异常!

m0_37587189 2018-04-02 02:26:26
由于CSV文件的格式比较特殊,用MEMO.LOADFROM无果以后。
换ADO操作,代码如下,求大神指导!XP下使用无任何问题,但是在64位下就提示不能使用'';文件已在使用中。
主要就是实现CSV导入EXCEL或者SQL SERVER,导入SQL里面也提示错误
procedure TForm1.Button6Click(Sender: TObject);
var
strfile,strdata,strdir,strconn2,strdatabase:string;
ExcelApp: Variant;
i:Integer;

begin

if (opendialog1.Execute) and fileExists(opendialog1.FileName) then
begin
strdata:=opendialog1.FileName;//获得路径
Edit2.Text:='';
Edit2.Text:=ExtractFileName(strdata); //获得文件名称
strdir:=ExtractFileDir(opendialog1.FileName); //获得上级目录路径
strfile:=ExtractFilePath(Application.Exename)+'data.xls';
strconn2:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='
+strdir+';Extended Properties="text;Hdr=No;imex=1";Persist Security Info=False';
//showmessage(strconn2);
strdatabase:='select * from ' + ChangeFileExt(ExtractFileName(strdata),'')+'#csv';
//showmessage(strdatabase);
ADOConnection2.ConnectionString:=strconn2;
ADOConnection2.LoginPrompt:=false;
ADOConnection2.Connected:=true;
i:=1;


try
ADOConnection1.Connected:=false;
ExcelApp := CreateOleObject('Excel.Application');
ExcelApp.Visible := False;
ExcelApp.WorkBooks.Open(strfile);
ExcelApp.WorkSheets[1].Activate;
ExcelApp.ActiveSheet.Rows['2:60000'].Delete;
ExcelApp.Application.DisplayAlerts := False;

with ADOQuery3 do
begin
close;
sql.Text:=strdatabase;
open;
first;

if Recordcount<=0 then
exit
else
begin
//showmessage(ADOQuery3.Fields[0].Value);
//showmessage(inttostr(conI));
while not eof do
begin
ExcelApp.WorkSheets[1].Cells[i+1,1].Value:=ADOQuery3.Fields[0].Value;
ExcelApp.WorkSheets[1].Cells[i+1,2].Value:=ADOQuery3.Fields[1].Value;
ExcelApp.WorkSheets[1].Cells[i+1,3].Value:=ADOQuery3.Fields[2].Value;
ExcelApp.WorkSheets[1].Cells[i+1,4].Value:=ADOQuery3.Fields[3].Value;
ExcelApp.WorkSheets[1].Cells[i+1,5].Value:=ADOQuery3.Fields[4].Value;
ExcelApp.WorkSheets[1].Cells[i+1,6].Value:=ADOQuery3.Fields[5].Value;
ExcelApp.WorkSheets[1].Cells[i+1,7].Value:=ADOQuery3.Fields[6].Value;
ExcelApp.WorkSheets[1].Cells[i+1,8].Value:=ADOQuery3.Fields[7].Value;
ExcelApp.WorkSheets[1].Cells[i+1,9].Value:=StrToInt(ADOQuery3.Fields[8].Value);
ExcelApp.WorkSheets[1].Cells[i+1,10].Value:=ADOQuery3.Fields[9].Value;
ExcelApp.WorkSheets[1].Cells[i+1,11].Value:= strtofloat(ADOQuery3.Fields[10].Value);
ExcelApp.WorkSheets[1].Cells[i+1,12].Value:= ADOQuery3.Fields[11].Value;;
ExcelApp.WorkSheets[1].Cells[i+1,13].Value:= strtofloat(ADOQuery3.Fields[12].Value);
ExcelApp.WorkSheets[1].Cells[i+1,14].Value:= ADOQuery3.Fields[13].Value;
ExcelApp.WorkSheets[1].Cells[i+1,15].Value:=ADOQuery3.Fields[14].Value;
ExcelApp.WorkSheets[1].Cells[i+1,16].Value:=ADOQuery3.Fields[15].Value;
ExcelApp.WorkSheets[1].Cells[i+1,17].Value:=ADOQuery3.Fields[16].Value;
ExcelApp.WorkSheets[1].Cells[i+1,18].Value:=ADOQuery3.Fields[17].Value;
ExcelApp.WorkSheets[1].Cells[i+1,19].Value:=ADOQuery3.Fields[18].Value;
ExcelApp.WorkSheets[1].Cells[i+1,20].Value:=ADOQuery3.Fields[19].Value;
ExcelApp.WorkSheets[1].Cells[i+1,21].Value:=ADOQuery3.Fields[20].Value;
ExcelApp.WorkSheets[1].Cells[i+1,22].Value:=ADOQuery3.Fields[21].Value;
ExcelApp.WorkSheets[1].Cells[i+1,23].Value:=ADOQuery3.Fields[22].Value;
ExcelApp.WorkSheets[1].Cells[i+1,24].Value:=ADOQuery3.Fields[23].Value;
next;
i:=i+1;
end;
end;
close;
ADOConnection2.Connected:=false;
end;

if not ExcelApp.ActiveWorkBook.Saved then ExcelApp.ActiveWorkBook.Save;
Try
ExcelApp.WorkBooks.Close;
ExcelApp.Quit;
finally
ExcelApp:= unassigned;
end;
Except
Try
ExcelApp.Quit;
finally
ExcelApp:= unassigned;
end;
end;

ADOConnection1.Connected:=true;
if not ADOQuery1.active then ADOQuery1.open;
if not ADOQuery2.active then ADOQuery2.open;
j:=1;
end;

end;
...全文
950 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
doloopcn 2018-04-08
  • 打赏
  • 举报
回复
连接字串这样写应该就可以了: Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\a.csv;Mode=Share Deny Read|Share Deny Write;Extended Properties=Text;Persist Security Info=False
doloopcn 2018-04-08
  • 打赏
  • 举报
回复
CSV需要使用TEXT驱动独占模式 它跟EXCEL的格式是不一样的,你在CONNECTION的所有属性那里看看
m0_37587189 2018-04-08
  • 打赏
  • 举报
回复
引用 4 楼 nebula845026 的回复:
感觉问题出在驱动上,你查一下XP和Win7 的数据连接驱动吧 另外为什么操作CSV要绕这么远呢,直接StringList加载进来然后用逗号分隔符逐个处理不好吗?
最开始 也是STRINGLIST处理数据,但是发现好像不能得到理想的要求。哪我再研究研究!
nebula845026 2018-04-04
  • 打赏
  • 举报
回复
感觉问题出在驱动上,你查一下XP和Win7 的数据连接驱动吧 另外为什么操作CSV要绕这么远呢,直接StringList加载进来然后用逗号分隔符逐个处理不好吗?
m0_37587189 2018-04-04
  • 打赏
  • 举报
回复
引用 1 楼 doloopcn 的回复:
?错误提示什么????

提示不能使用'';文件已在使用中。
doloopcn 2018-04-04
  • 打赏
  • 举报
回复
ADOConnection设置为独占模式 Share Exclusive
doloopcn 2018-04-02
  • 打赏
  • 举报
回复
?错误提示什么????
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧