![]() |
Datenbank: Firebird • Version: 1.5 • Zugriff über: TDataset
Probleme beim Speichern in eine Tabelle
Hallo,
habe folgendes Problem:
Delphi-Quellcode:
In die Tabelle "Auftrag" werden Änderungen eingetragen aber in die Tabelle "Planung" nicht.
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; Gruß, Luckner |
AW: Probleme beim Speichern in eine Tabelle
Bist du sicher, daß das hier richtig ist?
Zitat:
|
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). |
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.
|
AW: Probleme beim Speichern in eine Tabelle
Zitat:
Delphi-Quellcode:
anstatt
DatamodulePlanung.IBDataSetPlanung.Append;
Delphi-Quellcode:
heißen?
DatamodulePlanung.IBDataSetPlanung.Edit;
|
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. |
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. |
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. |
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 |
AW: Probleme beim Speichern in eine Tabelle
Zur Delphi.Narium:
jeweils 1. |
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; |
AW: Probleme beim Speichern in eine Tabelle
Hallo Heiko,
auch das hat nichts gebracht. Ohne Fehlermeldung, aber nirgens ein Eintrag. |
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 ? |
AW: Probleme beim Speichern in eine Tabelle
Das ist mir jetzt zu hoch:
Zitat:
Zitat:
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? |
AW: Probleme beim Speichern in eine Tabelle
Hallo,
Zitat:
Wie erkennst Du überhaupt, ob sich was geändert hat, per IBExpert oder indem Du danach den Datensatz in Deinem Programm anzeigst? |
AW: Probleme beim Speichern in eine Tabelle
Zitat:
|
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? |
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? |
AW: Probleme beim Speichern in eine Tabelle
Zitat:
|
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. |
AW: Probleme beim Speichern in eine Tabelle
Zitat:
|
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:
Wenn die Meldung kommt, dann war das nix mit dem Commit und dann ist es auch nicht verwunderlich, wenn Du nichts finden kannst.
if DataModulePlanung.IBTransactionPlanung.InTransaction
then DataModulePlanung.IBTransactionPlanung.Commit else ShowMessage('Mist keine Transaktion offen.'); |
AW: Probleme beim Speichern in eine Tabelle
Was steht denn in den anderen SQL-Anweisungen (insbesondere in ModifySQL)?
|
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. |
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.
|
AW: Probleme beim Speichern in eine Tabelle
Zitat:
Gruß K-H |
AW: Probleme beim Speichern in eine Tabelle
Nochmal:
Zitat:
|
AW: Probleme beim Speichern in eine Tabelle
Hallo,
Zitat:
Was ist mit einem Hinweis, mal ein falsches SQL-Statement einzutragen ANTRAG_ID_TEST ? |
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.
|
AW: Probleme beim Speichern in eine Tabelle
An Delphi.Narium,
ist mir schon klar. So mache ich das schon immer. Gruß, Luckner |
AW: Probleme beim Speichern in eine Tabelle
Hallo,
wie sieht es mit #28 aus? |
AW: Probleme beim Speichern in eine Tabelle
Hallo Uwe Raabe,
verstehe Deine Frage nicht. |
AW: Probleme beim Speichern in eine Tabelle
Halla hoika,
was meinst Du mit #28? |
AW: Probleme beim Speichern in eine Tabelle
Du nutzt in Deinem Datenmodul
![]() 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. |
AW: Probleme beim Speichern in eine Tabelle
In der ModifySQL steht:
Delphi-Quellcode:
Wird normalerweise mit IBDataset erstellt.
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 |
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. |
AW: Probleme beim Speichern in eine Tabelle
Kein Unterschied.:cry:
|
AW: Probleme beim Speichern in eine Tabelle
Könnte es sein, daß bei IBDataSetPlanung das CachedUpdates zufällig auf True steht?
|
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. |
AW: Probleme beim Speichern in eine Tabelle
Zitat:
Nach 40 Posts stochern wir immer noch im Nebel und spekulieren über einfach zu verifizierende Fakten. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22: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 by Thomas Breitkreuz