![]() |
Record im Objekt
Hallo Leute,
ich versuche nun, mich mit den Themen Records und Klassen vertraut zu machen, hab aber einige Anfangsschwierigkeiten. Also, ich möchte eine Klasse "Kundendaten" erstellen. Diese Klasse soll über einen Record namens "Kunde" verfügen. Und mit folgendem Code:
Delphi-Quellcode:
bekomme ich eine Fehlermeldung, und zwar in der Zeile
unit Unit1;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Db, ZQuery, ZMySqlQuery, ZTransact, ZMySqlTr, ZConnect, ZMySqlCon; type TKunde = record kundennummer: string; end; TForm1 = class(TForm) GroupBox1: TGroupBox; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; Label7: TLabel; Label9: TLabel; Label10: TLabel; Label11: TLabel; Label12: TLabel; Label13: TLabel; Label14: TLabel; Label15: TLabel; ds1: TDataSource; db1: TZZMySqlDatabase; tr1: TZZMySqlTransact; query1: TZZMySqlQuery; procedure FormShow(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; TKundendaten = class(TObject) kunde1 : TKunde; procedure Kundesuchen; end; var Form1: TForm1; Kundendaten: TKundendaten; implementation {$R *.DFM} procedure TKundendaten.Kundesuchen; begin Form1.query1.sql.text:= 'SELECT * FROM kundendaten'; Form1.query1.Open; kunde1.kundennummer:= Form1.query1.fieldbyname('ID').AsString; end; procedure TForm1.FormShow(Sender: TObject); begin Kundendaten.Kundesuchen; end; end.
Delphi-Quellcode:
Wo denke ich falsch?
kunde1.kundennummer:= Form1.query1.fieldbyname('ID').AsString;
MfG davar |
Re: Record im Objekt
verrätst DU uns evtl. auch die Fehlermeldung?
Die Glaskugelsteuern sind mir einfach zu hoch. :wink: Gruß onlinekater |
Re: Record im Objekt
Zitat:
"Zugriffsverletzung bei Adresse ... in Modul 'Project1.exe Schreiben von Adresse ..." Als wäre hier eine Variable nicht definiert.. |
Re: Record im Objekt
Kannst Du mal versuchen aus:
Delphi-Quellcode:
diese zu machen:
type
TKunde = record kundennummer: string; end;
Delphi-Quellcode:
Grüße
type
TKunde = record kundennummer: string[255]; end; Klaus |
Re: Record im Objekt
Nein, das ändert auch nichts. Gleiche Fehlermeldung.
|
Re: Record im Objekt
Meine Prognose: Das Record ist gesund, aber die Instanz zeigt auf einen Haufen Altpapier...
ein KundenDaten := TKundenDaten.Create(...) sollte helfen ;) PS: Zitat:
greetz Mike |
Re: Record im Objekt
es sieht auch so aus als ob du die Kundenklasse nie instantiiert hättest.
|
Re: Record im Objekt
Zitat:
Gruß Hawkeye |
Re: Record im Objekt
Zitat:
greetz Mike |
Re: Record im Objekt
Delphi-Quellcode:
ich bin da nich so fit mit SQL Querys, aber
procedure TKundendaten.Kundesuchen;
begin Form1.query1.sql.text:= 'SELECT * FROM kundendaten'; Form1.query1.Open; kunde1.kundennummer:= Form1.query1.fieldbyname('ID').AsString; end; wenn ich Select * from kundendaten mache kommt da nicht mehr als ein String zurück? Kannst Du mal testhalber das Ergebnis von Form1.query1.fieldbyname('ID').AsString als Message oder in ein Memofeld ausgeben? Grüße Klaus |
Re: Record im Objekt
Zitat:
Daran hat es gelegen. Versteh ich aber nicht ganz. Wenn ich vorher statt
Delphi-Quellcode:
einfach ein Label angesprochen habe, also
kunde1.kundennummer:= Form1.query1.fieldbyname('ID').AsString;
Delphi-Quellcode:
dann ging es auch. Aber in beiden Fällen ist doch der Befehl in der Prozedur "TKundendaten.Kundesuchen", also müsste doch, wenn Kundendaten noch nicht erstellt wurde, in beiden Fällen eine Fehlermeldung kommen..
label1.caption:= Form1.query1.fieldbyname('ID').AsString;
|
Re: Record im Objekt
Zitat:
Aber ich wiederhole meinen Einwand von vorhin: Wo erzeugst du eine Instanz von TKundendaten? [Edit: Zitat:
|
Re: Record im Objekt
Die Variable Kundendaten ist nicht initialisiert.
a) im FormShow erst Kundendaten:=TKundendaten.Create rufen, dann solltest du die Variable allerdings als Member von TForm1 machen oder b) falls Kundendaten global sein soll ne Zugriffsfunktion implementieren.
Delphi-Quellcode:
Dann solltest Du aber einen Init/final sektion anfügen (direkt vor dem End.)
Function GetKundendaten: TKundendaten;
Begin If not Assigned(Kundendaten) Then Kundendaten:=TKundendaten.Create; Result:=Kundendaten; End;
Delphi-Quellcode:
Initialization
Kundendaten:=Nil; Finalization GetKundenDaten.Free; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02: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