![]() |
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 ![]() |
Re: Daten von einer Datasource importieren
Also auf
![]() 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. |
Re: Daten von einer Datasource importieren
Zitat:
Wie geht das? Das ist genau mein Problem :) |
Re: Daten von einer Datasource importieren
ADO unterstützt Cross-DB Queries
|
Re: Daten von einer Datasource importieren
Zitat:
Ich glaub ich schlaf mal darüber :) |
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; |
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:
Das Problem jetzt ist: Er meint immer SQL-Query wäre leer...
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; 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? |
Re: Daten von einer Datasource importieren
Du öffnest die MySQL-Abfrage und fragst dann Excel ab?
|
Re: Daten von einer Datasource importieren
Zitat:
Delphi-Quellcode:
Habe es analog zum Beispiel von sx2008 gemacht.
AdoQuery1.Open;
|
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 08:34 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