運行出錯,說'couldn't convert type of variant(string) into type of double'
我看數據庫的時候,發現一個cell已經导入到數據表單中了.怎麼解決上面的問題啊
分已經散完了,只有 這麼多了unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, ADODB,
Dialogs, DB, DBTables, StdCtrls, ComCtrls, Grids, DBGrids, ExtCtrls,Excel2000, OleServer,Comobj;
type
TForm1 = class(TForm)
ADOConnection1: TADOConnection;
DataSource1: TDataSource;
Button1: TButton;
OpenDialog1: TOpenDialog;
ADOTable1: TADOTable;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var eclApp,WorkBook :variant ;
xlsFileName :string;
a_FiledCount:integer; //數据表中的列數
b_filedCount:integer; //excel 文件中的 列數
b_row :integer; // excel 文件的行數
i,j :integer;
a_flag :boolean;
begin Form1.OpenDialog1.InitialDir :=ExtractFilePath(Application.ExeName );
if (Form1.OpenDialog1.Execute )
then xlsFileName :=ExtractFileName(Form1.OpenDialog1.FileName)
else exit; try
eclApp := CreateOleObject('Excel.Application');
WorkBook :=CreateOleObject('Excel.Sheet');
except
showmessage('您系統未安裝MS-EXCEL');
exit;
end;
try
workBook :=eclApp.WorkBooks.add ;
eclApp.workBooks.open(Form1.OpenDialog1.FileName );
except
on EOleException do
begin
WorkBook.close;
eclApp.quit;
eclApp:=Unassigned;
exit;
end;
end;
eclApp.visible :=false;
try //try ..finally
try //try ..except
With adotable1 do
begin
close ;
tablename:='joy'; active:=true;
a_FiledCount :=FieldCount; end; b_filedCount :=eclApp.ActiveSheet.UsedRange.columns.Count;//返回excel 表中的列?
b_row :=eclApp.activesheet.UsedRange.rows.count; //返回excel 表中的行? if (a_FiledCount <>b_FiledCount) //??据 表和?入的excel表中的列?不一?,?明?入的excel文件不是正确的
then begin
showmessage('您???入的excel文件??'+#13+#10+'?您重新??');
WorkBook.close;
eclApp.quit;
eclApp:=Unassigned;
exit;
end
else begin //列?正确,但是?要??判?每列的字段名是否一致
for i :=1 to b_filedCount do
begin
//showmessage(eclApp.activesheet.cells.item[1,i].value);
//showmessage(DataMod.ADO_basic.Fields.Fields[i-1].FieldName ); if eclApp.activesheet.cells.item[2,i].value<>adotable1.Fields[i-1].FieldName //判?字段名是否相等
//if eclApp.activesheet.cells.item[1,i].value<>DataMod.ADO_basic.Fields.Fields[i-1].FieldName //判?中文title.caption 是否相等
then begin
showmessage('您所輸入的excel文件錯誤'+#13+#10+'請您重新導入');
WorkBook.close;
eclApp.quit;
eclApp:=Unassigned;
adotable1.Close ;
exit;
end;
end; //for i:=.....
end; //end with else for i :=3 to b_row do //行
begin
a_flag :=adotable1.Locate(eclApp.activesheet.cells.item[2,1],eclApp.activesheet.cells.item[i,1],[loCaseInsensitive]);
if (a_flag =true)
then begin
showmessage('該紀錄已經存在');
adotable1.Next ;
continue;
end; With adotable1 do
begin
close ;
tablename:='joy';
active :=true;
Append;
end;
For j :=1 to b_filedCount do //列
begin //?始?入?据?
//showmessage(eclApp.activesheet.cells.item[1,j]);//.Value);
////showmessage(eclApp.activesheet.cells.item[i,j].value);
//showmessage(eclApp.activesheet.cells[i,j].value); adotable1.FieldByName(eclApp.activesheet.cells.item[2,j]).Value:=eclApp.activesheet.cells[i,j].value; end ; //end with For j :=1 to b_filedCount do
adotable1.Post ;
adotable1.Refresh ;
end;
showmessage('導入數据成功');
except
WorkBook.close;
eclApp.quit;
eclApp:=Unassigned;
adotable1.Close ;
end; //end try except
finally //操作??,退出
WorkBook.close;
eclApp.quit;
eclApp:=Unassigned;
adotable1.Close ;
end;
end;end.
我看數據庫的時候,發現一個cell已經导入到數據表單中了.怎麼解決上面的問題啊
分已經散完了,只有 這麼多了unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, ADODB,
Dialogs, DB, DBTables, StdCtrls, ComCtrls, Grids, DBGrids, ExtCtrls,Excel2000, OleServer,Comobj;
type
TForm1 = class(TForm)
ADOConnection1: TADOConnection;
DataSource1: TDataSource;
Button1: TButton;
OpenDialog1: TOpenDialog;
ADOTable1: TADOTable;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var eclApp,WorkBook :variant ;
xlsFileName :string;
a_FiledCount:integer; //數据表中的列數
b_filedCount:integer; //excel 文件中的 列數
b_row :integer; // excel 文件的行數
i,j :integer;
a_flag :boolean;
begin Form1.OpenDialog1.InitialDir :=ExtractFilePath(Application.ExeName );
if (Form1.OpenDialog1.Execute )
then xlsFileName :=ExtractFileName(Form1.OpenDialog1.FileName)
else exit; try
eclApp := CreateOleObject('Excel.Application');
WorkBook :=CreateOleObject('Excel.Sheet');
except
showmessage('您系統未安裝MS-EXCEL');
exit;
end;
try
workBook :=eclApp.WorkBooks.add ;
eclApp.workBooks.open(Form1.OpenDialog1.FileName );
except
on EOleException do
begin
WorkBook.close;
eclApp.quit;
eclApp:=Unassigned;
exit;
end;
end;
eclApp.visible :=false;
try //try ..finally
try //try ..except
With adotable1 do
begin
close ;
tablename:='joy'; active:=true;
a_FiledCount :=FieldCount; end; b_filedCount :=eclApp.ActiveSheet.UsedRange.columns.Count;//返回excel 表中的列?
b_row :=eclApp.activesheet.UsedRange.rows.count; //返回excel 表中的行? if (a_FiledCount <>b_FiledCount) //??据 表和?入的excel表中的列?不一?,?明?入的excel文件不是正确的
then begin
showmessage('您???入的excel文件??'+#13+#10+'?您重新??');
WorkBook.close;
eclApp.quit;
eclApp:=Unassigned;
exit;
end
else begin //列?正确,但是?要??判?每列的字段名是否一致
for i :=1 to b_filedCount do
begin
//showmessage(eclApp.activesheet.cells.item[1,i].value);
//showmessage(DataMod.ADO_basic.Fields.Fields[i-1].FieldName ); if eclApp.activesheet.cells.item[2,i].value<>adotable1.Fields[i-1].FieldName //判?字段名是否相等
//if eclApp.activesheet.cells.item[1,i].value<>DataMod.ADO_basic.Fields.Fields[i-1].FieldName //判?中文title.caption 是否相等
then begin
showmessage('您所輸入的excel文件錯誤'+#13+#10+'請您重新導入');
WorkBook.close;
eclApp.quit;
eclApp:=Unassigned;
adotable1.Close ;
exit;
end;
end; //for i:=.....
end; //end with else for i :=3 to b_row do //行
begin
a_flag :=adotable1.Locate(eclApp.activesheet.cells.item[2,1],eclApp.activesheet.cells.item[i,1],[loCaseInsensitive]);
if (a_flag =true)
then begin
showmessage('該紀錄已經存在');
adotable1.Next ;
continue;
end; With adotable1 do
begin
close ;
tablename:='joy';
active :=true;
Append;
end;
For j :=1 to b_filedCount do //列
begin //?始?入?据?
//showmessage(eclApp.activesheet.cells.item[1,j]);//.Value);
////showmessage(eclApp.activesheet.cells.item[i,j].value);
//showmessage(eclApp.activesheet.cells[i,j].value); adotable1.FieldByName(eclApp.activesheet.cells.item[2,j]).Value:=eclApp.activesheet.cells[i,j].value; end ; //end with For j :=1 to b_filedCount do
adotable1.Post ;
adotable1.Refresh ;
end;
showmessage('導入數据成功');
except
WorkBook.close;
eclApp.quit;
eclApp:=Unassigned;
adotable1.Close ;
end; //end try except
finally //操作??,退出
WorkBook.close;
eclApp.quit;
eclApp:=Unassigned;
adotable1.Close ;
end;
end;end.
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货