Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Probleme beim Speichern in eine Tabelle (https://www.delphipraxis.net/197470-probleme-beim-speichern-eine-tabelle.html)

Luckner 8. Aug 2018 13:50

Datenbank: Firebird • Version: 1.5 • Zugriff über: TDataset

Probleme beim Speichern in eine Tabelle
 
Hallo,
habe folgendes Problem:
Delphi-Quellcode:
    begin
      DatamodulePlanung.IBDataSetAuftrag.Close;
      DatamodulePlanung.IBDataSetAuftrag.SelectSQL.Clear;
      DatamodulePlanung.IBDataSetAuftrag.SelectSQL.Add('select * FROM AUFTRAG where ID = ' + IntToStr(id_Auftrag));
      DatamodulePlanung.IBDataSetAuftrag.Open;
      DatamodulePlanung.IBDataSetAuftrag.Edit;

      DatamodulePlanung.IBDataSetAuftragPRODSTATUS.AsString := ComboBoxStatus.Text;
      DatamodulePlanung.IBDataSetAuftragSTATUSDATUM.Value := now;
      DatamodulePlanung.IBDataSetAuftragSTATUSANWENDER.AsString := FormAnmeldung.EditNuname.Text;

      DatamodulePlanung.IBDataSetAuftrag.Post;
      if DataModulePlanung.IBTransactionPlanung.InTransaction then DataModulePlanung.IBTransactionPlanung.Commit;


      DatamodulePlanung.IBDataSetPlanung.Close;
      DatamodulePlanung.IBDataSetPlanung.SelectSQL.Clear;
      DatamodulePlanung.IBDataSetPlanung.SelectSQL.Add('select * FROM PLANUNG where ID_AUFTRAG = ' + IntToStr(id_Planung));
      DatamodulePlanung.IBDataSetPlanung.Open;
      DatamodulePlanung.IBDataSetPlanung.Edit;

      DatamodulePlanung.IBDataSetPlanungSTATUS.AsString := ComboBoxStatus.Text;
      DatamodulePlanung.IBDataSetPlanungSTATUSDATUM.Value := now;
      DatamodulePlanung.IBDataSetPlanungSTATUSNAME.AsString := FormAnmeldung.EditNuname.Text;

      DatamodulePlanung.IBDataSetPlanung.Post;
      if DataModulePlanung.IBTransactionPlanung.InTransaction then DataModulePlanung.IBTransactionPlanung.Commit;
In die Tabelle "Auftrag" werden Änderungen eingetragen aber in die Tabelle "Planung" nicht.

Gruß, Luckner

Uwe Raabe 8. Aug 2018 13:54

AW: Probleme beim Speichern in eine Tabelle
 
Bist du sicher, daß das hier richtig ist?
Zitat:

'select * FROM PLANUNG where ID_AUFTRAG = ' + IntToStr(id_Planung)

Delphi.Narium 8. Aug 2018 14:27

AW: Probleme beim Speichern in eine Tabelle
 
Gibt es eine Fehlermeldung?

Wenn ja, welche?

Wenn es keine Fehlermeldung gibt und der gezeigte Quelltext in keiner Fehlerbehandlung gekapselt ist, dann wird eventuell ein anderer Datensatz geändert, als erwartet (siehe Uwe Raabes Hinweis).

Luckner 8. Aug 2018 14:44

AW: Probleme beim Speichern in eine Tabelle
 
Select-Anweisung ist korrekt. Habe die überprüft. Es gibt auch keinen Datensatz in der Tabelle "Planung", der diesen Eintrag trägt. Es gibt auch keine Fehlermeldung.

Uwe Raabe 8. Aug 2018 14:51

AW: Probleme beim Speichern in eine Tabelle
 
Zitat:

Zitat von Luckner (Beitrag 1410137)
Es gibt auch keinen Datensatz in der Tabelle "Planung", der diesen Eintrag trägt.

Sollte es in dem Fall dann nicht
Delphi-Quellcode:
DatamodulePlanung.IBDataSetPlanung.Append;
anstatt
Delphi-Quellcode:
DatamodulePlanung.IBDataSetPlanung.Edit;
heißen?

juergen 8. Aug 2018 14:56

AW: Probleme beim Speichern in eine Tabelle
 
Hallo,

ich würde weiterhin empfehlen mit SQL-Parametern zu arbeiten.
In etwas so:

Delphi-Quellcode:
with DatamodulePlanung.IBDataSetPlanung.Params do begin
  Clear;
   with Add do begin
    Name := 'id_Planung';
    DataType := ftInteger;
    Size := 0;
    ParamType := ptInput;
  end;
end;
Delphi-Quellcode:
DatamodulePlanung.IBDataSetPlanung.SelectSQL.Add('select * FROM PLANUNG where ID_AUFTRAG = :id_Planung');


Als ich noch keine Parameter verwendet hatte, gab es in meinem Fall auch falsche Werte eines zusammengebastelten SQL-Statement in einer Schleife.

Delphi.Narium 8. Aug 2018 15:05

AW: Probleme beim Speichern in eine Tabelle
 
Wenn es in beiden Fällen keine Fehlermeldung gibt, dann muss es auch in beiden Fällen einen entsprechenden Datensatz geben. Für gewöhnlich scheitert ein Edit auf eine leere Datenmenge und ein Post darauf erst recht.

Lass Dir bitte in beiden Fällen mal nach dem .Open, aber noch vor dem .Edit .RecNo und .RecordCount ausgeben.

Sollte in beiden Fällen jeweils 1 sein, ansonsten bekommst Du bei den Abfragen andere Ergebnisse, als Du erwartest und änderst in den Ergebnismengen jeweils den zufällig ersten Datensatz.

hoika 8. Aug 2018 15:09

AW: Probleme beim Speichern in eine Tabelle
 
Hallo,
noch mal die Frage

select * FROM PLANUNG where ID_AUFTRAG = ' + IntToStr(id_Planung)

Ist ID_AUFTRAG wirklich richtig, oder müsste es nicht ID_PLANUNG heissen.

Luckner 8. Aug 2018 15:24

AW: Probleme beim Speichern in eine Tabelle
 
Zur hoika,
select * FROM PLANUNG where ID_AUFTRAG = ' + IntToStr(id_Planung) ist korrekt. "id_Planung" ist eine Variable, die Lese ich mit 'OnCellKlick' aus in einer weiter Tabelle aus. Klar, die Variable hätte auch id-Auftrag heissen können.
Es gibt keine Meldung beim Posten. Das wundert mich ja auch, weil sonst kommt immer eine Meldung. Habe für den Eintrag: DatamodulePlanung.IBDataSetPlanungSTATUS.AsString := 'Test' eingetragen und alle Tabellen nach diesem String suchen lassen. Nichts gefunden.

Zur Uwe Raabe,
edit ist korrekt. Möchte In der Tabelle "Planung" einen Eintrag ändern.

Zu Delphi.Narium:
werde gleich testen

Luckner 8. Aug 2018 15:33

AW: Probleme beim Speichern in eine Tabelle
 
Zur Delphi.Narium:
jeweils 1.

hoika 8. Aug 2018 15:41

AW: Probleme beim Speichern in eine Tabelle
 
Hallo,
benutzt Du DatamodulePlanung.IBDataSetPlanungSTATUS.AsString auch an einer anderen Stelle?
Das sind ja persistente Felder (meine persönliche Meinung -> grauenhaft ;) ),
vielleicht ist die Zuordnung zum DataSet verlorengegangen?

Probier doch mal
DatamodulePlanung.IBDataSetPlanung.FieldByName('ST ATUS').AsString := ComboBoxStatus.Text;

Luckner 8. Aug 2018 15:53

AW: Probleme beim Speichern in eine Tabelle
 
Hallo Heiko,

auch das hat nichts gebracht. Ohne Fehlermeldung, aber nirgens ein Eintrag.

hoika 8. Aug 2018 16:07

AW: Probleme beim Speichern in eine Tabelle
 
Hallo,
vielleicht hat es was mit den Transaktionen zu tun.
Gibt es bei Dir auch einen DBMonitor?

Probier mal das hier.

Delphi-Quellcode:
if DataModulePlanung.IBTransactionPlanung.InTransaction then DataModulePlanung.IBTransactionPlanung.Commit;

DataModulePlanung.IBTransactionPlanung.StartTransaction;

DatamodulePlanung.IBDataSetPlanung.Close;

Und dann noch das hier
DatamodulePlanung.IBDataSetPlanung.SelectSQL.Add(' select * FROM PLANUNG where ID_AUFTRAG_TEST = ' + IntToStr(id_Planung));

Das müsste ja einen Fehler (Exception) erzeugen.
Kommt die Exception ?

Uwe Raabe 8. Aug 2018 16:08

AW: Probleme beim Speichern in eine Tabelle
 
Das ist mir jetzt zu hoch:
Zitat:

Zitat von Luckner (Beitrag 1410152)
Möchte In der Tabelle "Planung" einen Eintrag ändern.

Zitat:

Zitat von Luckner (Beitrag 1410137)
Es gibt auch keinen Datensatz in der Tabelle "Planung", der diesen Eintrag trägt.

:wiejetzt:

Wenn es den Eintrag nicht gibt, was willst du dann ändern? Irgendwie kann ich dir nicht folgen.

Kannst du ein kleines Beispielprogramm anhängen, das dein Problem zeigt?

hoika 8. Aug 2018 16:10

AW: Probleme beim Speichern in eine Tabelle
 
Hallo,
Zitat:

Ohne Fehlermeldung, aber nirgens ein Eintrag.
Wieso nirgens, die Änderung bezieht sich doch auf genau einen Datensatz.
Wie erkennst Du überhaupt, ob sich was geändert hat,
per IBExpert oder indem Du danach den Datensatz in Deinem Programm anzeigst?

Uwe Raabe 8. Aug 2018 16:12

AW: Probleme beim Speichern in eine Tabelle
 
Zitat:

Zitat von hoika (Beitrag 1410155)
Das sind ja persistente Felder (meine persönliche Meinung -> grauenhaft ;) ),

Verwende ich ständig und möchte ich nicht missen! Man kann soviel mehr soviel einfacher damit machen, wenn man damit umzugehen weiß. Insbesondere seit es die FieldOptions gibt.

hoika 8. Aug 2018 16:14

AW: Probleme beim Speichern in eine Tabelle
 
Hallo,
wenn ich ein VarChar-Feld vergrößere, ändert sich die Feldlänge auch in dem persistenten Feld?

hoika 8. Aug 2018 16:18

AW: Probleme beim Speichern in eine Tabelle
 
Hallo,
stimmt, er widerspricht sich.

1. edit ist korrekt. Möchte In der Tabelle "Planung" einen Eintrag ändern.

2. Es gibt auch keinen Datensatz in der Tabelle "Planung", der diesen Eintrag trägt.


Was ist denn nun korrekt?

Uwe Raabe 8. Aug 2018 16:22

AW: Probleme beim Speichern in eine Tabelle
 
Zitat:

Zitat von hoika (Beitrag 1410164)
Hallo,
wenn ich ein VarChar-Feld vergrößere, ändert sich die Feldlänge auch in dem persistenten Feld?

Wenn in FieldOptions.UpdatePersistent auf true steht, ja.

Luckner 8. Aug 2018 16:23

AW: Probleme beim Speichern in eine Tabelle
 
Zur Uwe Raabe,
In der Tabelle "Planung" steht normalerweise im Feld STATUS schon ein Eintrag. Und dem will ich ändern. Wenn ich aber über diese Routine in das STATUS-Feld den Eintrag "Test" schreiben will und das auch ohne Fehler angeblich geht, dann kann ich in allen Tabellen nach diesem Eintrag suchen lassen.

Ich benutze übrigens "Flame Robin" und komme sehr gut damit klar. Kann in den Tabellen mir alles anzeigen (Ausser BLOB-Felder) und auch jede Tabelle mit allen Funktionen erstellen.

Luckner 8. Aug 2018 16:27

AW: Probleme beim Speichern in eine Tabelle
 
Zitat:

Zitat von hoika (Beitrag 1410165)
Hallo,
stimmt, er widerspricht sich.

1. edit ist korrekt. Möchte In der Tabelle "Planung" einen Eintrag ändern.

2. Es gibt auch keinen Datensatz in der Tabelle "Planung", der diesen Eintrag trägt.


Was ist denn nun korrekt?

Zum Punkt 2. Es gibt keinen neuen Eintrag, den ich über diese Routine machen will. Also, die Routine schreibt nirgend irgend etwas rein.

Delphi.Narium 8. Aug 2018 16:32

AW: Probleme beim Speichern in eine Tabelle
 
Nach der ersten Änderung machst Du ein Commit.

Dann kommt die nächste Änderung und es folgt ein Commit.

Wo bitte wird die Transaktion erste Transaktion gestartet?
Wo bitte wird die Transaktion für die zweite Änderung gestartet?

Was passiert hier im Else-Fall?

Delphi-Quellcode:
if DataModulePlanung.IBTransactionPlanung.InTransaction then DataModulePlanung.IBTransactionPlanung.Commit;


Ziemlich genau nix. Automatisches Rollback durch die Komponenten, die Datenbank ...?

Wie wäre es denn mal mit:
Delphi-Quellcode:
if DataModulePlanung.IBTransactionPlanung.InTransaction
then DataModulePlanung.IBTransactionPlanung.Commit
else ShowMessage('Mist keine Transaktion offen.');
Wenn die Meldung kommt, dann war das nix mit dem Commit und dann ist es auch nicht verwunderlich, wenn Du nichts finden kannst.

Uwe Raabe 8. Aug 2018 16:36

AW: Probleme beim Speichern in eine Tabelle
 
Was steht denn in den anderen SQL-Anweisungen (insbesondere in ModifySQL)?

Luckner 8. Aug 2018 16:49

AW: Probleme beim Speichern in eine Tabelle
 
Hallo Delphi.Narium,

soweit ich weiß, starten die IBDatasets automatisch eine neue Transaktion. Dei else-Eingabe hat deshalb auch keine Message ergeben.

Luckner 8. Aug 2018 16:54

AW: Probleme beim Speichern in eine Tabelle
 
habe jetzt die erste Speicher-Routine auskommentiert, falls es doch Probleme mit den Transaktionen gibt. Auch kein neuer Eintrag. Ich glaube, ich werde morgen ein neues Datamodule erstellen und dann diese Routine mit den neuen Verbindungen versuchen.

p80286 8. Aug 2018 17:27

AW: Probleme beim Speichern in eine Tabelle
 
Zitat:

Zitat von Luckner (Beitrag 1410173)
Auch kein neuer Eintrag.

Bei einem .Edit gibt es auch nichts neues!

Gruß
K-H

Uwe Raabe 8. Aug 2018 17:45

AW: Probleme beim Speichern in eine Tabelle
 
Nochmal:
Zitat:

Zitat von Uwe Raabe (Beitrag 1410170)
Was steht denn in den anderen SQL-Anweisungen (insbesondere in ModifySQL)?


hoika 8. Aug 2018 18:19

AW: Probleme beim Speichern in eine Tabelle
 
Hallo,
Zitat:

Ich benutze übrigens "Flame Robin"
Hast Du das Programm auch mal neu gestartet?

Was ist mit einem Hinweis, mal ein falsches SQL-Statement einzutragen ANTRAG_ID_TEST ?

Delphi.Narium 8. Aug 2018 18:25

AW: Probleme beim Speichern in eine Tabelle
 
In FlameRobin muss man auch ein Commit oder Rollback machen, wenn man zwischenzeitliche Änderungen durch ein anderes Programm mitbekommen möchte. Sonst macht man alle Abfragen in einer eigenen Transaktion. Andere können dann ändern was und soviel sie wollen. Das bekommt man nicht mit.

Luckner 9. Aug 2018 10:25

AW: Probleme beim Speichern in eine Tabelle
 
An Delphi.Narium,

ist mir schon klar. So mache ich das schon immer.
Gruß, Luckner

hoika 9. Aug 2018 10:27

AW: Probleme beim Speichern in eine Tabelle
 
Hallo,
wie sieht es mit #28 aus?

Luckner 9. Aug 2018 10:46

AW: Probleme beim Speichern in eine Tabelle
 
Hallo Uwe Raabe,
verstehe Deine Frage nicht.

Luckner 9. Aug 2018 10:58

AW: Probleme beim Speichern in eine Tabelle
 
Halla hoika,
was meinst Du mit #28?

Delphi.Narium 9. Aug 2018 11:03

AW: Probleme beim Speichern in eine Tabelle
 
Du nutzt in Deinem Datenmodul TIBDataSet. Da gibt es u. a. die Eigenschaft ModifySQL. Was hast Du dieser (z. B. im Objektinspektor oder irgendwo im Quelltext) zugewiesen?

Im Zweifelsfalle mal in die Formularansicht des Datenmoduls wechseln. Dann den Quelltext des Formulares anzeigen (Alt+F12?). Dort nach IBDataSetAuftrag suchen und den folgenden Quelltext bis zum Beginn des nächsten Objekts kopieren und hier einfügen. Dito. für IBDataSetAuftrag. Oder direkt die dfm des Datenmoduls hier mal anhängen.

hoika wartet auf Deine Antwort zur in Post #28 gestellten Frage.

Luckner 9. Aug 2018 11:24

AW: Probleme beim Speichern in eine Tabelle
 
In der ModifySQL steht:

Delphi-Quellcode:
update PLANUNG
set
  KUNDENNR = :KUNDENNR,
  ARTIKELNR = :ARTIKELNR,
  BESTELLNR = :BESTELLNR,
  BESTELLDATUM = :BESTELLDATUM,
  BESTELLMENGE = :BESTELLMENGE,
  LIEFERDATUM = :LIEFERDATUM,
  LIEFERMENGE = :LIEFERMENGE,
  FORMAT = :FORMAT,
  PRODUKTIONSNR = :PRODUKTIONSNR,
  MASCHINE = :MASCHINE,
  PRODUKTIONSSTUNDEN = :PRODUKTIONSSTUNDEN,
  LAGER = :LAGER,
  ID_ARTIKEL = :ID_ARTIKEL,
  LAGERANZAHL = :LAGERANZAHL,
  LAGERPRODUKTION = :LAGERPRODUKTION,
  STATUSDATUM = :STATUSDATUM,
  STATUSNAME = :STATUSNAME,
  STATUS = :STATUS,
  ID_AUFTRAG = :ID_AUFTRAG,
  ARTNRSUFFIX = :ARTNRSUFFIX,
  AUFLAGE = :AUFLAGE,
  BEMERKUNG = :BEMERKUNG,
  EINGANGSDATUM = :EINGANGSDATUM,
  ROHWARENR = :ROHWARENR,
  GELIEFERT = :GELIEFERT,
  KRAWARTNR = :KRAWARTNR
where
  ID = :OLD_ID
Wird normalerweise mit IBDataset erstellt.

hoika 9. Aug 2018 11:58

AW: Probleme beim Speichern in eine Tabelle
 
Hallo,
#28 heißt, meine Tip, mal das SQL-Statement absichtlich falsch zu schreiben.

Und jetzt vergleich doch mal dieses ModifySQL mit dem anderen ModifySQL, wo das Update funktioniert.

Luckner 9. Aug 2018 13:18

AW: Probleme beim Speichern in eine Tabelle
 
Kein Unterschied.:cry:

Uwe Raabe 9. Aug 2018 13:39

AW: Probleme beim Speichern in eine Tabelle
 
Könnte es sein, daß bei IBDataSetPlanung das CachedUpdates zufällig auf True steht?

Delphi.Narium 9. Aug 2018 13:40

AW: Probleme beim Speichern in eine Tabelle
 
Bei einem fehlerhaften SQL gibt es keine Fehlermeldung?

Das muss doch irgendwie krachen.

Oder meinst Du mit keinem Unterschied, dass ModifySQL von IBDataSetAuftrag und IBDataSetPlanung identisch sind.

Sind in diesem Fall denn dann auch die Tabellen AUFTRAG und PLANUNG identisch?

Bitte mal pas und dfm von DatamodulePlanung hier anhängen und die Createstatements der Tabellen AUFTRAG und PLANUNG auf FlameRobin hier reinkopieren.

Irgendwas passt da nicht zusammen. Nur mit den bisherigen Wissensfragmenten kann man da nicht hinterkommen.

Uwe Raabe 9. Aug 2018 13:47

AW: Probleme beim Speichern in eine Tabelle
 
Zitat:

Zitat von Delphi.Narium (Beitrag 1410225)
Irgendwas passt da nicht zusammen. Nur mit den bisherigen Wissensfragmenten kann man da nicht hinterkommen.

Sehe ich auch so :thumb:
Nach 40 Posts stochern wir immer noch im Nebel und spekulieren über einfach zu verifizierende Fakten.


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