Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Bug oder Feature ? MySQL + Zeos + viele Datensätze (https://www.delphipraxis.net/47708-bug-oder-feature-mysql-zeos-viele-datensaetze.html)

Ulf346C 15. Jun 2005 08:29

Datenbank: MySQL • Version: 4.1 • Zugriff über: SQL Server

Bug oder Feature ? MySQL + Zeos + viele Datensätze
 
So langsam geht es voran mit meinen ersten Gehversuchen mit MySQL und der ZEOS-Komponenten.

Nun bin ich dabei meine Probedaten zu konvertieren (dBase->MySQL) um etwas zum Arbeiten zu haben.

Nun habe ich das erste Problem:
Das konvertieren klappt soweit. Ich kann einen einzelnen Datensatz ohne weitees kopieren. Auch Hundert, geht alles.
Lasse ich jedoch die ganze Tabelle durchlaufen (211.000 Datensätze) ist meine SQL-Zieltabelle leer :shock:

Es funktioniert nur, wenn ich vorher einen Datensatz einzeln kopiert oder einen leeren Datensatz in der Zieltabelle erzeugt hatte.
So richtig Zweck der Übung kann das ja aber auch nicht sein, ich muß mich ja darauf verlassen daß meine Daten auf jeden Fall ankommen, auch in einer frisch erzeugten Tabelle.

Hier mal en Codeausschnitt:

Delphi-Quellcode:
procedure TForm1.DataKopiere(Sender: TObject);
var i, n: integer;
    ok: boolean;
    t: string;
    t1, t2: tFieldType;
begin
  n := table1.FieldCount -1; // Table 1 ist die dBase Quelltabelle
  zQuery1.append;
  zQuery1.edit;
  for i := 0 to n do begin
    t := table1.fields[i].fieldname;
    t1 := table1.fieldbyname(t).DataType;
    t2 := zQuery1.fieldbyname(t).DataType;
    ok := true;
    if table1.fieldbyname(t).isNull then ok := false;
    if ok and (t1 = ftInteger) then begin
      zQuery1.fieldbyname(t).asInteger := table1.fieldbyname(t).asInteger;
      ok := false;
    end;
    if ok and (t1 = ftLargeInt) then begin
      zQuery1.fieldbyname(t).asInteger := table1.fieldbyname(t).asInteger;
      ok := false;
    end;

    //... usw. für die vierschiendene Zelltypen

  end;
  zQuery1.Post;
  table1.next;
end;
Hat jemand eine Idee ?

Ulf

Stevie 15. Jun 2005 08:44

Re: Bug oder Feature ? MySQL + Zeos + viele Datensätze
 
Hi Ulf,

du machst das viel zu umständlich.
Wenn man schon diese schicken Variants hat,
dann sollte man sie auch benutzen ;-)

Delphi-Quellcode:
procedure TForm1.DataKopieren(Sender: TObject);
var
  i: Integer;
begin
  Table1.First;
  while not Table1.Eof do
  begin
    ZQuery1.Append; // Append versetzt schon in den Edit-Mode!
    for i := 0 to Pred(Table1.FieldCount) do
      ZQuery1.FieldValues[i] := Table1.FieldValues[i];
    ZQuery1.Post;
    Table1.Next;
  end;
end;

Ulf346C 15. Jun 2005 10:05

Re: Bug oder Feature ? MySQL + Zeos + viele Datensätze
 
...die Variants kommen noch; stehen im "augeblendeten" Quelltext.
Übliche Typen kopiere ich lieber "richtig", wegen der Geschwindigkeit. Die DB hat mehrere Mio. Datensätze.

Zum eigentlichen Problem, ich habe das ein wenig eingegrenzt.

Programmstart

SELECT * FROM auftrag

alle Datensätze sind da, ich kann auch kopieren

DELETE FROM auftrag

alle Datensätze sind gelöscht, Tabelle ist wieder da
ich kann sie aber nicht mehr bearbeiten.

erst nach Programm Neustart geht das wieder

:roll:

ltiefland 15. Jun 2005 10:21

Re: Bug oder Feature ? MySQL + Zeos + viele Datensätze
 
Setze mal testweise ein COMMIT nach dem DELETE ab. Vielleicht hilft das!

Ulf346C 15. Jun 2005 11:25

Re: Bug oder Feature ? MySQL + Zeos + viele Datensätze
 
ich habe alle DB-Objekte gelöscht und neu angelegt. Jetzt geht es. Wer weiß, was ich bei meiner Probiererei alles verstellt hatte ;)

Allerdings wenn ich versuche die DB-Verbindung zu kappen (zConnection1.disconnect) bekomme ich immer noch einen Laufzeitfehler, obwohl alle Tabellen geschlossen sind.

Ulf346C 15. Jun 2005 12:25

Re: Bug oder Feature ? MySQL + Zeos + viele Datensätze
 
wieder dasselbe :gruebel:

sobald ich irgendwelche SQL-Kommando manuell absetze, geht das Einfügen nicht mehr... erst nach Programm-Neustart geht es wieder.

Stevie 15. Jun 2005 12:29

Re: Bug oder Feature ? MySQL + Zeos + viele Datensätze
 
Hi Ulf,

häng mal bitte dein Testprojekt an und evtl die Tabellen-Definition.
So ist das alles nur ein Rumgerate, was beiden Seiten nichts hilft.

MfG
Stevie

Ulf346C 15. Jun 2005 14:13

Re: Bug oder Feature ? MySQL + Zeos + viele Datensätze
 
oh, ich glaube ich hab's.

Man muß wohl unterscheiden zwischen Abfragen und Kommandos.
In meinem zwischenzeitlich entstandenen Codesalat wurde die SQL Statements mal mit .open und mal mit .ExecSql ausgeführt. Je nach Reihenfolge brachte das den SQL-Prozessor wohl aus dem Tritt, so daß ich zwar eine Ergebnismenge auf dem Bildschirm hatte aber nicht mehr bearbeiten konnte.
Ich habe das jetzt sauber getrennt und es scheint zu funktionieren.

Stevie 15. Jun 2005 14:20

Re: Bug oder Feature ? MySQL + Zeos + viele Datensätze
 
Zitat:

Zitat von Ulf346C
Man muß wohl unterscheiden zwischen Abfragen und Kommandos.

So ist es! ;-) (Abfragen mit Open und Kommandos mit ExecSQL)


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:49 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