Thema: Delphi Excel Tabelle

Einzelnen Beitrag anzeigen

Andreas_R

Registriert seit: 5. Apr 2005
Ort: Bremen
14 Beiträge
 
Delphi 2005 Professional
 
#10

Re: Excel Tabelle

  Alt 3. Aug 2006, 23:09
Hallöle,

*altenthreadhochwühl*
Hoffe, ich bin hier auch richtig.

Dank eurer erstklassigen Hilfestellung in der DP ist es auch mir Anfänger mal gelungen, eine Excel-Arbeitsmappe (auch mit mehreren Tabellen) via ADO zu connecten und in einem DBGrid darzustellen.
So sieht das Formular aus:

http://www.northern-germany.de/dp/Bild1.png

Nun möchte ich gerne meiner Excel-Tabelle eine weitere Spalte (also Datenfeld) spendieren, und zwar mit dem SQL-Kommando ALTER TABLE. Das geht aber nicht, ich bekomme diese Fehlermeldung:

http://www.northern-germany.de/dp/Bild2.png

Das Anhängen und Editieren von Datensätzen klappt tadellos ....

http://www.northern-germany.de/dp/Bild3.png

.... jedoch das Löschen selbiger nicht. Dann kommt dieser Fehler:

http://www.northern-germany.de/dp/Bild4.png

Zu guter Letzt noch der Code der Unit:

Delphi-Quellcode:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, OleServer, Excel2000, DB, DBTables, Grids, DBGrids, StdCtrls, ADODB,
  ExtCtrls, DBCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    OpenDialog1: TOpenDialog;
    ADOConnection1: TADOConnection;
    DBGrid1: TDBGrid;
    DataSource1: TDataSource;
    ListBox1: TListBox;
    ADODataSet1: TADODataSet;
    DBNavigator1: TDBNavigator;
    Button2: TButton;
    ADOCommand1: TADOCommand;
    Button3: TButton;
    Edit1: TEdit;
    procedure Button3Click(Sender: TObject);
    procedure FormResize(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure ListBox1Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  Tabellenname: string;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var i: integer;
begin
     if ADOConnection1.Connected then ADOConnection1.Close;
     if OpenDialog1.Execute then
     begin
          ADOConnection1.ConnectionString :=
             'Provider=Microsoft.Jet.OLEDB.4.0;' +
             'Data Source='+ OpenDialog1.FileName +';' +
             'Extended Properties="Excel 8.0;HDR=Yes";' +
             'Persist Security Info=False';
          ADOConnection1.Open;
          if ADOConnection1.Connected then
          begin
               ADOConnection1.GetTableNames(ListBox1.Items, False);
               Tabellenname:= ListBox1.Items.Strings[0];
               ADODataSet1.CommandText:= 'SELECT * FROM [' + Tabellenname + ']';
               ADODataSet1.Open;
               for i:= 0 to ADODataSet1.FieldCount - 1 do
               begin
                    DBGrid1.Columns[i].Width:=
                      DBGrid1.Width div ADODataSet1.FieldCount;
               end;
          end;
     end;
end;

procedure TForm1.ListBox1Click(Sender: TObject);
var i: integer;
begin
     if ADODataSet1.Active then ADODataSet1.Close;
     Tabellenname:= ListBox1.Items.Strings[ListBox1.ItemIndex];
     ADODataSet1.CommandText:= 'SELECT * FROM [' + Tabellenname + ']';
     ADODataSet1.Open;
     for i:= 0 to ADODataSet1.FieldCount - 1 do
     begin
          DBGrid1.Columns[i].Width:= DBGrid1.Width div ADODataSet1.FieldCount;
     end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
     with ADODataSet1 do
     begin
          if Active and (State in [dsEdit]) then Close;
          Close;
     end;
     ListBox1.Items.Clear;
end;

procedure TForm1.FormResize(Sender: TObject);
var i: integer;
begin
     if ADODataSet1.Active then
        for i:= 0 to ADODataSet1.FieldCount - 1 do
        begin
             DBGrid1.Columns[i].Width:= DBGrid1.Width div
                                        ADODataSet1.FieldCount;
        end;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
     if ADODataSet1.Active and (Edit1.Text <> '') then
     begin
          ADOCommand1.CommandText:= 'ALTER TABLE [' + Tabellenname +
                                    '] ADD ' + Edit1.Text +
                                    ' char(20)';
          ADOCommand1.Execute;
     end;
end;

end.
Ich MUSS nicht zwingend Excel als Datenbank benutzen, aber ich MÖCHTE es aus bestimmten Gründen gerne.

Andreas
Win XP Pro, Delphi 2005 Professional, Intel P4 3,2 GHz, 1 GB RAM, ATi Sapphire Radeon X800XT PE (16 Pipelines), eigenes Fahrrad.
  Mit Zitat antworten Zitat