Autor Beitrag
Sidi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 47


Delphi XE5 Prof.
BeitragVerfasst: Di 13.08.02 23:33 
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.
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1247
Erhaltene Danke: 2

Apple Mac OSX 10.11

BeitragVerfasst: Di 13.08.02 23: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 :

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 47


Delphi XE5 Prof.
BeitragVerfasst: Di 13.08.02 23: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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1247
Erhaltene Danke: 2

Apple Mac OSX 10.11

BeitragVerfasst: Di 13.08.02 23:59 
Poste doch bitte mal die Zeile die er anmekert mit dem Fehler.
Sidi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 47


Delphi XE5 Prof.
BeitragVerfasst: Mi 14.08.02 00:08 
So sieht die Procedure aus:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1247
Erhaltene Danke: 2

Apple Mac OSX 10.11

BeitragVerfasst: Mi 14.08.02 00: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 :
ausblenden Quelltext
1:
if Eingabefehler > 0 then Abort;					

nach :
ausblenden Quelltext
1:
If Eingabefehler <> 0 then Abort;					

Ansonsten vermute ich mal, das Dein Fehler in der Procedure "getrealzahl" liegt.
Sidi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 47


Delphi XE5 Prof.
BeitragVerfasst: Mi 14.08.02 18: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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1247
Erhaltene Danke: 2

Apple Mac OSX 10.11

BeitragVerfasst: Mi 14.08.02 19:01 
Bitte nichts zu danken, ich habe ja auch wieder etwas dazugelernt.
Spike
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 69
Erhaltene Danke: 1



BeitragVerfasst: Mi 14.08.02 22: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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 47


Delphi XE5 Prof.
BeitragVerfasst: Mi 14.08.02 22: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