Delphi-PRAXiS
Seite 1 von 2  1 2      

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;


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:29 Uhr.
Seite 1 von 2  1 2      

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