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

解决方案 »

  1.   

    这是高手们给的从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.   

    是导入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);
    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.
      

  3.   

    报错:adoquery1 cannot perform this operation on a closed dataset
      

  4.   

    是导入ADOquery1,本窗口 是不能有dbgrid1 的.导入ADOquery1,再存入表再显示吧.
      

  5.   

    你的数据集打开了吗?要用数据集的Append。数据集状态错误!
      

  6.   

    写入另一个表
    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;     
      

  7.   

    我上面的代码有什么错误,最近做一个小工具,以前没用过delphi,在线等啊
      

  8.   


    在未打开的数据集上不能进行类似操作——append为什么不直接写到dataset中呢?