Entwickler-Ecke
Datenbanken - Procedure Abort
Sidi - Di 13.08.02 22:33
Titel: Procedure Abort
Hallo allerseits,
ich möchte in der Procedure BeforePost nach Prüfung einiger Felder die nicht leer sein dürfen ggf. den Post-Vorgang abbrechen. Hierfür gibt es in der Delphi-Hilfe auch ein Beispiel, dieses funktioniert jedoch nicht.
Hier der Originaltext aus der Delphi-Hilfe:
In diesem Beispiel wird geprüft, ob ein TDBEdit-Steuerelement einen gültigen Eintrag enthält. Ist das Steuerelement leer, wird die Prozedur Abort aufgerufen, um das Eintragen zu verhindern.
Quelltext
1: 2: 3: 4: 5:
| procedure TForm1.Table1BeforePost(DataSet: TDataSet); begin if DBEdit1.Text = '' then Abort; end; |
Obiges Original-Beispiel aus der Delphi-Hilfe erzeugt jedoch die Fehlermeldung:
Anweisung erforderlich aber Ausdruck vom Typ Integer gefunden :shock:
Woran kann das liegen???? Gibt es eine Alternative???
PS.: ich programmiere mit Delphi 6 Professional, der rote Balken der Fehlermeldung wird immer 3 Zeilen über dem eigentlichen Fehler angezeigt :evil: Irgendwie ist diese Delphiversion nicht OK.
MfG
bis11 - Di 13.08.02 22:48
Hi,
hast Du es schon mit
EXIT; probiert. Soweit ich das verstanden habe prüfst du es ja mit einer IF-Schleife ab. Dann würde ich folgendes schreiben :
Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| procedure TForm1.Table1BeforePost(DataSet: TDataSet); begin if DBEdit1.Text = '' then exit else begin // ... Was mit dem Inhalt geschehen soll end; end; |
Sidi - Di 13.08.02 22:55
Hallo bis11,
EXIT verlässt nur die Procedure, Post wird dann jedoch ausgeführt. Ich möchte Post abbrechen damit der Datensatz im Editier- bzw. Insert-Modus bleibt und erst gespeichert werden kann wenn die "Muß-Felder" einen Wert haben. Der Datensatz soll jedoch nicht verworfen werden. Dies wird mit dem Beispiel aus der Delphi-Hilfe auch so suggeriert, jedoch funktioniert das Beispiel leider nicht :( .
MFG
bis11 - Di 13.08.02 22:59
Poste doch bitte mal die Zeile die er anmekert mit dem Fehler.
Sidi - Di 13.08.02 23:08
So sieht die Procedure aus:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TForm2.TableProduktBeforePost(DataSet: TDataSet); begin
if EditArtikelnummer.text = '' then Eingabefehler := 1 else if getrealzahl(EditEKPreis.text) = 0 then Eingabefehler := 2 else if getrealzahl(EditvKPreis.text) = 0 then Eingabefehler := 3 else if (getrealzahl(EditAktionsPreis.text) = 0) and (CheckboxAKPreis.checked) then Eingabefehler := 4 else Eingabefehler := 0; if Eingabefehler > 0 then Abort;
end; |
Folgende Fehlermeldung wird erzeugt:
[Fehler] Shop.pas(2492): Anweisung erforderlich, aber Ausdruck vom Typ 'Integer' gefunden
...ich bin ratlos :shock:
(Eingabefehler ist eine globale Variable)
MfG
bis11 - Di 13.08.02 23:37
Also die Abort-Funktion läuft einwandfrei. Nur den Befehl getrealzahl kenne ich jetzt nicht. Ich nehme mal an, daß das eine Procedure ist um den String in eine Realzahl zu schreiben. Ändere einfach mal folgende Zeile :
Quelltext
1:
| if Eingabefehler > 0 then Abort; |
nach :
Quelltext
1:
| If Eingabefehler <> 0 then Abort; |
Ansonsten vermute ich mal, das Dein Fehler in der Procedure "getrealzahl" liegt.
Sidi - Mi 14.08.02 17:29
Hallo BIS11,
habe den Fehler nun gefunden :idea: , es zeigt sich wieder mal dass Borland ziemlich in der BDE rumgemurkst hat :!:
Sobald ich die BDE einbinde, tritt der Fehler auf, also habe ich die BDE-Functionen (z.B. DBIPackTable) in eine extra Unit ausgelagert und nun gehts.
Ich arbeite eigentlich gern mit dBase-Tabellen, nicht zuletzt weil diese in vielen Programmen importiert werden können, mit der 6er Version von Delphi ist dies jedoch vorbei da numerische Felder falsch initialisiert werden. Anfragen an Borland diesbezüglich werden ignoriert, ruft man dort an verlangen die 150 Euro für Support und das bei offensichtlichen Programmierfehlern Ihrerseits :evil: :evil:
So ist das Leben, auf jeden Fall danke für deine Hilfe.
MfG
bis11 - Mi 14.08.02 18:01
Bitte nichts zu danken, ich habe ja auch wieder etwas dazugelernt.
Spike - Mi 14.08.02 21:30
| bis11 hat folgendes geschrieben: |
| Ansonsten vermute ich mal, das Dein Fehler in der Procedure "getrealzahl" liegt. |
Hi, daran lags ja nun offenbar nicht -aber trotzdem ein kleiner Hinweis: getrealzahl macht sicher das gleiche wie StrToFloat - oder?
Spike
Sidi - Mi 14.08.02 21:47
Hallo Spike,
du hast recht, ist halt noch ein altes Relikt an das ich mich so gewöhnt habe :oops: , die Daseinsberechtigung dieser Funktion liegt eher daran dass vor der Konvertierung ein Komma in einen Punkt geändert wird.
MfG
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!