![]() |
Excel Tabelle
Hallo leute!
Kann man eine Excel-Tabelle in einer DBGrid Komponente darstellen und auch neue Datensätze hinzufügen? Wenn ja, WIE????? |
hmm,
ist Excel eine Datenbank (DB) ?
=> Nein ist es nicht => DB(Datnbank)Grid ist also nicht mittel der Wahl DBGrind ist nichts weiter als ein Abbild der Datenbank die du ansprichst, da kannste auch keine Zeilen hinzufügen, du kannst sie in die DAtenbank einfügen und dadurch erscheinen sie im Grid aber du kannst dieses DBGrid ansich nicht bearbeiten. Macht auch keienn richtigen Sinn ist. Was du suchst ist ein Stringgrid, da kannste deine Exceldaten rein bosseln. Ich mach das via OLE. |
Re: Excel Tabelle
Wenn du das via OLE machst, dann muss aber Excel auf dem PC installiert sein!
|
hmm,
joo.
|
Re: Excel Tabelle
Hi,
Ich wollte das Thema noch einmal kurz aufgreifen. Die Datenbanken bestehen doch auch aus Tabellen. Und es gibt doch auch ODBC und ADO Treiber. Die ADO Connection kann man mit einer Excel Tabelle verbinden. Nur wie gehts dann weiter? ciao |
Re: Excel Tabelle
Klar geht das !
Wenn Du über ODBC kommst, etwa so - die Connection mit ODBC Datenquelle verbinden - und dann ADO-Table-Objekt einfügen - Table mit Connection verbinden (Property Connection) -- oder auch ADO-Query - Tabelle auswählen (Bereichsname in Excel) und dann, wie immer via DataSource die Steuerelemente anbinden. Niels P.S. Wo kannst Du denn bei den ADO Komponenten Excel als Datenquelle einstellen. Bei mir geht das nur via ODBC. |
Re: Excel Tabelle
...wie wäre es mit einlesen über eine .csv datei? wäre doch viel einfacher!
|
Re: Excel Tabelle
@nieurig
Als Datenquelle kann man eine Excel Tabelle angeben und als Provider ODBC. @ibp Ich möchte aber in der Tabelle schreiben und lesen ohne ich Excel immer zu importieren und exportieren. Und CSV ist keine Herausforderung :-D |
Re: Excel Tabelle
Hi Quake,
dann leg mal los. Via ODBC klappt es auf dem oben beschriebenen Weg, mit dem einzigen Manko, dass vorher eine ODBC Datenquelle eingerichtet werden muss. Dafür gibt es aber sicherlich auch dynamische Lösungen im Netz. Viel Erfolg Niels |
Re: Excel Tabelle
Hallöle,
*altenthreadhochwühl* :mrgreen: Hoffe, ich bin hier auch richtig. :roll: 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: ![]() 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: ![]() Das Anhängen und Editieren von Datensätzen klappt tadellos .... ![]() .... jedoch das Löschen selbiger nicht. Dann kommt dieser Fehler: ![]() Zu guter Letzt noch der Code der Unit:
Delphi-Quellcode:
Ich MUSS nicht zwingend Excel als Datenbank benutzen, aber ich MÖCHTE es aus bestimmten Gründen gerne.
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. Andreas |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz