![]() |
Datenbank: Firebird • Version: 2 • Zugriff über: dbX
clientdataset datenmenge weder im editier noch im einfügemodus
Hallo,
ich bekomme den Fehler, der im Titel steht in folgender Funktion:
Delphi-Quellcode:
Ich find keinen Fehler. :(
function AddPELehrg(_Bereich: string;_ID: Integer; _Nr, _Name, _Lehrgang, _Von, _Bis, _Ort: String; _Best :integer): Boolean;
var VZqLehrgänge : TClientDataSet; VZqTemp : TADOQuery; begin Result := True; Form2.Memo1.Lines.Add(#9#9#9+'Lehrgänge'); Result := False; VZqLehrgänge := Form2.ClientDataSet1; with VZqLehrgänge do begin Close; // Connection := FFBConnection; CommandText := 'SELECT * FROM '+_Bereich+'_LEHRG'; Open; if not Active then Active := True; if (State <> dsEdit) or (State <> dsInsert) then begin Edit; end else begin Insert; end; FieldByName(_Bereich+'_ID').Value := GetMaxID(_Bereich+'_LEHRG', Form2.SQLConnection); FieldByName(_Bereich+'_INDEX').Value := _ID; FieldByName(_Bereich+'_NR').Value := GetString(_Nr, 15); FieldByName(_Bereich+'_NAME').Value := GetString(_Name, 30); FieldByName(_Bereich+'_LEHRG_LANG').Value := _Lehrgang; try // if _Von <> '' then if Length(_Von) = 10 then begin FieldByName(_Bereich+'_ZEITRAUM_VD').AsString := _Von; end; except end; try if Length(_Bis) = 10 then FieldByName(_Bereich+'_ZEITRAUM_BD').AsString := _Bis; except end; FieldByName(_Bereich+'_LEHRG_ORT').Value := _Ort; FieldByName(_Bereich+'_LEHRG_OK').Value := _Best; ApplyUpdates(0); Post; Close; end; Result := True; FreeAndNil(VZqTemp); FreeAndNil(VZqLehrgänge); end; |
AW: clientdataset datenmenge weder im editier noch im einfügemodus
Müsste das 'ApplyUpdates' nicht nach dem 'Post' stehen ?
Ralf |
AW: clientdataset datenmenge weder im editier noch im einfügemodus
Hallo Kevin,
mir ist dein Code nicht so ganz klar: 1. Dataset wird geschlossen (close) 2. neues SQL und dann öffnen (open) 3. Active??? nach dem open ist das DS active 4. edit/insert. Soll etwas neu eingefügt oder der erste Satz überschrieben werden? 5. Felder füllen ... 6. Post zum Speichern. Aber nochmals überlegen, ob der erste Satz überschrieben (Edit) oder ein neuer eingefügt (insert) werden soll. Da du dir eine MaxId holst, tippe ich einmal auf neuen Satz Frage: warum immer result true? Ciao Frank |
AW: clientdataset datenmenge weder im editier noch im einfügemodus
Doch natürlich. Immer diese Leichtsinnsfehler. :/
Vielen Dank, jetzt geht es. :thumb: |
AW: clientdataset datenmenge weder im editier noch im einfügemodus
Zitat:
ich prüf immer ob die Funktion auch wirrklich ausgeführt wurde. Das mit dem Edit hatte ich nur testweiße in meiner Funktion, ich habe es aber schon wieder entfernt. |
AW: clientdataset datenmenge weder im editier noch im einfügemodus
Ich sehe da noch einige Fehler in dem Code.
Delphi-Quellcode:
...
Close; // Connection := FFBConnection; CommandText := 'SELECT * FROM '+_Bereich+'_LEHRG'; Open; // überflüssiger Code, da durch "Open" die Datenmenge automatisch auf aktiv gesetzt wird // ********* if not Active then Active := True; // ********* Nachdem der Tabellenname schon vom Bereich abhängt, ist es ![]()
Delphi-Quellcode:
...
CommandText := 'SELECT * FROM '+_Bereich+'_LEHRG'; Open; ... // Feldnamen sollten für alle Tabellen gleich sein! FieldByName(_Bereich+'_ID').Value := GetMaxID(_Bereich+'_LEHRG', Form2.SQLConnection); FieldByName(_Bereich+'_INDEX').Value := _ID; Man sollte auch nicht Komponenten auf einem Formular mit FreeAndNil() freigeben:
Delphi-Quellcode:
...
VZqLehrgänge := Form2.ClientDataSet1; ... // nicht gut - beim nächsten Mal ist das ClientDataSet weg und dann gibt es eine Zugriffsverletzung FreeAndNil(VZqTemp); FreeAndNil(VZqLehrgänge); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:36 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