Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi wie gibt man "nix" zurück? (https://www.delphipraxis.net/30744-wie-gibt-man-nix-zurueck.html)

Pseudemys Nelsoni 28. Sep 2004 19:13


wie gibt man "nix" zurück?
 
hoi,

ich habe eine funktion, ca so:

Delphi-Quellcode:
function bla: MyRecord
begin
  result := nix; { falls später ein fehler auftritt soll halt nix zurückgegeben werden }
  if irgendwas() then result := aRecord;
end;

ohne die erste zeile bekomme ich ja immer warnungen wie:

"ergebnis könnte undefiniert sein"

was tu ich dagen? sowas wie {$WARNINGS OFF} wollte ich eigentlich nich benutzen.

MathiasSimmack 28. Sep 2004 19:16

Re: wie gibt man "nix" zurück?
 
nil hilft nicht?

richard_boderich 28. Sep 2004 19:16

Re: wie gibt man "nix" zurück?
 
dafür gibt es den ausdruck "nil"

das ist ein zeiger der sozusagen nirgendwo hinzeigt

Pseudemys Nelsoni 28. Sep 2004 19:20

Re: wie gibt man "nix" zurück?
 
ne nil geht nicht, schon getestet


Zitat:

[Fehler] database.pas(128): Inkompatible Typen: 'TDBFileItem' und 'Pointer'

Chewie 28. Sep 2004 19:24

Re: wie gibt man "nix" zurück?
 
Wenn dein Rückgabetyp ein Record ist, dann wird auch ein Exemplar des entsprechenden Records zurückgeliefert. Entweder du stellst dein Design um oder du fügst deinem Record ein Feld hinzu, das anzeigt, dass der Record nicht gültig initialisiert ist.

richard_boderich 28. Sep 2004 19:33

Re: wie gibt man "nix" zurück?
 
probiert mal einem leeren string zu nehmen -> ''


wenn nichts passiert, weise einfach einen lehren string zu,
du muesstest auch mal posten, vom was für einem typ TDBFile ist.
so wie ich das vermute, ist es ein record, was sich aus verschiedenen datentypen zusammensetzt.
warum willst du uberhaupt nicht zuweisen.

ich wuerde es so machen, das ich den record bei programmstart mit vom mir definierten
werten füttere, und du noch ne abfrage machst, das wenn halt diese werte drinsind then do nothing

[edit=r_kerber]Doppelpost gelöscht. Mfg, r_kerber[/edit]

Pseudemys Nelsoni 28. Sep 2004 19:35

Re: wie gibt man "nix" zurück?
 
Delphi-Quellcode:
  TDBFileItem = record
    irgendwas: string[12];
    Password: TMD5Digest;
    fgjgj: string[255];
    ghgj: string[255];
  end;

so sieht er aus

[edit=r_kerber]Doppelpost gelöscht. Mfg, r_kerber[/edit]

Dani 28. Sep 2004 19:40

Re: wie gibt man "nix" zurück?
 
Hi,

Wo immer möglich würde ich persönlich anstelle von Records lieber Nachfahren von TObject benutzen , damit lässt sich imho viel besser arbeiten...

Aenogym 28. Sep 2004 19:41

Re: wie gibt man "nix" zurück?
 
hi,

ich würde dem record noch ein feld namens "error" (oder so ähnlich) hinzufügen. standardmäßig ist der wert 0. wenn ein fehler auftritt , dann ist der wert 1.
nachdem die funktion aufgerufen wurde und ein record zurückgegeben hat, überprüfst du, ob error=0. wenn nicht, dann ist das zurückgeliferte record unbrauchbar ;)

Aenogym

Pseudemys Nelsoni 28. Sep 2004 19:41

Re: wie gibt man "nix" zurück?
 
eine klasse als rückgabewert?

aeneogm: danke, mal versuchen ;)

auch an alle anderen danke

richard_boderich 28. Sep 2004 19:46

Re: wie gibt man "nix" zurück?
 
dann mach das so, weise allen stringwerten zum programmstart einen string z.B. "test" zu

in deiner routine fragste dann ab, ob dieser string drin ist

Delphi-Quellcode:
if irgentwas() then result:=aRecord
if not irgentwas() then
begin
 result.irgentwas:='test';
 result.fgjgj:='test';
 result.ghgj:='test;
 // den typ passwort kenn ich net, scheint ein gekapseltes record für einen MD5 hash zu sein, dann weist du halt z.B. nen hash aus nur nullen zu
end;

ibp 28. Sep 2004 19:47

Re: wie gibt man "nix" zurück?
 
oder du erstellst dir deinen eigenen nil-record!

Pseudemys Nelsoni 28. Sep 2004 19:49

Re: wie gibt man "nix" zurück?
 
hallo richard,

werde es übernehmen, danke :)

@ibp: wie das denn? ich kann euf ein rekord doch nicht direkt zugreifen oder?

richard_boderich 28. Sep 2004 19:56

Re: wie gibt man "nix" zurück?
 
du kannst auf die felder eines recors zugreifen

Delphi-Quellcode:
Sie können auf die Felder eines Records zugreifen, indem Sie die Feldbezeichner mit dem Record-Namen qualifizieren:

Record1.Year := 1904;
Record1.Month := Jun;
Record1.Day := 16;

Alternativ dazu ist auch die Verwendung einer with-Anweisung möglich:

with Record1 do
begin
  Year := 1904;
  Month := Jun;
  Day := 16;
end;
siehe Delphi hilfe (F1-Taste)

ibp 28. Sep 2004 19:58

Re: wie gibt man "nix" zurück?
 
indem du einen nilrecord definierst!

z.B.:

Delphi-Quellcode:
var nilrecord: TDBFileItem
...
  nilrecord.irgendwas:='nix'
  nilrecord.Password:'garnix'; // TMD5Digest was auch immer das für ein typ ist
  nilrecord.fgjgj:='auchnix';
  nilrecord.ghgj:='nienix';
...

Sanchez 28. Sep 2004 20:07

Re: wie gibt man "nix" zurück?
 
Hallo,

Du könntest einfach Result mit Nullen anfüllen. Etwa so:

Delphi-Quellcode:
function bla: MyRecord
begin
  fillchat(result, sizeof(MyRecord), #0);
  if irgendwas() then result := aRecord;
end;

grüße, daniel

negaH 28. Sep 2004 21:43

Re: wie gibt man "nix" zurück?
 
bezogen auf deine Frage etwa so

Delphi-Quellcode:
function bla: string;
begin
  result := 'nix';
end;
;) Spaß beiseite, Sanchez Lösung ist schon die richtige, du musst aber aufpassen das die Felder des Records auchmit NULL-Werten korrekt initialisiert sind. D.h. es gibt durchaus die Möglichkeit das ein Feld zb. ein Set darstellt und per Definitino nicht das 0'te Element auch wirklich als Leer-Element zählt. In diesem Falle würde also FillChar() eine 0 in dieses Feld speichern, was aber nicht gleichzusetzen wäre wie ein Leer-Element.

Gruß Hagen


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