delphi7 将Excel中的数据导入dbgrld,在从dbgrld导入数据中.

xuyuanming1982 2009-04-27 09:46:30
delphi7 将Excel中的数据导入dbgrld,在从dbgrld导入数据中.
...全文
147 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
jason_28693 2009-04-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 xuyuanming1982 的回复:]
报错:adoquery1 cannot perform this operation on a closed dataset
[/Quote]

在未打开的数据集上不能进行类似操作——append

为什么不直接写到dataset中呢?
xuyuanming1982 2009-04-27
  • 打赏
  • 举报
回复
顶啊
zshsuming 2009-04-27
  • 打赏
  • 举报
回复
学习一下``

xuyuanming1982 2009-04-27
  • 打赏
  • 举报
回复
我上面的代码有什么错误,最近做一个小工具,以前没用过delphi,在线等啊
happybuttom 2009-04-27
  • 打赏
  • 举报
回复
这样的代码很多,可是效率高的比较少?
abcd_nonqq 2009-04-27
  • 打赏
  • 举报
回复
写入另一个表
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;

abcd_nonqq 2009-04-27
  • 打赏
  • 举报
回复
可以呀,写到另一个表就可以显示了.
xuyuanming1982 2009-04-27
  • 打赏
  • 举报
回复
打开了.
寻梦928 2009-04-27
  • 打赏
  • 举报
回复
你的数据集打开了吗?要用数据集的Append。数据集状态错误!
xuyuanming1982 2009-04-27
  • 打赏
  • 举报
回复
在别的窗口可以吗?
abcd_nonqq 2009-04-27
  • 打赏
  • 举报
回复
是导入ADOquery1,本窗口 是不能有dbgrid1 的.导入ADOquery1,再存入表再显示吧.
xuyuanming1982 2009-04-27
  • 打赏
  • 举报
回复
2楼的代码,执行的时候没反映呢?
xuyuanming1982 2009-04-27
  • 打赏
  • 举报
回复
报错:adoquery1 cannot perform this operation on a closed dataset
xuyuanming1982 2009-04-27
  • 打赏
  • 举报
回复
是导入dbgrid的吗?
我的代码报错.

unit Unit1;

interface

uses
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.
abcd_nonqq 2009-04-27
  • 打赏
  • 举报
回复
这是高手们给的从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;

2,498

社区成员

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

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