Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Datenmenge ist weder im Editiert noch im Einfügemodus... (https://www.delphipraxis.net/137026-datenmenge-ist-weder-im-editiert-noch-im-einfuegemodus.html)

Real-TTX 12. Jul 2009 20:36

Datenbank: Access • Version: MDAC 2.8 • Zugriff über: ADO

Datenmenge ist weder im Editiert noch im Einfügemodus...
 
Wie schon im Titel, sieht man die Fehlermeldung die bei mir erscheint nachdem 700+ Mal (in einer Schleife) meine Menge im Editiert Modus war... :(

Delphi-Quellcode:
  // Leere Ergebnismenge holen
  adoQuerySeries := DataBase.SQLExecSelect('SELECT * FROM Series');
  adoQuerySeries.Edit;

  // Serien abfragen
  arrLinks := obj.getSeriesAll;

  // Befüllen mit Serien (Name / Link)
  for i := 0 to Length(arrLinks) - 1 do
  begin
    adoQuerySeries.Append;
    adoQuerySeries['Link'] := arrLinks[i, 0];
    adoQuerySeries['Name'] := arrLinks[i, 1];
  end;
 
  // Zeigt die Anzahl an (~2300)
  ShowMessage(IntToStr(adoQuerySeries.RecordCount));

  // Daten an DB
  adoQuerySeries.Post;

  // Inhalt neu Laden der Serien (AutoWert - Rep. ID)
  adoQuerySeries := DataBase.SQLExecSelect('SELECT * FROM Series');

  // ...
  adoQuerySeasons := DataBase.SQLExecSelect('SELECT * FROM Seasons');
  adoQuerySeasons.Edit;

  x := 1;
  while adoQuerySeries.Eof = false do // IN DIESER SCHLEIFE TRITT DER FEHLER AUF <----------
  begin
    arrLinks := obj.getSeasons(adoQuerySeries['Link']);
    for i := 0 to Length(arrLinks) - 1 do
    begin
      adoQuerySeasons.Append;
      adoQuerySeasons['Link'] := arrLinks[i, 0];
      adoQuerySeasons['Name'] := arrLinks[i, 1];
      adoQuerySeasons['SerieID'] := adoQuerySeries['SerieID'];
    end;
    Memo1.Lines.Add(IntToStr(x) + ' - ' + adoQuerySeries['Name']);
    Application.ProcessMessages;
    inc(x);
    adoQuerySeasons.Post;
    adoQuerySeries.Next;
  end;

   // Inhalt neu Laden der Staffeln
  adoQuerySeasons := DataBase.SQLExecSelect('SELECT * FROM Seasons');
  adoQueryEpisodes := DataBase.SQLExecSelect('SELECT * FROM Episodes');
  adoQueryEpisodes.Edit;

  while adoQuerySeasons.Eof = false do
  begin
    arrLinks := obj.getEpisodes(adoQuerySeasons['Link']);
    for i := 0 to Length(arrLinks) - 1 do
    begin
      adoQueryEpisodes.Append;
      adoQueryEpisodes['Link'] := arrLinks[i, 0];
      adoQueryEpisodes['Name'] := arrLinks[i, 1];
      adoQueryEpisodes['SerieID'] := adoQueryEpisodes['SerieID'];
      adoQueryEpisodes['SeasonID'] := adoQueryEpisodes['SeasonID'];
    end;
    adoQueryEpisodes.Post;
    adoQuerySeasons.Next;
  end;

Leider bin ich relativ ratlos, da der Fehler sporadisch auftritt... :/

Gruß, Real-TTX

sx2008 12. Jul 2009 20:41

Re: Datenmenge ist weder im Editiert noch im Einfügemodus...
 
Nach jedem .Append muss auch ein .Post kommen:
Delphi-Quellcode:
// Befüllen mit Serien (Name / Link)
  for i := 0 to Length(arrLinks) - 1 do
  begin
    adoQuerySeries.Append;
    adoQuerySeries['Link'] := arrLinks[i, 0];
    adoQuerySeries['Name'] := arrLinks[i, 1];
    adoQuerySeries.Post; // HIER !!
  end;
 
  // Zeigt die Anzahl an (~2300)
  ShowMessage(IntToStr(adoQuerySeries.RecordCount));

  // Daten an DB
  adoQuerySeries.Post; // FALSCH

Real-TTX 12. Jul 2009 20:48

Re: Datenmenge ist weder im Editiert noch im Einfügemodus...
 
Hmm.. aber die Serien hat er Ordnungsgemäß geladen. Nur ab der zweiten Schleife (die mit einem Kommentar gekennzeichnet ist) dort tritt der Fehler auf bei 700+ ...

Aber es läuft gerade... Mal schauen :P

Dank dir ;)

haentschman 12. Jul 2009 22:10

Re: Datenmenge ist weder im Editiert noch im Einfügemodus...
 
Zitat:

Nach jedem .Append muss auch ein .Post kommen:
hmmm... ich kenn es genau anders rum. Nach einem Append ist die Datenmenge nicht mehr im EditModus. :gruebel:
Wenn ich nach einem Append (Zeos) Daten dieses Datensatzes ändern möchte muß ich Edit-->Ändern-->Post machen ansonsten würde ich beim Post besagte Meldung bekommen. Vieleicht verhällt sich Ado anders :gruebel:

bis bald...

[Edit nach Hilfe lesen :-D ]
...Kommando zurück. Mit Append bleibt der Datensatz im Edit. Ich arbeite mit AppendRecord und da wird der Eintrag schon mit Post abgeschlossen.
:gruebel: dann ist das schon komisch
[/Edit]

mashutu 13. Jul 2009 07:37

Re: Datenmenge ist weder im Editiert noch im Einfügemodus...
 
[quote="Real-TTX"]Wie schon im Titel, sieht man die Fehlermeldung die bei mir erscheint nachdem 700+ Mal (in einer Schleife) meine Menge im Editiert Modus war... :(

Delphi-Quellcode:
[...] // Inhalt neu Laden der Serien (AutoWert - Rep. ID)
  // ...
  adoQuerySeasons := DataBase.SQLExecSelect('SELECT * FROM Seasons'); // steht auf erstem Datensatz
  adoQuerySeasons.Edit;                                              // erster Datensatz Seasons im Edit-Mode

  x := 1;
  while adoQuerySeries.Eof = false do // IN DIESER SCHLEIFE TRITT DER FEHLER AUF <----------
  begin
    arrLinks := obj.getSeasons(adoQuerySeries['Link']);
    for i := 0 to Length(arrLinks) - 1 do
    begin
      adoQuerySeasons.Append;
      adoQuerySeasons['Link'] := arrLinks[i, 0];
      adoQuerySeasons['Name'] := arrLinks[i, 1];
      adoQuerySeasons['SerieID'] := adoQuerySeries['SerieID'];
    end;
    Memo1.Lines.Add(IntToStr(x) + ' - ' + adoQuerySeries['Name']);
    Application.ProcessMessages;
    inc(x);
    adoQuerySeasons.Post;                                           // Datensatz Seasons wird gespeichert
    adoQuerySeries.Next;                                            // zweiter Datensatz Series
  end;
//[...]
  end;
Es fehlt ein adoQuerySeasons.Edit; am Anfang der while-Schleife. Das Statement muss IMHO als erstes in die While-Schleife

sx2008 13. Jul 2009 08:29

Re: Datenmenge ist weder im Editiert noch im Einfügemodus...
 
Irgendwie scheint es hier Unklarheiten zu geben, wie man Edit, Insert, Append und Post verwendet.
Es gibt 3 Möglichkeiten, wie man eine Datenänderung an einem Dataset beginnt:
Edit, Insert oder Append.
Edit verändert einen bestehenden Datensatz, Insert&Append fügt einen neuen Datensatz hinzu.
Nach einer dieser 3 Methoden sollte/muss immer Post oder Cancel folgen.
Post - Änderungen übernehmen, Cancel - Änderungen verwerfen.

Was passiert nun, wenn man wiederholt immer nur Append verwendet?
Das erneute Append impliziert intern automatisch ein Post,
aber sauber ist das natürlich nicht.
Es muss so sein, wie ich in Beitrag #2 geschrieben habe.

Zwischen Insert und Append gibt es übrigens einen kleinen Unterschied:
Append fügt die Daten am Ende an, Insert dazwischen.
Insert benötigt dafür mehr Aufwand und ist langsamer als Append.
Daher ist Append innerhalb von Schleifen vorzuziehen.
Für die Daten spielt es keine Rolle, ob Insert oder Append verwendet wurde.
Wird die Datenmenge geschlossen und neu geöffnet hängt die Reihenfolge der Datensätze
eh nur vom Primärschlüssel oder sonstiger Sortierklausel (ORDER BY) ab.

Real-TTX 13. Jul 2009 13:37

Re: Datenmenge ist weder im Editiert noch im Einfügemodus...
 
Nun habe ich ein neues Problem...

Und zwar ein Zitat aus meiner IDE :
Code:
Erste Gelegenheit für Exception bei $7C80BEF7. Exception-Klasse EOleException mit Meldung 'Der Datenprovider oder ein anderer Dienst gab den Status E_FAIL zurück'. Prozess Project1.exe (1540)
Erste Gelegenheit für Exception bei $7C80BEF7. Exception-Klasse EDatabaseError mit Meldung 'Der Datenprovider oder ein anderer Dienst gab den Status E_FAIL zurück'. Prozess Project1.exe (1540)
Tritt an folgender Stelle auf (in der Schleife):

Delphi-Quellcode:
  while adoQuerySeasons.Eof = false do
  begin
    arrLinks := obj.getEpisodes(adoQuerySeasons['Link']);
    for i := 0 to Length(arrLinks) - 1 do
    begin
      adoQueryEpisodes.Append;
      adoQueryEpisodes['Link'] := arrLinks[i, 1];
      adoQueryEpisodes['Name'] := arrLinks[i, 0];
      adoQueryEpisodes['SerieID'] := adoQuerySeasons['SerieID'];
      adoQueryEpisodes['SeasonID'] := adoQuerySeasons['SeasonID'];
      adoQueryEpisodes.Post;
    end;
    adoQuerySeasons.Next;
  end;
Bei Google kann man auch keine genauen Informationen finden, das einzige was ich gefunden habe ist : http://support.microsoft.com/kb/235053

Und das sollte nicht zutreffen... :)

Gibt es da einen Grund für das E_FAIL oder kann es noch etwas anderes aussagen?

Gruß, Real-TTX

PS: Danke für die super Unterstützung :)

[EDIT]Anmerkung : Das Problem tritt erst bei mehr als 500 Durchläufen auf....[/EDIT]

Real-TTX 13. Jul 2009 15:36

Re: Datenmenge ist weder im Editiert noch im Einfügemodus...
 
So wie ich die Datensätze hinzufüge kann keine SQL-Injection auftreten, oder ? Kann es an irgentwelchen Zeichen oder ähnlichem liegen?

Gruß, Real-TTX

hoika 13. Jul 2009 17:07

Re: Datenmenge ist weder im Editiert noch im Einfügemodus...
 
Hallo,

Zitat:

Tritt an folgender Stelle auf (in der Schleife):
In welcher Zeile, wie sind die übergebenen Daten.

Ich würde eh nicht mit Append/Post arbeiten.

Hier bietet sich doch die direkte Arbeit mit SQL ala

Delphi-Quellcode:
adoQueryEpisodes.SQL:= 'Insert Into ' xxx
und prepared Queries an.


Ich schätze, eines der adoQueryEpisodes['XXX'] bekommt einen ungültigen Wert übergeben.

Ausserdem würde ich statt

Delphi-Quellcode:
for XXX do
begin
  adoQueryEpisodes['SerieID'] := adoQuerySeasons['SerieID'];
end;
Delphi-Quellcode:
var
  iSerieID: Integer;
begin
  iSerieID := adoQuerySeasons['SerieID'];

  for XXX do
  begin
    adoQueryEpisodes['SerieID'] := iSerieID;
  end;
usw. schreiben.

Dann kann man zumindestens das ganze mal anständig debuggen.


und zum Schluss.
Dein Code
Delphi-Quellcode:
adoQuerySeasons := DataBase.SQLExecSelect('SELECT * FROM Seasons'); // steht auf erstem Datensatz
adoQuerySeasons.Edit;
Was soll das Edit hier machen ? Das kann komplett weg.


Ich denke, das mit dem 500+ kommt einfach davon, dass ADO hier
mehrfach eine Edit "startet", sich das merkt und irgendwann was internes überläuft.


Zeige doch mal den Code, um zu sehen, was du bisher schon geändert hast.


Heiko

Real-TTX 13. Jul 2009 18:36

Re: Datenmenge ist weder im Editiert noch im Einfügemodus...
 
EDIT: Doppelpost, Sorry

Real-TTX 13. Jul 2009 18:37

Re: Datenmenge ist weder im Editiert noch im Einfügemodus...
 
Naja... Ich mach das über Edit und Post. Damit ich mir sämtliche Parameter sparen kann und es über das DataSet sehr komfortabel ist. Finde ich zumindest :) Und bei einem SQL Statement ohne Parameter... wäre das nur Murks....

Die ID Kann nicht leer sein... Das ist ein AutoWert von Access. Eine Replikations-ID.

Hier wäre der Code :

Delphi-Quellcode:

  // Leeres Dataset auslesen (Serien)
  adoQuerySeries := DataBase.SQLExecSelect('SELECT * FROM Series');
  adoQuerySeries.Edit;

  // Serien abfragen
  arrLinks := obj.getSeriesAll;

  // Dataset (Serien) befüllen
  for i := 0 to Length(arrLinks) - 1 do
  begin
    adoQuerySeries.Append;
    adoQuerySeries['Link'] := arrLinks[i, 0];
    adoQuerySeries['Name'] := arrLinks[i, 1];
    adoQuerySeries.Post;
  end;

  // Inhalt neu laden (Serien) für den AutoWert
  adoQuerySeries := DataBase.SQLExecSelect('SELECT * FROM Series');

  // Leeres Dataset auslesen (Staffeln)
  adoQuerySeasons := DataBase.SQLExecSelect('SELECT * FROM Seasons');
  adoQuerySeasons.Edit;

  // Dataset (Staffeln) befüllen
  while adoQuerySeries.Eof = false do
  begin
    arrLinks := obj.getSeasons(adoQuerySeries['Link']);
    for i := 0 to Length(arrLinks) - 1 do
    begin
      adoQuerySeasons.Append;
      adoQuerySeasons['Link'] := arrLinks[i, 0];
      adoQuerySeasons['Name'] := arrLinks[i, 1];
      adoQuerySeasons['SerieID'] := adoQuerySeries['SerieID'];
      adoQuerySeasons.Post;
    end;
    adoQuerySeries.Next;
  end;

  // Inhalt neu laden (Staffeln) für den AutoWert
  adoQuerySeasons := DataBase.SQLExecSelect('SELECT * FROM Seasons');

  // Leeres Dataset auslesen (Folgen)
  adoQueryEpisodes := DataBase.SQLExecSelect('SELECT * FROM Episodes');
  adoQueryEpisodes.Edit;

  // Dataset (Episoden) befüllen
  while adoQuerySeasons.Eof = false do                         // <-------- In dieser Stelle tritt der Fehler auf....
  begin
    arrLinks := obj.getEpisodes(adoQuerySeasons['Link']);
    for i := 0 to Length(arrLinks) - 1 do
    begin
      adoQueryEpisodes.Append;
      adoQueryEpisodes['Link'] := arrLinks[i, 1];
      adoQueryEpisodes['Name'] := arrLinks[i, 0];
      adoQueryEpisodes['SerieID'] := adoQuerySeasons['SerieID'];
      adoQueryEpisodes['SeasonID'] := adoQuerySeasons['SeasonID'];
      adoQueryEpisodes.Post;
    end;
    adoQuerySeasons.Next;
  end;
Gruß, Real-TTX

hoika 13. Jul 2009 18:54

Re: Datenmenge ist weder im Editiert noch im Einfügemodus...
 
Hallo,

nun gut, aber warum schreibst du

Delphi-Quellcode:
adoQuerySeries.Edit;

// Serien abfragen
arrLinks := obj.getSeriesAll;

// Dataset (Serien) befüllen
for i := 0 to Length(arrLinks) - 1 do
begin
  adoQuerySeries.Append;
Das adoQuerySeries.Edit ist nicht nur überflüssig,
sondern vielleicht die Ursache.

Ausserdem würde ich gern wissen, was genau obj.getSeriesAll macht
und vor allem ob adoQuerySeries dort verwendet wird.
Oder ist das was lokales internes ?


Das Edit/Append/Post hast du übrigens an 3 Stellen.
Also kommentier die 3 Edit mal aus.


Heiko

PS:
Zitat:

und es über das DataSet sehr komfortabel ist
Prepared Queries kennst du ?

Real-TTX 13. Jul 2009 20:21

Re: Datenmenge ist weder im Editiert noch im Einfügemodus...
 
Es lag so wie es aussieht wirklich an dem Edit. Das Edit ist ja nur für jeden Datensatz... Bin etwas durcheinander gekommen. Wie sx2008 schon gesgat hat, gab es da ein bisschen durcheinander.... Um deine Fragen noch zu beantworten :

Zitat:

Zitat von hoika
Hallo,

Ausserdem würde ich gern wissen, was genau obj.getSeriesAll macht
und vor allem ob adoQuerySeries dort verwendet wird.
Oder ist das was lokales internes ?

obj.getSeriesAll --> Ruft von einer bestimmten Quelle sämtliche Serien ab (Link und Name der Serie) in ein 2 Dim. Array (Array of Array[0..1] of string)

Danke euch...

Gruß, Real-TTX

Real-TTX 13. Jul 2009 20:24

Re: Datenmenge ist weder im Editiert noch im Einfügemodus...
 
Musste gerade feststellen das der Fehler wieder auftritt nun aber nach 23778 durchläufen :/ Aber wieder sporadisch... :(

An einem Überlauf kann es demnach wohl nicht liegen.... :(


Gruß, Real-TTX

hoika 14. Jul 2009 06:52

Re: Datenmenge ist weder im Editiert noch im Einfügemodus...
 
Hallo,

hast du denn alle 3 Edits rausgenommen ?
Poste noch mal den aktuellen Code
und die Fehlerstelle.

Ich benutze nie Append/Post bei Queries
(habe allerdings Firebird unter BDE/FIBPlus).

Stelle es doch testweise mal um SQL.Text:= XXX


Heiko

Real-TTX 14. Jul 2009 16:00

Re: Datenmenge ist weder im Editiert noch im Einfügemodus...
 
Wenn ich die 3 Edits rausnehme. Kommt eine Fehlermeldung : "Datensatz ist nicht im Einfüge oder Editier Modus..." Mein Aktueller Code :

Delphi-Quellcode:
  // Leeres Dataset auslesen (Serien)
  adoQuerySeries := DataBase.SQLExecSelect('SELECT * FROM Series');

  // Serien abfragen
  arrLinks := obj.getSeriesAll;

  // Dataset (Serien) befüllen
  for i := 0 to Length(arrLinks) - 1 do
  begin
    adoQuerySeries.Edit;
    adoQuerySeries.Append;
    adoQuerySeries['Link'] := arrLinks[i, 0];
    adoQuerySeries['Name'] := arrLinks[i, 1];
    adoQuerySeries.Post;
  end;

  // Inhalt neu laden (Serien) für den AutoWert
  adoQuerySeries := DataBase.SQLExecSelect('SELECT * FROM Series');

  // Leeres Dataset auslesen (Staffeln)
  adoQuerySeasons := DataBase.SQLExecSelect('SELECT * FROM Seasons');

  // Dataset (Staffeln) befüllen
  while adoQuerySeries.Eof = false do
  begin
    arrLinks := obj.getSeasons(adoQuerySeries['Link']);
    for i := 0 to Length(arrLinks) - 1 do
    begin
      adoQuerySeasons.Edit;
      adoQuerySeasons.Append;
      adoQuerySeasons['Link'] := arrLinks[i, 0];
      adoQuerySeasons['Name'] := arrLinks[i, 1];
      adoQuerySeasons['SerieID'] := adoQuerySeries['SerieID'];
      adoQuerySeasons.Post;
    end;
    adoQuerySeries.Next;
  end;

  // Inhalt neu laden (Staffeln) für den AutoWert
  adoQuerySeasons := DataBase.SQLExecSelect('SELECT * FROM Seasons');

  // Leeres Dataset auslesen (Folgen)
  adoQueryEpisodes := DataBase.SQLExecSelect('SELECT * FROM Episodes');

  // Dataset (Episoden) befüllen
  while adoQuerySeasons.Eof = false do // <--- HIER TRITT DER FEHLER AUF in dieser WHILE... Wo genau kann ich nicht feststellen :O
  begin
    arrLinks := obj.getEpisodes(adoQuerySeasons['Link']);
    for i := 0 to Length(arrLinks) - 1 do
    begin
      adoQueryEpisodes.Edit;
      adoQueryEpisodes.Append;
      adoQueryEpisodes['Link'] := arrLinks[i, 1];
      adoQueryEpisodes['Name'] := arrLinks[i, 0];
      adoQueryEpisodes['SerieID'] := adoQuerySeasons['SerieID'];
      adoQueryEpisodes['SeasonID'] := adoQuerySeasons['SeasonID'];
      adoQueryEpisodes.Post;
    end;
    adoQuerySeasons.Next;
  end;

Danke.. Ich bin wirklich sehr ratlos :( Und komme irgendwie nicht weiter... :/

hoika 14. Jul 2009 16:19

Re: Datenmenge ist weder im Editiert noch im Einfügemodus...
 
Hallo,

also ich sage nur, verabschiede dich von diesem Append/Post.
Ersetze es durch normales SQL.

Ist dir das zu aufwendig, weil es mit dem Append so schön ist,
musst du mit dem Fehler leben ...

Ich habe hier Code, da laufen zigtausend Insert/Update/Deletes
(OK, das sind Unit-Tests).


Heiko

Real-TTX 14. Jul 2009 16:42

Re: Datenmenge ist weder im Editiert noch im Einfügemodus...
 
Wie erstelle ich am leichtesten Parameter mit dem ADODataSet ?

Gruß, Real-TTX

shmia 14. Jul 2009 16:47

Re: Datenmenge ist weder im Editiert noch im Einfügemodus...
 
Delphi-Quellcode:
...
  adoQuerySeries.Edit;
  adoQuerySeries.Append;
Das ist doch Käse; entweder Edit ODER Append, aber nicht Beides hintereinander.

>>also ich sage nur, verabschiede dich von diesem Append/Post.
>>Ersetze es durch normales SQL.
Normales SQL (also INSERT INTO ...) ist ungefähr 5 Mal schneller und braucht weniger lokale Resourcen.
Allerdings ist der Programmieraufwand zum Daten einfügen etwa doppelt so hoch
und man muss auf angenehme Dinge (z.B. Event Before Post) verzichten.
Mit dem Einfügen über's Dataset ist man manchmal auch flexibler:
Delphi-Quellcode:
Dataset.Append; // neuer Datensatz
Dataset['IdUser'] := ....
Dataset['LastChange'] := Now;
// kein Problem, wenn das Feld Geburtstag in der Tabelle fehlen sollte
if Assigned(dataset.FindField('Geburtstag'))) then
   Dataset['Geburtstag'] := ...
Dataset.Post;
Es kommt halt immer auf den Zweck an.
Wenn die Anzahl der Records * Anzahl der Felder > 5000 *) dann würde ich aus Geschwindigkeitsgründen
INSERTS verwenden; darunter mag ich eher das einfache Handling von Datasets.
*) Bitte nur als ganz groben Anhaltspunkt nehmen.

Christian Seehase 14. Jul 2009 17:15

Re: Datenmenge ist weder im Editiert noch im Einfügemodus...
 
Moin,

unabhängig von allem anderen:
Man vergleicht boolsche-Ausdrücke nicht auf True oder False
Delphi-Quellcode:
while adoQuerySeries.Eof = false do
sondern
Delphi-Quellcode:
while not adoQuerySeries.Eof do
In der Windows-API wird <> 0 als true und = 0 als false verstanden, die Konstanten sind aber mit 1 (true) bzw. 0 (false) belegt.
Spielt hier für das Problem wohl keine Rolle, ist aber "unschön" ;-)

Real-TTX 14. Jul 2009 20:52

Re: Datenmenge ist weder im Editiert noch im Einfügemodus...
 
Zitat:

Zitat von Christian Seehase
Moin,
unabhängig von allem anderen:
Man vergleicht boolsche-Ausdrücke nicht auf True oder False
Delphi-Quellcode:
while adoQuerySeries.Eof = false do
sondern
Delphi-Quellcode:
while not adoQuerySeries.Eof do
In der Windows-API wird <> 0 als true und = 0 als false verstanden, die Konstanten sind aber mit 1 (true) bzw. 0 (false) belegt.
Spielt hier für das Problem wohl keine Rolle, ist aber "unschön" ;-)

Hmm.. Da würde ich dir im Prinzip schon zustimmen.

Aber da adoQuerySeries.Eof ja eine in Delphi deklarierte Eigenschaft ist, die als boolean deklariert ist. Kann es ja nur true oder false sein (0 || 1) und nicht (0 || !0) ...

Oder sehe ich das nicht falsch ? Und wenn ich schreibe :
Delphi-Quellcode:
while adoQuerySeries.Eof = false do
ist das meiner Ansicht nach leserlicher als wie wenn ich schreibe
Delphi-Quellcode:
while not adoQuerySeries.Eof do
Vermutlich bin ich aber auf dem Holzweg? :O

mkinzler 14. Jul 2009 20:54

Re: Datenmenge ist weder im Editiert noch im Einfügemodus...
 
Finde ich nicht. zudem sollte man einen Boolean-Wert nie auf false prüfen

Real-TTX 14. Jul 2009 20:59

Re: Datenmenge ist weder im Editiert noch im Einfügemodus...
 
@shmia : Ahh.. Ich verstehe. Ich habe das ganze mal rausgenommen. Ich war da doch ein stück verwirrt. Und gibt es eine leichte Möglichkeit mit Parametern zu arbeiten mit DataSets ? Oder geht das nur mit dem ADO.Command ? Und dann Create Paramter und Append? Das habe ich damit nämlich schonmal versucht. Aber nicht wirklich mit erfolg :(

Gruß, Real-TTX

PS: Danke nochmal an alle :)

Real-TTX 14. Jul 2009 21:01

Re: Datenmenge ist weder im Editiert noch im Einfügemodus...
 
Zitat:

Zitat von mkinzler
Finde ich nicht. zudem sollte man einen Boolean-Wert nie auf false prüfen

Wieso ist das so ? Ich dachte in Delphi deklarierte Werte mit Boolean können ganz einfach nur true oder false haben ?

So irrt man sicht.. Da war ich mir bis vor 5min noch richtig Sicher... und jetzt ist wieder alles zu nichte :( ...

Aber danke für die berichtigung.... :)

Gruß, Real-TTX

mkinzler 14. Jul 2009 21:04

Re: Datenmenge ist weder im Editiert noch im Einfügemodus...
 
Zitat:

Ich dachte in Delphi deklarierte Werte mit Boolean können ganz einfach nur true oder false haben ?
Ja aber welche Werte für True unf False verwendet werden ist nicht sicher.
Siehe auch #20

hoika 14. Jul 2009 21:11

Re: Datenmenge ist weder im Editiert noch im Einfügemodus...
 
Juhuuuuuu,

kommt mal wieder zum Thema zurück ;)

also mit einer Query sind Parameter doch schön einfach.
Ich spare mir mal ein Bsp., du gibt es hier genug.


Heiko

guke 14. Jul 2009 22:03

Re: Datenmenge ist weder im Editiert noch im Einfügemodus...
 
gelöscht


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