Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Daten von einer Datasource importieren (https://www.delphipraxis.net/114353-daten-von-einer-datasource-importieren.html)

MaxMara 23. Mai 2008 21:41

Datenbank: MySQL • Version: 5 • Zugriff über: ZeosLib

Daten von einer Datasource importieren
 
Guten Abend!

Ich grüble schon länger über folgendes Problem:
Über eine ADOConnection und ADOQuery fülle ich eine Datasource mit Daten aus einer Excel-Datei.
Diese Daten will ich in eine MySQL-DB schreiben.
Habe schon im Netz gesucht, aber nur sündteure Komponenten dafür entdeckt, die viel zu viel können.

Weiss jemand von euch eine halbwegs simple Lösung für mein Problem?

Danke und Grüße
Christian

EDIT: Den Beitrag ms+access+ado+einfuegen+mehrerer+datensaetze.html habe ich gelesen. Ist aber glaub ich bei mir ein wenig anders. Zumindest hoffe ich das :)

sx2008 23. Mai 2008 22:52

Re: Daten von einer Datasource importieren
 
Also auf http://dev.mysql.com/downloads/conne...5.1.html#win32 gibt es kostenlose ODBC-Treiber und ich hab auch schon OLE-DB Provider (=direkte Treiber für ADO) gesehen.
meine Empfehlung: ODBC-Treiber runterladen einen System-DSN in der Systemsteuerung (bzw. Verwaltung) -> ODBC Datenquellen einrichten.
Dann eine ADO-Connection (Microsoft OLE-DB Provider for ODBC Drivers) einrichten und den Namen der System-DSN auswählen.
In deinem Programm hat du dann eine ADO-Connection zu Excel und eine ADO-Connection zu MySQL (unter Verwendung des ODBC-Treibers).
Eine ADOQuery geht auf das Excel Worksheet, die andere Query geht auf eine MySQL Tabelle - na ja, und dann einfach die Daten umschaufeln.

MaxMara 23. Mai 2008 23:02

Re: Daten von einer Datasource importieren
 
Zitat:

Zitat von sx2008
Eine ADOQuery geht auf das Excel Worksheet, die andere Query geht auf eine MySQL Tabelle - na ja, und dann einfach die Daten umschaufeln.

...einfach? :)
Wie geht das? Das ist genau mein Problem :)

mkinzler 23. Mai 2008 23:05

Re: Daten von einer Datasource importieren
 
ADO unterstützt Cross-DB Queries

MaxMara 23. Mai 2008 23:17

Re: Daten von einer Datasource importieren
 
Zitat:

Zitat von mkinzler
ADO unterstützt Cross-DB Queries

Hilft mir jetzt auch nicht viel weiter. Vielleicht bin ich ja schon zu müde, aber nicht mal mit Google finde ich halbwegs sinnvolle Ergebnisse...
Ich glaub ich schlaf mal darüber :)

sx2008 23. Mai 2008 23:27

Re: Daten von einer Datasource importieren
 
Delphi-Quellcode:
rc := 1;  // integer Zähler
QrySource.Open; // Excel Daten
QryDst.Open;  // MySQL-Tabelle
while not QrySource.Eof do
begin
  QryDst.Append; // neuer, leerer Datensatz
  QryDst['IdAdresse'] := rc; // Primärschlüssel
  QryDst['Name'] := QrySource.Fields[0].Value; // Feld kopieren
  QryDst['EMail'] := QrySource.Fields[1].Value;
  ...
  QryDst.Post; // Daten abschicken
  QrySource.Next;  // nächste Excel Reihe
  Inc(rc);
end;

MaxMara 24. Mai 2008 09:54

Re: Daten von einer Datasource importieren
 
Danke sx2008!
Das verschafft mir Klarheit :)
Hab es jetzt mal so gemacht, da ich ja eine TZConnection zu MySQL habe und die ADOConnection zu Excel:
Delphi-Quellcode:
  ZQuery1.Open;  // MySQL-Tabelle
  while not ADOQuery1.Eof do
  begin
    ZQuery1.Append; // neuer, leerer Datensatz
    ZQuery1.FieldByName('content_nr').AsString := ADOQuery1.Fields[0].Value; // Feld kopieren
    ZQuery1.FieldByName('content_sprache').AsString := ADOQuery1.Fields[1].Value;
    ZQuery1.FieldByName('content_text').AsString := ADOQuery1.Fields[2].Value;
    ZQuery1.FieldByName('content_datetime').AsString := 'now()';
    ZQuery1.Post; // Daten abschicken
    ADOQuery1.Next;  // nächste Excel Reihe
  end;
Das Problem jetzt ist: Er meint immer SQL-Query wäre leer...

Eine zusätzliches Problem kommt noch dazu:
im MySQL-Table können schon Daten drin sein, die in der Excel-Datei auch stehen.
Leider gibt es in der DB keinen unique-key, da 2 Felder gemeinsam sozusagen unique sein müssen.
In meinem Fall wäre das die 'content_nr' zusammen mit 'content_sprache'. Wenn in der Exceltabelle die gleiche Kombination vorkommt, dann soll dieser Datensatz übersprungen werden.
Fragt man das am besten über IF..THEN ab, oder geht das eleganter?

DeddyH 24. Mai 2008 11:00

Re: Daten von einer Datasource importieren
 
Du öffnest die MySQL-Abfrage und fragst dann Excel ab?

MaxMara 24. Mai 2008 11:17

Re: Daten von einer Datasource importieren
 
Zitat:

Zitat von DeddyH
Du öffnest die MySQL-Abfrage und fragst dann Excel ab?

Ne. Sorry. Copy/Paste hat mir die erste Zeile geschluckt...
Delphi-Quellcode:
AdoQuery1.Open;
Habe es analog zum Beispiel von sx2008 gemacht.

MaxMara 24. Mai 2008 12:22

Re: Daten von einer Datasource importieren
 
Hmm...habe es jetzt mit einem ZTable statt dem ZQuery versucht. Es funktioniert jetzt, aber warum das mit dem ZQuery nicht funktioniert ist mir trotzdem ein Rätsel.

Danke an euch.

Grüße
Christian


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:38 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz