![]() |
Datenbank: Access/MySQL • Version: XE • Zugriff über: ADO/MyDAC
MS Access Tabelle in MySQL-Tabelle einlesen / Fehler
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Delphi-Freunde,
mal wieder ein Problemchen. Ausgangssituation: AccessTabelle soll in MySQL-Tabelle eingelesen werden. Felddefinitionen sind vom Typ und Größe in beiden tabellen gleich. 1. MySQL Tabelle soll komplett vor dem Einlesen geleert werden. 2. Danach sollen alle Datensätze aus der Access Tabelle in die leere MySQL-Tabelle eingetragen werden. Folgender Fehler tritt auf, nachdem die MySQL-Tabelle geleert wurde und bevor die Datensätze aus Access eingelesen werden können siehe Bild im Anhang. Nachdem das Programm neu gestartet wird, MySQL-Tabelle enthält zu diesem Zeitpunkt keine Datensätze mehr, funktioniert alles reibungslos. Habe schon ein bißchen rumgebastelt mit Query.open, query.active,query.execute, hat alles nicht gebracht. Use Execute aus der Fehlermeldung hab ich schon probiert ohne Erfolg Hier mal der jetzige CODE-Schnipsel:
Delphi-Quellcode:
procedure TfrmDLS.speedLippsClick(Sender: TObject);
var SQL_TEXT : string; loesch : string; I : Integer; startzeit,endzeit : string; begin with datam_Dixi do begin myQueryDLS.Active := true; if myQueryDLS.RecordCount > 0 then begin IF MessageDlg('Achtung ! Alle ['+ IntToStr(myQueryDLS.RecordCount)+'] Datensätze werden gelöscht, danach neue '+ 'Datensätze aus Lipps eingelesen ! Sind Sie sicher ?', mtWarning, [mbOK, mbCancel], 0) = mrOK then begin loesch := 'J'; { Lösche die alten Daten aus der Tabelle tbl_dlschein } SQL_TEXT := 'TRUNCATE TABLE `tbl_dlschein`'; MyQueryDLS.SQL.Text := SQL_TEXT; MyQueryDLS.ExecSQL; end // MessageDLG else loesch := 'N'; end; //myQuery.Recordcount { lese Datensätze ein } ADOtableDLS.Open; Showmessage(IntToStr(AdoTableDLS.RecordCount)+ ' DATENSÄTZE werden jetzt aus LIPPS eingelesen !'); try MyQueryDLS.open; if not MyQueryDLS.Active then MyQueryDLS.Open; ADOTableDLS.First; Startzeit := timeToStr(now); for I := 0 to ADOTableDLS.RecordCount -1 do begin MyQueryDLS.Insert; MyQueryDLS.FieldByName('DLNR').AsInteger := ADOtableDLS.FieldByName('DLNr').AsInteger; MyQueryDLS.FieldByName('ABSENDERSACHBEARBEITER').AsString := ADOtableDLS.FieldByName('Absendersachbe').AsString; MyQueryDLS.Post; ADOTableDLs.Next; end; finally end; EndZeit := timeToStr(now); SHowmessage('Fertig'+#10#13+'STRT : ' + startzeit+#10#13+'End : '+ endzeit); MyQueryDLS.Close; AdoTableDLS.Close; end; // with end; |
AW: MS Access Tabelle in MySQL-Tabelle einlesen / Fehler
Die Fehlermeldung sagt ja schon alles. Du öffnest eine Query mit Open obwohl du noch eine Nicht-Resultset-SQL-Anweisung drin hast.
Und was soll das?
Delphi-Quellcode:
Ich würde empfehlen deinen Quellcode mal stark zu überarbeiten und formatierungstechnisch in halbwegs lesbare Form zu bringen.
MyQueryDLS.open;
if not MyQueryDLS.Active then MyQueryDLS.Open; |
AW: MS Access Tabelle in MySQL-Tabelle einlesen / Fehler
Von MySl hab ich nicht so die Ahnung, aber ich würde mich an
ach egal Bernhard war schneller Gruß K-H |
AW: MS Access Tabelle in MySQL-Tabelle einlesen / Fehler
Hallo Bernhard,
erstmal danke für Deine Antwort. Zitat:
Und noch eine Frage, was ist so schwierig zu lesen an dem Code, Einrückungen sind da, Kommentare sind eingefügt, aber ich lasse mir gerne ein Beispiel von Dir geben. Man ist ja lernfähig. |
AW: MS Access Tabelle in MySQL-Tabelle einlesen / Fehler
Wenn gelöscht wurde, was steht dann in SQL.Text von MyQueryDLS an dieser Stelle?
Zitat:
|
AW: MS Access Tabelle in MySQL-Tabelle einlesen / Fehler
Zitat:
Ansonsten hat deine Query immer noch den Wert:
Delphi-Quellcode:
MyQueryDLS.SQL.Text := SQL_TEXT;
Zitat:
Delphi-Quellcode:
Gehört zu else wird aber nicht eingerückt
else
loesch := 'N';
Delphi-Quellcode:
Mmmh.
finally
end; Aber stimmt. Du hast einrückungen. Aber dadurch das du beginn nich in eine neue Zeile legst wirds m.E. nicht schöner. Und bitt schmeiß das With raus:
Delphi-Quellcode:
Ist ein maximaler Quell von Fehler da statt deiner Membervariable auf einmal ein with-Variable verwendet wird.
with datam_Dixi do begin
Andere Programmiersprachen vermeiden das indem man den Punkt schreiben muss wenn man die with-Variable ansprechen will. Bei uns fliegt with immer raus wenn man mal Code überarbeitet. |
AW: MS Access Tabelle in MySQL-Tabelle einlesen / Fehler
Hallo bernhard,
danke für die Tips zur besseren Lesbarkeit. ich werde das Berücksichtigen. Nun zu dem With, wenn ich das with weglasse, müsste ich doch vor jedem Datensensitiven Befehl, den Datasetbezeichner anfügen, oder ? Beispiel:
Delphi-Quellcode:
würde dann so aussehen:
with datam_DIXI do begin
ADOQueryLIPPS.Active := false; end;
Delphi-Quellcode:
datam_DIXI.ADOQueryLIPPS.active := false;
|
AW: MS Access Tabelle in MySQL-Tabelle einlesen / Fehler
Genau. Das ist zwar mehr Tipparbeit, aber dafür sieht man auf den ersten Blick, was gemeint ist und noch wichtiger: der Compiler weiß es dann auch eindeutig.
|
AW: MS Access Tabelle in MySQL-Tabelle einlesen / Fehler
Zitat:
Blod ob man als Entwickler weiß was der Compiler nimmt ... Superschön ist es wenn man in der Klasse dan ein property/Methode ergänzt die es bisher nur auf höhee Eben gab - Viel spaß beim Debuggen ... |
AW: MS Access Tabelle in MySQL-Tabelle einlesen / Fehler
Deshalb schrieb ich ja "was gemeint ist". Das ist ja nicht immer das, was der Compiler dann wirklich nimmt ;)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:09 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