Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi MS Access Tabelle in MySQL-Tabelle einlesen / Fehler (https://www.delphipraxis.net/166765-ms-access-tabelle-mysql-tabelle-einlesen-fehler.html)

nachtstreuner 28. Feb 2012 14:45

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;

Bernhard Geyer 28. Feb 2012 14:56

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:
      MyQueryDLS.open;
      if not MyQueryDLS.Active then MyQueryDLS.Open;
Ich würde empfehlen deinen Quellcode mal stark zu überarbeiten und formatierungstechnisch in halbwegs lesbare Form zu bringen.

p80286 28. Feb 2012 14:58

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

nachtstreuner 28. Feb 2012 15:06

AW: MS Access Tabelle in MySQL-Tabelle einlesen / Fehler
 
Hallo Bernhard,

erstmal danke für Deine Antwort.

Zitat:

Du öffnest eine Query mit Open obwohl du noch eine Nicht-Resultset-SQL-Anweisung drin hast.
Wo soll diese Anweisung sein ? Im SQL_TEXT ? Wenn Ja, müsste ich wahrscheinlich ein SQL.Clear einfügen, oder ?

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.

DeddyH 28. Feb 2012 15:12

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:

Delphi-Quellcode:
Showmessage(IntToStr(AdoTableDLS.RecordCount)+ ' DATENSÄTZE werden jetzt aus LIPPS eingelesen !');
    try
      MyQueryDLS.open;

Das müsste ja der TRUNCATE-Befehl sein, welchen Sinn soll da das Open machen? Und erst recht die Zeile danach wie von Bernhard angesprochen?

Bernhard Geyer 28. Feb 2012 15:15

AW: MS Access Tabelle in MySQL-Tabelle einlesen / Fehler
 
Zitat:

Zitat von nachtstreuner (Beitrag 1153439)
Zitat:

Du öffnest eine Query mit Open obwohl du noch eine Nicht-Resultset-SQL-Anweisung drin hast.
Wo soll diese Anweisung sein ? Im SQL_TEXT ? Wenn Ja, müsste ich wahrscheinlich ein SQL.Clear einfügen, oder ?

Wenn du ein Clear einfügst dann versuchst du eine leere SQL-Anweisung zu öffnen -> Wird in einer anderen Fehlermeldung enden.

Ansonsten hat deine Query immer noch den Wert:

Delphi-Quellcode:
MyQueryDLS.SQL.Text := SQL_TEXT;
Zitat:

Zitat von nachtstreuner (Beitrag 1153439)
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.

Beispiel:

Delphi-Quellcode:
      else
      loesch := 'N';
Gehört zu else wird aber nicht eingerückt

Delphi-Quellcode:
    finally

    end;
Mmmh.

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:
  with datam_Dixi do begin
Ist ein maximaler Quell von Fehler da statt deiner Membervariable auf einmal ein with-Variable verwendet wird.
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.

nachtstreuner 28. Feb 2012 15:27

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:
with datam_DIXI do begin
    ADOQueryLIPPS.Active := false;
end;
würde dann so aussehen:

Delphi-Quellcode:
datam_DIXI.ADOQueryLIPPS.active := false;

DeddyH 28. Feb 2012 15:29

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.

Bernhard Geyer 28. Feb 2012 15:31

AW: MS Access Tabelle in MySQL-Tabelle einlesen / Fehler
 
Zitat:

Zitat von DeddyH (Beitrag 1153455)
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.

Der Compiler ist nicht das Problem. Der weiß schon was er nehmen soll.
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 ...

DeddyH 28. Feb 2012 15:32

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 18:50 Uhr.
Seite 1 von 2  1 2      

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