AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Datenmenge ist weder im Editiert noch im Einfügemodus...

Datenmenge ist weder im Editiert noch im Einfügemodus...

Ein Thema von Real-TTX · begonnen am 12. Jul 2009 · letzter Beitrag vom 14. Jul 2009
Antwort Antwort
Seite 2 von 3     12 3   
Real-TTX

Registriert seit: 7. Mai 2008
Ort: Stuttgart / Wertheim
136 Beiträge
 
Delphi 2007 Enterprise
 
#11

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

  Alt 13. Jul 2009, 19:37
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
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.264 Beiträge
 
Delphi 10.4 Sydney
 
#12

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

  Alt 13. Jul 2009, 19:54
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 ?
Heiko
  Mit Zitat antworten Zitat
Real-TTX

Registriert seit: 7. Mai 2008
Ort: Stuttgart / Wertheim
136 Beiträge
 
Delphi 2007 Enterprise
 
#13

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

  Alt 13. Jul 2009, 21:21
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 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
  Mit Zitat antworten Zitat
Real-TTX

Registriert seit: 7. Mai 2008
Ort: Stuttgart / Wertheim
136 Beiträge
 
Delphi 2007 Enterprise
 
#14

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

  Alt 13. Jul 2009, 21:24
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
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.264 Beiträge
 
Delphi 10.4 Sydney
 
#15

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

  Alt 14. Jul 2009, 07:52
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
Heiko
  Mit Zitat antworten Zitat
Real-TTX

Registriert seit: 7. Mai 2008
Ort: Stuttgart / Wertheim
136 Beiträge
 
Delphi 2007 Enterprise
 
#16

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

  Alt 14. Jul 2009, 17:00
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... :/
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.264 Beiträge
 
Delphi 10.4 Sydney
 
#17

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

  Alt 14. Jul 2009, 17:19
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
Heiko
  Mit Zitat antworten Zitat
Real-TTX

Registriert seit: 7. Mai 2008
Ort: Stuttgart / Wertheim
136 Beiträge
 
Delphi 2007 Enterprise
 
#18

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

  Alt 14. Jul 2009, 17:42
Wie erstelle ich am leichtesten Parameter mit dem ADODataSet ?

Gruß, Real-TTX
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#19

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

  Alt 14. Jul 2009, 17:47
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.
Andreas
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.100 Beiträge
 
Delphi 11 Alexandria
 
#20

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

  Alt 14. Jul 2009, 18:15
Moin,

unabhängig von allem anderen:
Man vergleicht boolsche-Ausdrücke nicht auf True oder False
while adoQuerySeries.Eof = false do sondern
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"
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:06 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