Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Eingabe in Datenbankfeld wird vor BeforePost validiert (https://www.delphipraxis.net/103875-eingabe-datenbankfeld-wird-vor-beforepost-validiert.html)

hirnstroem 23. Nov 2007 09:53

Datenbank: Microsoft Access • Version: kA • Zugriff über: ADO

Eingabe in Datenbankfeld wird vor BeforePost validiert
 
'loha Folks,

mir macht die Eingabe von Daten in ein mit einer Access Datenbank "verknüpften" Edit-Felder Probleme.

Das Feld ist in der Datenbank als Integer definiert. Wenn nun aber jemand auf die Idee kommen sollte, trotzdem einen String hineinzuschreiben, so möchte ich dies abfangen und den Benutzer darauf hinweisen, dass das so nicht passt. Dies versuche ich durch das definieren entsprechender Behandlungsroutinen im BeforePost Ereignis abzuhandeln, nur kommt das ganze beim speichern gar nicht so weit. Bevor das BeforePost Ereignis feuert, löst das Formular eine Exception aus und da es sich um ein IntraWeb Formular handelt, kann ich nicht nachschauen (jedenfalls ist mir nichts anderes bekannt), was da im Hintergrund genau abläuft. Besagte Situation tritt nur dann ein, wenn anstatt einer Zahl ein String in das entsprechende Edit-Feld geschrieben wird. Deffiniere ich beispielsweise, dass die Zahl nicht grösser als 1 sein darf und gebe anschliessend 2 ein, so funktiniert das ganze wider.

Die folgende Exception wird jeweils ausgelöst:

Erste Gelegenheit für Exception bei $77E7E592. Exception-Klasse EDatabaseError mit Meldung "asdf" ist kein gültiger Integerwert für das Feld 'Address'. Prozess FACTS_Standalone.exe (2280)

Eine Lösung dafür konnte ich bisher nicht finden und weshalb die Exception auftritt ist für micht auch nicht nachvollziehbar, etwas Hilfe, täte deshalb gut.

Grüsse
hirnstroem

mkinzler 23. Nov 2007 10:04

Re: Eingabe in Datenbankfeld wird vor BeforePost validiert
 
Ich würde in diesem Fall statt dem TDBEdit ein TMaskEdit nehmen.

hirnstroem 23. Nov 2007 10:18

Re: Eingabe in Datenbankfeld wird vor BeforePost validiert
 
Ich habe wohl verschwiegen, ein TIWDBEdit von IntraWeb verwendet zu haben (für Webapplikationen).

Und verwirren tut mich zusätzlich folgendes. Wenn ein Datensatz geöffnet wird, bei welchem das angesprochene Feld mit einem korrekten Wert versehen ist, in dieses Feld ein Paar Buchstaben geschrieben werden und anschliessend anstatt gespeichert abgebrochen wird, verhält es sich genau so wie beim speichern des Datensatzes. Beim Abbrechen soll doch aber gefälligst gar nichts mehr überpfüft werden...

alzaimar 23. Nov 2007 10:28

Re: Eingabe in Datenbankfeld wird vor BeforePost validiert
 
Du solltest vielleicht die Validation im OnSetText-Ereignis des Eingabefeldes vornehmen.

Ich vermute mal (meine Glaskugel ist geölt und runderneuert), das das Datenfeld vom Type TIntegerField ist und daher schon bei der Zuweisung (die das TIWDBEdit selbst vornimmt) dieser Fehler auftritt.

hirnstroem 23. Nov 2007 10:54

Re: Eingabe in Datenbankfeld wird vor BeforePost validiert
 
Deine Vermutung trifft zu -.-

Delphi-Quellcode:
procedure TIWUserSession.ADODataSet_DeviceAddressSetText(Sender: TField;
  const Text: string);
var
  Value: Integer;
begin
  if not TryStrToInt(Text, Value) then CurrentDataSet.FieldByName('Address').Value := CurrentDataSet.FieldByName('Address').Value;
end;
^^ so tut das seinen Dienst.

Vielen Dank für die Hilfe!

alzaimar 23. Nov 2007 11:30

Re: Eingabe in Datenbankfeld wird vor BeforePost validiert
 
Na, vielleicht noch eine Fehlermeldung... Und vermutlich tut es ein einfach exit (also einfach nix zuweisen) auch.

hirnstroem 23. Nov 2007 11:56

Re: Eingabe in Datenbankfeld wird vor BeforePost validiert
 
Die Fehlermeldung wird nach wie vor im BeforePost Ereignis generiert, ist also nicht vergessen gegangen und Exit ist wirklich sinnvoller...wenn man das so gesagt bekommt. Aber heute, Freitag, und nach einer relativ kurzen Nacht, kommen die Gehirnwindungen irgendwie nur schwerlich in Gange...


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