delphi7 将Excel中的数据导入dbgrld,在从dbgrld导入数据中. delphi7 将Excel中的数据导入dbgrld,在从dbgrld导入数据中. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这是高手们给的从EXcel 导入 delphi 的代码繁一点但可以实现procedure TForm4.SpeedButton1Click(Sender: TObject); var x:string;begin OpenDialog1.Execute; edit1.Text:=opendialog1.FileName; x:=COPY(edit1.Text,length(trim(edit1.Text))-3,4);//指定excel路径 if X='.xls' then begin with ADOquery1 do begin Active:=false; ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source='+edit1.Text+';Mode=Share Deny None;Extended Properties=Excel 8.0;Jet OLEDB:System database="";Jet OLEDB:Registry Path="";'; ConnectionString:=ConnectionString+'Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=35;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;'; ConnectionString:=ConnectionString+' OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don#39t Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False'; Close; SQL.Clear; SQL.Add('select * from [Sheet1$]'); ExecSQL; Open; end; end; end; 是导入dbgrid的吗?我的代码报错.unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids, DBGrids, StdCtrls, DB, ADODB,comobj, OleServer;type TForm1 = class(TForm) editexcelname: TEdit; Label1: TLabel; BtnSelExcel: TButton; BtnExcelIn: TButton; GroupBox1: TGroupBox; DBGExcel: TDBGrid; odSelExcel: TOpenDialog; adoquery1: TADOQuery; ADOConnection1: TADOConnection; DataSource1: TDataSource; procedure BtnSelExcelClick(Sender: TObject); procedure BtnExcelInClick(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1;implementation{$R *.dfm}procedure TForm1.BtnSelExcelClick(Sender: TObject);beginodSelExcel.Title := '请选择要导入的Excel文件';odSelExcel.Filter := 'Excel(*.xls)|*.xls';if odSelExcel.Execute thenbegineditexcelname.Text := odSelExcel.FileName;endelseApplication.MessageBox('请选择一个Excel文件','选择一个文件',MB_OK);end;procedure TForm1.BtnExcelInClick(Sender: TObject);const BeginRow = 2; BeginCol = 1; var Excel: OleVariant; iRow,iCol : integer; xlsFilename: string; begin if (trim(editexcelname.Text) = '') then begin MessageBox(GetActiveWindow(), '请选择正确的excel路径', '错误提示信息',MB_OK +MB_ICONWARNING); exit; end; xlsFilename := trim(editexcelname.Text); try Excel := CreateOLEObject('Excel.Application'); except Application.MessageBox('excel没有安装', '提示信息', MB_OK+MB_ICONASTERISK+MB_DEFBUTTON1+MB_APPLMODAL); Exit; end; Excel.Visible := false; Excel.WorkBooks.Open(xlsFilename); try iRow := BeginRow; iCol := BeginCol; while trim(Excel.WorkSheets[1].Cells[iRow,iCol].value) <> '' do begin with ADOQuery1 do begin Append; Fields[0].AsString := trim(Excel.WorkSheets[1].Cells[iRow,iCol].value); Fields[1].AsString := trim(Excel.WorkSheets[1].Cells[iRow,iCol+1].value); iRow := iRow + 1; end; end; Excel.Quit; ADOQuery1.UpdateStatus ; except Application.MessageBox('导入数据出错', '提示信息', MB_OK+MB_ICONASTERISK+MB_DEFBUTTON1+MB_APPLMODAL); Excel.Quit; end; MessageBox(GetActiveWindow(), '数据导入成功', '提示信息', MB_OK + MB_ICONWARNING); end; end. 报错:adoquery1 cannot perform this operation on a closed dataset 是导入ADOquery1,本窗口 是不能有dbgrid1 的.导入ADOquery1,再存入表再显示吧. 你的数据集打开了吗?要用数据集的Append。数据集状态错误! 写入另一个表ADODataSet1.Close; //导入ADODataSet1.CommandText:='select * from stuinfo'; // ADODataSet1.Open;ADODataSet1.DisableControls;try ADOQuery1.First; while not (ADOQuery1.Eof) do begin ADODataSet1.Insert; ADODataSet1.FieldByName('学号').AsString:=trim(ADOQuery1.fields[0].AsString); ADODataSet1.FieldByName('系名').AsString:=trim(ADOQuery1.fields[1].AsString); ADODataSet1.FieldByName('专业名称').AsString:=trim(ADOQuery1.fields[2].AsString); ADODataSet1.FieldByName('班级名称').AsString:=trim(ADOQuery1.fields[3].AsString); ADODataSet1.FieldByName('姓名').AsString:=trim(ADOQuery1.fields[4].AsString); ADODataSet1.FieldByName('性别').AsString:=trim(ADOQuery1.fields[5].AsString); ADODataSet1.FieldByName('省份').AsString:=trim(ADOQuery1.fields[6].AsString); ADODataSet1.FieldByName('地区').AsString:=trim(ADOQuery1.fields[7].AsString); ADODataSet1.FieldByName('出生日期').AsString:=trim(ADOQuery1.fields[8].Value); ADODataSet1.FieldByName('民族').AsString:=trim(ADOQuery1.fields[9].AsString); ADODataSet1.FieldByName('党团员').AsString:=trim(ADOQuery1.fields[10].AsString); ADODataSet1.FieldByName('家庭地址').AsString:=trim(ADOQuery1.fields[11].AsString); //ADODataSet1.FieldByName('字段).AsFloat:=ADOQuery1.fields[5].AsFloat; ADOQuery1.Next; end; ADODataSet1.Post; Application.MessageBox('数据导入已完成!', '提示', MB_ICONINFORMATION); edit1.Text:=''; finally ADODataSet1.EnableControls;END;ADODataSet1.Close; 我上面的代码有什么错误,最近做一个小工具,以前没用过delphi,在线等啊 在未打开的数据集上不能进行类似操作——append为什么不直接写到dataset中呢? 存储过程参数问题 关于dxDBGrid中生成的列属性里FieldName里的值是如何生成的? 对板材的优化切割谁能给我一个提示 如何查看打印机的队列是否快满了! 对消息及窗口函数的理解 如何win2000屏蔽任务管理器~~~~~~~~~~~~在线等待 Tsavedialog控件把波形音频流存为文件的问题!! 通讯难题,望大家给个思路! delphi有没有这样的函数? 请教高手!?! 关于panel 透明的问题。。。 TDataSource
繁一点但可以实现
procedure TForm4.SpeedButton1Click(Sender: TObject); var x:string;
begin
OpenDialog1.Execute;
edit1.Text:=opendialog1.FileName;
x:=COPY(edit1.Text,length(trim(edit1.Text))-3,4);//指定excel路径
if X='.xls' then
begin
with ADOquery1 do
begin
Active:=false;
ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source='+edit1.Text+';Mode=Share Deny None;Extended Properties=Excel 8.0;Jet OLEDB:System database="";Jet OLEDB:Registry Path="";';
ConnectionString:=ConnectionString+'Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=35;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;';
ConnectionString:=ConnectionString+' OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don#39t Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False';
Close;
SQL.Clear;
SQL.Add('select * from [Sheet1$]');
ExecSQL;
Open;
end;
end;
end;
我的代码报错.unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, DBGrids, StdCtrls, DB, ADODB,comobj,
OleServer;type
TForm1 = class(TForm)
editexcelname: TEdit;
Label1: TLabel;
BtnSelExcel: TButton;
BtnExcelIn: TButton;
GroupBox1: TGroupBox;
DBGExcel: TDBGrid;
odSelExcel: TOpenDialog;
adoquery1: TADOQuery;
ADOConnection1: TADOConnection;
DataSource1: TDataSource;
procedure BtnSelExcelClick(Sender: TObject);
procedure BtnExcelInClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.BtnSelExcelClick(Sender: TObject);
begin
odSelExcel.Title := '请选择要导入的Excel文件';
odSelExcel.Filter := 'Excel(*.xls)|*.xls';
if odSelExcel.Execute then
begin
editexcelname.Text := odSelExcel.FileName;
end
else
Application.MessageBox('请选择一个Excel文件','选择一个文件',MB_OK);
end;procedure TForm1.BtnExcelInClick(Sender: TObject);
const
BeginRow = 2; BeginCol = 1;
var
Excel: OleVariant;
iRow,iCol : integer;
xlsFilename: string;
begin
if (trim(editexcelname.Text) = '') then
begin
MessageBox(GetActiveWindow(), '请选择正确的excel路径', '错误提示信息',MB_OK +MB_ICONWARNING);
exit;
end;
xlsFilename := trim(editexcelname.Text);
try
Excel := CreateOLEObject('Excel.Application');
except
Application.MessageBox('excel没有安装', '提示信息', MB_OK+MB_ICONASTERISK+MB_DEFBUTTON1+MB_APPLMODAL);
Exit;
end;
Excel.Visible := false;
Excel.WorkBooks.Open(xlsFilename);
try
iRow := BeginRow;
iCol := BeginCol; while trim(Excel.WorkSheets[1].Cells[iRow,iCol].value) <> '' do begin
with ADOQuery1 do begin
Append;
Fields[0].AsString := trim(Excel.WorkSheets[1].Cells[iRow,iCol].value);
Fields[1].AsString := trim(Excel.WorkSheets[1].Cells[iRow,iCol+1].value);
iRow := iRow + 1;
end;
end;
Excel.Quit;
ADOQuery1.UpdateStatus ;
except
Application.MessageBox('导入数据出错', '提示信息', MB_OK+MB_ICONASTERISK+MB_DEFBUTTON1+MB_APPLMODAL);
Excel.Quit;
end;
MessageBox(GetActiveWindow(), '数据导入成功', '提示信息', MB_OK +
MB_ICONWARNING);
end; end.
ADODataSet1.Close; //导入
ADODataSet1.CommandText:='select * from stuinfo'; //
ADODataSet1.Open;
ADODataSet1.DisableControls;
try
ADOQuery1.First;
while not (ADOQuery1.Eof) do
begin
ADODataSet1.Insert;
ADODataSet1.FieldByName('学号').AsString:=trim(ADOQuery1.fields[0].AsString);
ADODataSet1.FieldByName('系名').AsString:=trim(ADOQuery1.fields[1].AsString);
ADODataSet1.FieldByName('专业名称').AsString:=trim(ADOQuery1.fields[2].AsString);
ADODataSet1.FieldByName('班级名称').AsString:=trim(ADOQuery1.fields[3].AsString);
ADODataSet1.FieldByName('姓名').AsString:=trim(ADOQuery1.fields[4].AsString);
ADODataSet1.FieldByName('性别').AsString:=trim(ADOQuery1.fields[5].AsString);
ADODataSet1.FieldByName('省份').AsString:=trim(ADOQuery1.fields[6].AsString);
ADODataSet1.FieldByName('地区').AsString:=trim(ADOQuery1.fields[7].AsString);
ADODataSet1.FieldByName('出生日期').AsString:=trim(ADOQuery1.fields[8].Value);
ADODataSet1.FieldByName('民族').AsString:=trim(ADOQuery1.fields[9].AsString);
ADODataSet1.FieldByName('党团员').AsString:=trim(ADOQuery1.fields[10].AsString);
ADODataSet1.FieldByName('家庭地址').AsString:=trim(ADOQuery1.fields[11].AsString);
//ADODataSet1.FieldByName('字段).AsFloat:=ADOQuery1.fields[5].AsFloat;
ADOQuery1.Next;
end;
ADODataSet1.Post;
Application.MessageBox('数据导入已完成!', '提示', MB_ICONINFORMATION);
edit1.Text:='';
finally
ADODataSet1.EnableControls;
END;
ADODataSet1.Close;
在未打开的数据集上不能进行类似操作——append为什么不直接写到dataset中呢?