Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Daten aus Excel auslesen und in MySQL einfügen (https://www.delphipraxis.net/51991-daten-aus-excel-auslesen-und-mysql-einfuegen.html)

LeahCim 22. Aug 2005 12:13

Datenbank: MySQL • Zugriff über: MyDAC

Daten aus Excel auslesen und in MySQL einfügen
 
Hallo,

ich hoffe ihr könnt mir wiedereinmal helfen.

Ich brauche ein kleines Prog um Daten aus einer Excel Tabelle auszulesen und in MySQL einzulesen...naja, besser währe es wenn das eine Funktion währe...

So, was noch dazu kommt, ist das die Tabellen wo die Daten her kommen nicht immer gleich sind...also währe ein Grid zum auswählen auch nicht schlecht...hat jemand sowas schonmal gemacht?

Währe auch schön wenn ihr es mir so erklären könnt, dass es auch ein dummer versteht....bin anfänger :gruebel:

Danke im vorraus!

MFG

der Leah...

yankee 22. Aug 2005 12:17

Re: Daten aus Excel auslesen und in MySQL einfügen
 
ich kann dir da das Programm Bei Google suchenNavicat emphelen. Ist leider kein Freware, aber man bekommt eine 30 tage umsonst version.

Anonsten kannst du in Excel auch die Daten ins csv speichern und das kannst du dann ganz bequem mit php oder delphi oder was auch immer auswerten.

LeahCim 23. Aug 2005 07:38

Re: Daten aus Excel auslesen und in MySQL einfügen
 
Zitat:

Zitat von yankee
ich kann dir da das Programm Bei Google suchenNavicat emphelen. Ist leider kein Freware, aber man bekommt eine 30 tage umsonst version.

Anonsten kannst du in Excel auch die Daten ins csv speichern und das kannst du dann ganz bequem mit php oder delphi oder was auch immer auswerten.

Gibt es denn keine andere Möglichkeit?

jensw_2000 23. Aug 2005 07:50

Re: Daten aus Excel auslesen und in MySQL einfügen
 
Ja,

nimm eine TADOConnection und eine TADOTable.
Damit kannst du jede Excel Arbeitsmappe öffnen, ohne das Excel installiert sein muss.
Ado liest die Excel Arbeitsbereichsseiten sauber ein und interprätiert sogar berechnete Felder (Formeln) richtig.


Öffnen kannst du die XLS so ..
Delphi-Quellcode:
 
      // Opendialog öffnen und AdoConnection verbinden

      Adoconn.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;' + 
        'Provider=Microsoft.Jet.OLEDB.4.0; ' + 
        'Data Source=' + Opendialog.Filename + ';' + 
        'Extended Properties=Excel 8.0; ' + //<< immer Excel 8.0 !!!
        'Persist Security Info=False';
      Adoconn.open;
     
      // Eine Combobox (xlsWorksheets mit den Arbeitsbereichsseiten der Excel Arbeitsmappe füllen

      xlsWorksheets.Enabled := Adoconn.Connected;
      if Adoconn.Connected then
      begin
        Adoconn.GetTableNames(xlsWorksheets.Items, true);
      end;

      // Wenn es mindestens eine Arbeitsbereichsseite gibt > Auswählen und Öffnen
     
      ...
       User die gewünschte Arbeitsbereichsseite wählen lassen
       ggf. automatisch xlsWorksheets.Items[0] verwenden, falls es nur eine Arbeitsbereichsseite gibt
      ...
 
      if xlsWorksheets.items.count =0 then
      begin
        Showmessage('In der gewählten Arbeitsmappe sind keine Arbeitsbereichsseiten verfügbar');
        exit;
      end
      else begin
         With AdoTableXLS do
         begin
           close;
           Connection:=Adoconn;
           tablename:=xlsWorksheets.items[xlsWorksheets.itemindex];
           open;
         end;
      end;

Jelly 23. Aug 2005 08:01

Re: Daten aus Excel auslesen und in MySQL einfügen
 
Zitat:

Zitat von jensw_2000
nimm eine TADOConnection und eine TADOTable.

Genau das wollt ich auch vorschlagen, aber Jens war schneller.

Zum Einlesen deiner Tabellen musst du nur in Excel deine Namensbereiche definieren, inklusive Spaltenköpfe.

jensw_2000 23. Aug 2005 08:40

Re: Daten aus Excel auslesen und in MySQL einfügen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Genau das wollt ich auch vorschlagen, aber Jens war schneller.
Endlich mal.. :mrgreen:

Einen Punkt habe ich aber überlesen...

Zitat:

So, was noch dazu kommt, ist das die Tabellen wo die Daten her kommen nicht immer gleich sind...
Die Felddefinition in deiner MySQL-DB sind vermutlich relativ konstant und vor allem bekannt.

Baue dir am besten einfach einen kleinen "FieldMapper" (s.Screenshot) mit dem du die passenden Felder aus der Excel Tabelle zu deinem MySQL Feldern zuordnen kannst.

Dann kannst du die Daten flexibel (am Besten über eine SP) in die Datenbank importieren.

Prinzipiell kannst du so dynamisch die, zu deiner MyTable passenden, Excel Spaltennamen aus dem FieldMapper auslesen und nutzen ...

Delphi-Quellcode:
MyTable.FieldByName('Wohnort').value:=
  xlsTable.FieldByname(Fieldmapper.Values[FieldMapper.IndexOf('fWohnort')]).value;
Delphi-Quellcode:
MySP.ParametersByName('Wohnort'):=
  xlsTable.FieldByname(Fieldmapper.Values[FieldMapper.IndexOf('fWohnort')]).value;

LeahCim 23. Aug 2005 14:42

Re: Daten aus Excel auslesen und in MySQL einfügen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Danke für die vielen Tips...bin aber im moment ein bisschen überfordert...

erstmal will ich die Daten sauper auslesen, und das ganze in einem Grid darstellen...soweit bin ich bis jetzt...:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var name : string;
begin
box1.text := '';
box1.Enabled := false;
AdoConnection1.Connected := false;
name := 'none';
OpenDialog1.FileName := 'none';
OpenDialog1.Execute;
if RightStr(OpenDialog1.FileName, 3) = 'xls' Then
begin
name := OpenDialog1.FileName;
If name = 'none' Then
begin
end
else begin
AdoConnection1.ConnectionString:= 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+ name +';Extended Properties=Excel 8.0;Persist Security Info=False';
AdoConnection1.Open;
Box1.Enabled := true;
Box1.Text := 'Bitte auswählen';
AdoConnection1.GetTableNames(Box1.Items);
Button2.Visible := true;
end;
end
else
begin
Button2.Visible := false;
Showmessage('Es muss eine XLS-Datei ausgewählt werden!');
end;
if Box1.items.count = 1 then
begin
box1.Text := box1.Items.Text;
end
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
if box1.Text = 'Bitte auswählen' then
begin
Showmessage('Es muss eine Tabelle ausgewählt werden!')
end
else
begin
AdoTable1.Connection := AdoConnection1;
AdoTable1.TableName := Box1.items[Box1.itemindex];
AdoTable1.Active := true;
end;
end;
Wobei Box1 ein Dropdown feld ist...der rest müsste sich von alleine erklären...das funktioniert auch bis jetzt...leider mach er sobald ich deb ADOTable1 auf true setze nen Syntaxfehler...ich häng die exe mal an...

jensw_2000 23. Aug 2005 14:49

Re: Daten aus Excel auslesen und in MySQL einfügen
 
Korrigierter Beitrag ...

Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
begin
if box1.Text = 'Bitte auswählen' then
begin
Showmessage('Es muss eine Tabelle ausgewählt werden!')
end
else
begin
AdoTable1.Connection := AdoConnection1;
// Der Name enthält ein $. Damit der Tabellenname trotz Sonderzeichnen
// akzeptiert werden kann, muss er in eckigen Klammern stehen
AdoTable1.TableName := '['+Box1.items[Box1.itemindex]+']'; // <<<<
AdoTable1.Active := true;
end;
end;
Bei einer TAdoTable kann man das auch irgendwie anders hinbiegen.
Leider kann ich da grade nicht reinschauen. (denke das war TableDirect := true ...)

LeahCim 23. Aug 2005 14:59

Re: Daten aus Excel auslesen und in MySQL einfügen
 
öhm... :gruebel: wie? einfach die Zeile hinzufügen? Dann klappt garnichts mehr...

jensw_2000 23. Aug 2005 15:03

Re: Daten aus Excel auslesen und in MySQL einfügen
 
entschuldige bitte...
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
begin
if box1.Text = 'Bitte auswählen' then
begin
Showmessage('Es muss eine Tabelle ausgewählt werden!')
end
else
begin
AdoTable1.Connection := AdoConnection1;
AdoTable1.TableName := '['+Box1.items[Box1.itemindex]+']'; //<<<<<<<<<<<<<<<< Da meine ich ...
AdoTable1.Active := true;
end;
end;

LeahCim 23. Aug 2005 15:09

Re: Daten aus Excel auslesen und in MySQL einfügen
 
Super :wink: thanks!

Fehler verschwunden...jetzt kann ich mich ans Grid machen!

MFG

der Leah... :-D

BW19 15. Sep 2005 08:17

Re: Daten aus Excel auslesen und in MySQL einfügen
 
if RightStr(OpenDialog1.FileName, 3) = 'xls' Then :roll:

Also Hallo erst ma :P

ich komm nich so klar mit RightStr.... bin auch noch ziehmlich neu... Azubi mit sogut wie keiner programmier erfahrung (LEIDER) und dat im 2 lehrjahr *schähm* :(

Aber mein Problem ist ich sollte mir nen progrämmchen schreiben das Xls dateien in DB (Paradox) umwandelt... viele versuche es über Datenbankoberfläche zumachen sind gescheitert sprich... xls in dbf speichern und dat dann in DB umzuwandeln....leider gehen da daten verloren... ä,ö,ü, wird nich übernommen mehr zeilige zellen in der Exel datei werden abgeschnitten (was mir ja alles einleuchtet) aber nu muss ich es anders probieren bin hier auch schon etwas weiter gekommen aber noch nich ans ziel... hoffe ihr seid so nett und helft mir nen bissel... mit nem kleinen Lösungsansatz wer sehr zufrieden und kann meinem ausbilder auch was zeigen wenn er vom "urlaub" wieder da is...


Bin ich schon auf dem richtigen weg wenn ich ADOTable benutz?
wie speicher ich Xls in db? gibts da einfache schnelle lösung?


viele grüße ;)

und respekt vor sonem Formum is richtig interesante sache!!

jensw_2000 18. Sep 2005 19:00

Re: Daten aus Excel auslesen und in MySQL einfügen
 
Hi BW19,

es wäre schön wenn du für deine Frage einen neuen Thread aufmachst.
Sonst wird es hier sehr unübersichtlich. :warn:

Vorab schon mal in aller Kürze... ich würde es vermutlich so lösen

1. XLS mit einer TADOTable öffnen (s.o.)

2. zur Laufzeit eine TTable erstellen (als Paradox-Tabelle)

3. die Fielddefs der AdoTable in einer Schleife durchlaufen, dabei für jedes einzelne Feld ...

3.1 den Feldtyp (String, Datum, Integer, Float ...) ermitteln
3.2 den Feldnamen ermitteln
3.3 Zusatzinformationen auslesen (MaxLength usw.)
3.4 in den Fielddefs der TTable ein Feld mit dem o.A. Eigenschaften erzeugen

4. die Paradox-Tabelle mit {TTable}.CreateTable erzeugen

5. jetzt hast du eine Paradox-Tabelle, welche die selbe Struktur wir die XLS haben sollte
5.1 die Datensätze der TADOTable mit "While not {TAdoTable}.EOF do" durchlaufen und jeden Datensatz ...
5.2 mit {TTable}.AppendRecord in die Paradox-Tabelle einfügen

Nachdem das sauber funktioniert musst du dein Programm noch etwas universell gestalten.
z.B.
- enthält die erste Zeile der XLS den Spaltentitel oder Daten ?
- welche Paradox Version
- gibt es ein Feld, das u.U. als Primary Key verwendet werden kann
- ...


Schöne Grüße,
Jens

:hi:
[edit]
Beinahe vergessen ...
Willkommen in der DP :dp: :cheers:
[/edit]

Sausemann 12. Sep 2006 13:50

Re: Daten aus Excel auslesen und in MySQL einfügen
 
Hi,
sitze gerade an etwas ähnlichem ... Struktur soweit gleich.

Zitat:

Nachdem das sauber funktioniert musst du dein Programm noch etwas universell gestalten.
z.B.
- enthält die erste Zeile der XLS den Spaltentitel oder Daten ?
Da liegt mein Problem ...
ich kann die erste zeile garnicht auslesen ... beginnt immer in zeile 2

Delphi-Quellcode:
ADOtable.First;
ADOtable.Open;
While not ADOtable.eof do
 begin
  ...
 end
Weiß jemand Rat? :roll:

Sausemann 13. Sep 2006 07:57

Re: Daten aus Excel auslesen und in MySQL einfügen
 
Zitat:

Zitat von Sausemann
Hi,
sitze gerade an etwas ähnlichem ... Struktur soweit gleich.

Zitat:

Nachdem das sauber funktioniert musst du dein Programm noch etwas universell gestalten.
z.B.
- enthält die erste Zeile der XLS den Spaltentitel oder Daten ?
Da liegt mein Problem ...
ich kann die erste zeile garnicht auslesen ... beginnt immer in zeile 2

Delphi-Quellcode:
ADOtable.First;
ADOtable.Open;
While not ADOtable.eof do
 begin
  ...
 end
Weiß jemand Rat? :roll:

Habe das Problem gefunden: :-D

ADO geht auch bei Excel davon aus, daß die erste Zeile die Feldnamen enthält und keinen Datensatz ... Daher kann man die erste Zeile nur mit GetFieldnames auslesen! :zwinker:


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:10 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