导EXCEL文件时出现invalid variant type conversion(50分)

  • 主题发起人 主题发起人 古香
  • 开始时间 开始时间

古香

Unregistered / Unconfirmed
GUEST, unregistred user!
做EXCEL表格导入到SQL数据库时,会出现invalid variant type conversion的信息,导不进去!代码如下:
MyWorkBook:=ExcelApp.WorkBooks.Open(OpenDialog1.FileName);
J:=MyWorkBook.ActiveSheet.UsedRange.Rows.Count;
adoconnection1.BeginTrans;
try
i:=2;
while i<j+1 do
begin
adoquery3.SQL.Clear;
adoquery3.SQL.Add('insert into js_linsi(pdnm,spno,amno,gnum,jnno,cj,flag1,qr)values('''+uppercase(Trim(VarToStr(MyWorkBook.WorkSheets[1].Cells[i,1])))+''','''+uppercase(Trim(VarToStr(MyWorkBook.WorkSheets[1].Cells[i,2])))+'''');
adoquery3.SQL.Add(','''+uppercase(Trim(VarToStr(MyWorkBook.WorkSheets[1].Cells[i,3])))+''',cast('''+uppercase(Trim(MyWorkBook.WorkSheets[1].Cells[i,4]))+''' as int),'''+uppercase(Trim(VarToStr(MyWorkBook.WorkSheets[1].Cells[i,5])))+'''');
adoquery3.SQL.Add(','''+uppercase(Trim(VarToStr(MyWorkBook.WorkSheets[1].Cells[i,6])))+''','''+uppercase(Trim(VarToStr(MyWorkBook.WorkSheets[1].Cells[i,7])))+''',''0'')');
adoquery3.ExecSQL;
i:=i+1;
end;
因为EXCEL文件里每次导入时,格式不同,而数据库表里除了第四个字段是INT型,其它都是字符型的,请教各位,该怎样写才能保证每次导数据时能一次性成功!
谢谢各位了!
 
可能是cast引起的!
 
cast('''+uppercase(Trim(MyWorkBook.WorkSheets[1].Cells[i,4]))+''' as int)
改为'+uppercase(Trim(MyWorkBook.WorkSheets[1].Cells[i,4]))+'
应该可以,但是你必须保证此单元格的数据为数值
 
有没有什么办法,可以做到,无论EXCEL单元格里的是什么类型的数据,都能导入?
 
还有一个笨办法,可能会慢一些,但是应该不会错。
query3.edit;
for i:=0 to no do
query3.fieldbyanme('字段名称').asstring:=MyWorkBook.WorkSheets[1].Cells[i,对应的列]))+
query3.post;
我测试过,数据库不管是什么类型,你都可以使用query3.fieldbyanme('字段名称').asstring。
 
谢谢zywcd,我试试!
 
还是不行啊!仍然出现提示“invalid variant type conversion”,导不进去。该怎样写代码才能导进去呢,不管EXCEL文件里单元格是什么类型!赐教,赐教!多谢!多谢!
 
有知道的吗!!!
 
还是不可以?
那你检查看看是不是本身你excel数据的原因。
比如你想把excel中的'asdasd'存入数据库的数字字段。
这样当然会出现错误的。
我觉得你可以先从这里查查原因。
 

Similar threads

I
回复
0
查看
571
import
I
I
回复
0
查看
676
import
I
I
回复
0
查看
708
import
I
后退
顶部