![]() |
Delphi-Version: 5
Record als Funktionsrückgabe
Hallo Allerseits,
Folgendes: Ich wollte eine Variabe vom Typ Record, welches ich mir slebst erstellt habe aus einer Funktion zurückgeben. Zuerst habe ich das Record im Public-Bereich definiert:
Delphi-Quellcode:
type
TRGW = record sAnzahl : string; sDS : string; sMin : string; sMax : string; end; danach Habe ich eine Funktion im Abschnitt <interface> deklariert:
Delphi-Quellcode:
function new_calc(cLSZ: string) : TRGW;
dann die Funktion gebaut
Delphi-Quellcode:
Schon in der Funktionsdeklaration erkennt Delphi nicht das gerade function new_calc(cWert: string) : TRGW; var rRecord : TRGW; begin rRecord.iAnzahl = '3302'; rRecord.sDS = '12'; rRecord.sMin = '4'; rRecord.sMax := '34'; new_calc := rRecord; end; eben definierten Datentyp TRGW nicht mehr.. damit ist der weitere Programmablauf bei mir zum scheitern verurteilt. Könnt ihr mir dabei helfen.. ????? Danke schön |
AW: Record als Funktionsrückgabe
Steht denn die Typdeklaration im interface-Abschnitt oberhalb des Funktionsprototyps?
|
AW: Record als Funktionsrückgabe
Hallo DeddyH
ba klar:
Delphi-Quellcode:
Der letzte Teil des Funktionsprototyps <TRGW> ist rot unterstrichen und der Parser sagt mir
...
public cLSZ , cText, cWert, cRegion, cSQLString : String; iAG_Wert, iWert : Integer ; bResult : Boolean ; type TRGW = record sAnzahl : integer; sDS : integer; sMin : integer; sMax : integer; end; { Public-Deklarationen } end; function new_calc(cLSZ: string; oQuery: TADOQuery) : TRGW; ... "E2003 Undefinierter Bezeichner" |
AW: Record als Funktionsrückgabe
Das "public" und das "end" machen mich stutzig. Hast Du die Typdeklaration innerhalb einer Klassendeklaration stehen? Zumindest sieht das so aus.
|
AW: Record als Funktionsrückgabe
Nein, jedenfalls war es nicht beabsichtigt, innerhalb einer Klassendeklaration diesen Datentyp zu definieren..
im Grossen und Ganzen sieht der Unit-kopf so aus:
Delphi-Quellcode:
unit RLZ_prog;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, DB, DBTables, ADODB, Grids, DBGrids, ComCtrls, ExtCtrls, Menus, DBCtrls; type TForm1 = class(TForm) Button1: TButton; Label2: TLabel; ADOConnection1: TADOConnection; DataSource1: TDataSource; ADOTable1: TADOTable; ADOQuery1: TADOQuery; DataSource2: TDataSource; DBGrid_Produkt: TDBGrid; ADO_Ref_Region: TADOTable; DataSource3: TDataSource; DBGrid_Region: TDBGrid; Label_Region: TLabel; Label_LSZ: TLabel; Edit_AG: TEdit; TrackBar_AG: TTrackBar; Panel1: TPanel; Label_Anzahl: TLabel; Label_DS: TLabel; Label_Min: TLabel; Label_Max: TLabel; Label_ergebnis_Anzahl: TLabel; Label_Ergebnis_Max: TLabel; Label_Ergebnis_DS: TLabel; Label_Ergebnis_Min: TLabel; Label_Erg_Anzahl: TLabel; Label_Erg_Region: TLabel; MainMenu1: TMainMenu; Datei1: TMenuItem; Import1: TMenuItem; Berechnung1: TMenuItem; Beenden1: TMenuItem; Extrax1: TMenuItem; Datenbankeinbinden1: TMenuItem; N1: TMenuItem; Produktendern1: TMenuItem; ADOQuery2: TADOQuery; DataSource4: TDataSource; DBText_Anzahl: TDBText; procedure Button1Click(Sender: TObject); procedure DBGrid_RegionDblClick(Sender: TObject); procedure FormActivate(Sender: TObject); procedure TrackBar_AGChange(Sender: TObject); procedure ScrollBar_AbdeckungsgradChange(Sender: TObject); procedure DBGrid_ProduktDblClick(Sender: TObject); procedure DBGrid2KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); private { Private-Deklarationen } public cLSZ , cText, cWert, cRegion, cSQLString : String; iAG_Wert, iWert : Integer ; bResult : Boolean ; type TRGW = record iAnzahl : integer; iDS : integer; iMin : integer; iMax : integer; end; { Public-Deklarationen } end; function new_calc(cLSZ: string; oQuery: TADOQuery) : TRGW var Form1: TForm1; |
AW: Record als Funktionsrückgabe
Wie ich schon vermutet hatte. Kleine Änderung:
Delphi-Quellcode:
unit RLZ_prog;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, DB, DBTables, ADODB, Grids, DBGrids, ComCtrls, ExtCtrls, Menus, DBCtrls; type TForm1 = class(TForm) (* weggekürzt *) private { Private-Deklarationen } public { Public-Deklarationen } cLSZ , cText, cWert, cRegion, cSQLString : String; iAG_Wert, iWert : Integer ; bResult : Boolean ; end; //Ende der Klassendeklaration TRGW = record iAnzahl : integer; iDS : integer; iMin : integer; iMax : integer; end; function new_calc(cLSZ: string; oQuery: TADOQuery) : TRGW; var Form1: TForm1; |
AW: Record als Funktionsrückgabe
Hallo DeddyH,
vielen Dank für Deine Hilfe; ich habe es etwas zurechtgerückt. jetzt funktioniert es !!! :-D:thumb: |
AW: Record als Funktionsrückgabe
Zitat:
Delphi-Quellcode:
function new_calc(cWert: string): TRGW;
begin Result.iAnzahl = '3302'; Result.sDS = '12'; Result.sMin = '4'; Result.sMax := '34'; end; |
AW: Record als Funktionsrückgabe
Zitat:
Delphi-Quellcode:
.
function new_calc(cLSZ: string; oQuery: TADOQuery) : TForm1.TRGW;
Warum man natürlich dennoch fragen könnte, warum diese Klasse in der Form liegt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:02 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