AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Stack Überlauf fehler
Thema durchsuchen
Ansicht
Themen-Optionen

Stack Überlauf fehler

Ein Thema von Drumbo · begonnen am 1. Dez 2013 · letzter Beitrag vom 3. Dez 2013
Antwort Antwort
Seite 1 von 2  1 2      
Drumbo

Registriert seit: 18. Okt 2013
22 Beiträge
 
#1

AW: Stack Überlauf fehler

  Alt 2. Dez 2013, 05:46
Morgen und danke für die Antworten.

Ja war bisschen schlampig implementiert. Ja hab auch das onDataChange Ereignis gemeint. Sorry für die ungenauigkeit, kommt nicht mehr vor.


Zu der Logik bzw. Notwendigkeit des mehrmaligen Durchlaufen dieser Datenbank:

Ich habe verschieden Geräte bzw. Reparaturen denen ich verschiedene Ersatzteile hinzufügen möchte aber auch löschen. Desweiteren kann man innerhalb dieses Forms zu anderen Geräten bzw. Reparaturaufträgen scrollen. Ich hatte halt die Idee die Knöpfe immer dann zu zeichenen (bzw. löschen) wenn sich was ändert. Ich könnte jetzt auch alle Eventualitäten und möglichen Triggerzeitpunkte raussuchen und dort dann überprüfen ob die Knöpfe gezeichnet werden müssen oder nicht. Fände es aber beim OnDataChange besser.
Das mit dem Rekursiven aufruf leuchtet ein.
Hab jetzt eine Wartemarke erstellt und blocke den Zugriff während die Datenbank durchlaufen wird.

Danke für die schnelle und gute Hilfe.
Zur Komplettierung hier nochmal der ordentliche Code
Delphi-Quellcode:
procedure TAuftrag_form.BestellbtnCreate();
var
i:integer;
begin
  busy :=true;

   Ersatzteil_Dataset.First;
while not Ersatzteil_Dataset.Eof do
  begin
    if Ersatzteil_DatasetBestellt.Value then
    begin
      DBAdvGrid4.RemoveButton(7,DBAdvGrid4.Row);
    end else
    begin
      DBAdvGrid4.AddButton(7,DBAdvGrid4.Row,50,15,'Bestellen',TCellHAlign(2),TCellVAlign(2));
    end;
     Ersatzteil_Dataset.Next;
  end;

  busy:=false;

end;
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#2

AW: Stack Überlauf fehler

  Alt 2. Dez 2013, 06:22
Ah, die Buttons sind in jeder Zeile des Ersatzteil-Grids...
So kann man das auch lösen. So wie Persau das gelöst hat, ist es aber einfacher.

Also: Dein Ersatzteil-Grid und dadrunter/drüber/neben ein (1!) Button 'btBestellen'.

Im OnDataChange-Ereignis des ErsatzTeil-Datasets dann:
Delphi-Quellcode:
Procedure TMyForm.ErsartTeilSourceDataChange(Sender: TObject; Field: TField);
Begin
  if Field=nil then
    btBestellen.Enabled := Not Ersatzteil_DatasetBestellt.AsBoolean;
End;
Fertig.
Wenn Field=nil, dann wird die Zeile gewechselt. Der Button verändert seinen Status also genau dann, wenn eine neue Zeile im Grid ausgewählt wird und ist ausgegraut, wenn man das Teil nicht bestellen kann (weil schon bestellt) und normal, also drückbar, wenn nicht.

Die Tatsache, das ein Ersatzteil schon bestellt ist, visualisierst Du entweder, indem Du die Spalte 'Bestellt' als Checkbox anzeigst, oder aber, indem Du die ganze Zeile einfärbst (z.B. grün=bestellt). Das spart Platz, denn die Information 'bestellt' erkennt man nun direkt an der Farbe.
  Mit Zitat antworten Zitat
Drumbo

Registriert seit: 18. Okt 2013
22 Beiträge
 
#3

AW: Stack Überlauf fehler

  Alt 2. Dez 2013, 09:06
Wollte die Tatsache das das Ersatzteil bestellt ist eigentlich dadurch visualisieren das der Button verschwindet. Sprich man bestellt und der Button geht weg. An sich funktioniert das mit der while auch ganz gut. Hab halt nun das Problem, dass ich durch die Schleife immer an den letzten Datensatz springe. Das wiederum ist schön und gut wenn ich aus dem Grid rausbleibe und die Datasource quasi nicht veränder. TU ich dies jedoch zeigt das Grid mir nur noch unvollständige Ergebnisse an. Das liegt daran, dass ich den Datenbank Zeiger ja verschiebe und damit dann das OnDataChange auslöse. Jetzt stell ich mir die Frage ob es hilft, wenn ich in meiner bestellbtncreate procedure den aktuellen Zeiger Speicher und nachher zurück setze? Könnt ihr mir das sagen bzw. Wie Kriege ich den überhaupt gespeichert?
@ Furtbichler: überprüft deine procedur immer den aktuell geänderten Datensatz oder wie geht das
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.666 Beiträge
 
Delphi 12 Athens
 
#4

AW: Stack Überlauf fehler

  Alt 2. Dez 2013, 09:18
Ich habe es zwar nicht ganz verstanden, aber den aktuellen Datensatzzeiger kannst Du Dir mit Delphi-Referenz durchsuchenGetBookmark merken und mit Delphi-Referenz durchsuchenGotoBookmark wieder dorthin zurückkehren, sofern es sich nicht um eine unidirektionale Datenmenge handelt.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#5

AW: Stack Überlauf fehler

  Alt 2. Dez 2013, 12:34
Wollte die Tatsache das das Ersatzteil bestellt ist eigentlich dadurch visualisieren das der Button verschwindet. Sprich man bestellt und der Button geht weg.
....
An sich funktioniert das mit der while auch ganz gut. Hab halt nun das Problem, dass ich durch die Schleife immer an den letzten Datensatz springe. Das wiederum ist schön und gut wenn ich aus dem Grid rausbleibe und die Datasource quasi nicht veränder. TU ich dies jedoch zeigt das Grid mir nur noch unvollständige Ergebnisse an. Das liegt daran, dass ich den Datenbank Zeiger ja verschiebe und damit dann das OnDataChange auslöse. Jetzt stell ich mir die Frage ob es hilft, wenn ich in meiner bestellbtncreate procedure den aktuellen Zeiger Speicher und nachher zurück setze? Könnt ihr mir das sagen bzw. Wie Kriege ich den überhaupt gespeichert?
Ich würde das im Prinzip so lösen, daß eine Bestellung (Update / Insert ..) an die Db geschickt wird und mit einem anschließenden Select werden die (hoffentlich) geänderten Daten zurück geholt.
Die Klimmzüge auf dem Client mögen zwar schön sein, sind meiner Meinung nach nicht zuverlässig und unnötig kompliziert.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#6

AW: Stack Überlauf fehler

  Alt 2. Dez 2013, 15:24
... und mit einem anschließenden Select werden die (hoffentlich) geänderten Daten zurück geholt.
Ich weiß ja nicht, wie du das siehst, aber ich denke, daß Programme, die auf Hoffnung basieren, nicht wirklich gelungen sind
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.536 Beiträge
 
Delphi 12 Athens
 
#7

AW: Stack Überlauf fehler

  Alt 2. Dez 2013, 16:12
Ich weiß ja nicht, wie du das siehst, aber ich denke, daß Programme, die auf Hoffnung basieren, nicht wirklich gelungen sind
Wurden nicht letztes Jahr von einigen älteren Raketen die Quellcodes veröffentlicht?
Ich glaub da waren auch gewisse Kommentare enhalten, so ala "Ich hoffe das funktioniert so". (zum Glück wussten die Astronauten nichts davon)
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#8

AW: Stack Überlauf fehler

  Alt 2. Dez 2013, 16:18
Naja meine Hoffnung bezog sich auf die Verbindung Client<->DB. da steckt man ja nicht so richtig drin. GGf. könnte man die NSA ja um ein Verbundungsprotokoll bitten.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#9

AW: Stack Überlauf fehler

  Alt 2. Dez 2013, 16:34
Wurden nicht letztes Jahr von einigen älteren Raketen die Quellcodes veröffentlicht?
... und ich dachte immer, Raketen seien Hardware ... man lernt doch nie aus ...
  Mit Zitat antworten Zitat
Drumbo

Registriert seit: 18. Okt 2013
22 Beiträge
 
#10

AW: Stack Überlauf fehler

  Alt 3. Dez 2013, 14:35
Danke für die vielen Hinweise. Hab mal nen Tag Abstand von dem Problem genommen ( neue Baustellen aufgemacht ) und jetzt klappt es.
Wünsche noch einen schönen Tag
Grüße

Für die Interessierten hier noch der Code:
Aufruf durch folgende Procedure
Delphi-Quellcode:
procedure TAuftrag_form.Ersatzteil_sourceDataChange(Sender: TObject;
  Field: TField);
begin
if Auftrag_form.Active then
  begin
  if not busy then

    begin
      BestellbtnCreate();
    end;

  end;

end;
und die Bearbeitung des Grids

Delphi-Quellcode:
procedure TAuftrag_form.BestellbtnCreate();
var
i:integer;
SavePlace: TBookmark;
begin
  busy :=true;
  SavePlace:=dbadvgrid4.DataSource.DataSet.GetBookmark;

    DBAdvGrid4.DataSource.DataSet.First;
     if DBAdvGrid4.DataSource.DataSet.Eof then
  begin
    DBAdvGrid4.RemoveButton(7,1);
  end else
  begin
    while not DBAdvGrid4.DataSource.DataSet.Eof do
      begin

        if Ersatzteil_DatasetBestellt.Value then
      begin
        DBAdvGrid4.RemoveButton(7,DBAdvGrid4.Row);
      end else
      begin
        DBAdvGrid4.AddButton(7,DBAdvGrid4.Row,50,15,'Bestellen',TCellHAlign(2),TCellVAlign(2));
      end;
      DBAdvGrid4.DataSource.DataSet.Next;
  end;
  end;

  DBAdvGrid4.DataSource.DataSet.GotoBookmark(SavePlace);
  busy:=false;


end;
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 17:51 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