![]() |
Delphi-Version: 5
Plötzlich ist der Zeiger = NIL
Guten Morgen liebe Community,
Ich habe mal wieder ein Problem mit meiner Datenbankoberfläche. Ich war schon soweit, dass alles funktionierte und alles fertig war nur dann musste ich umdenken. Der Grund dafür war, dass man die ID's in meinem ListView und StringGrid nicht sehen sollte und auch nicht drauf schreibend zugreifen sollte. also blendete ich die ID aus... dabei spielte ich einbisschen hier und da rum und sehe nun das der zeiger auf mein Objekt NIL ist... aber komischer weise nur wenn ich Hinzufügen drücke.. beim Löschen und beim bearbeiten ist nix los... läuft alles... hier etwas Code, vielleicht sieht jemand etwas. wenn mehr code benötigt wird sagt bescheid:
Code:
hier ist der teil von der Kunden Unit (wir nehmen diese als beispiel)
procedure TStartseite.Hinzufgen1Click(Sender: TObject);
var Kunde: TKunde; Buch: TBuch; Sendung: TSendung; Autor: TAutor; begin Dateneditieren.StrGrAuswahl.Cells[0,0]:=''; Dateneditieren.StrGrAuswahl.Cells[1,0]:=''; if IsPositiveResult(Dateneditieren.ShowModal()) then begin case (rgAuswahl.ItemIndex) of 0 : begin Kunde := TKunde.Create(Kunde.id,Dateneditieren.StrGrAuswahl.Cells[0,0],Dateneditieren.strgrauswahl.cells[1,0]); //hier ist die exception// connect.LegeKundeAn(Kunde); addKundetoLV(Kunde); end; 1 : begin Sendung:= TSendung.Create(Sendung.ID,Dateneditieren.StrGrAuswahl.Cells[0,0],Dateneditieren.strgrauswahl.cells[1,0]); connect.LegeSendungAn(Sendung); addSendungetoLV(Sendung); end; 2 : begin Autor:= TAutor.Create(Autor.ID,dateneditieren.StrGrAuswahl.Cells[0,0],Dateneditieren.strgrauswahl.cells[1,0]); connect.LegeAutorAn(Autor); addAutortoLV(Autor); end; 3 : begin Buch:= TBuch.Create(buch.ID,StrToInt(Dateneditieren.StrGrAuswahl.Cells[0,0]),Dateneditieren.StrGrAuswahl.Cells[1,0]); connect.LegeBuchAn(Buch); addBuchtoLV(Buch); end; else begin ShowMessage('Ups, beim Anlegen des Kunden lief etwas schief'); end; end; end; end;
Code:
die beiden Funktionen:
constructor TKunde.Create(AKunden_ID:Integer; AVorname, ANachname: string);
begin inherited Create(); self.FKunden_ID:= AKunden_ID; self.FKunden_Vorname:= AVorname; self.FKunden_Nachname:= ANachname; end;
Code:
function TStartseite.addKundetoLV(AKunde: TKunde): TKundeList;
var myItemAddKtoLV: TListItem; begin myItemAddKtoLV:= lvAuswahl.Items.Add; myItemAddKtoLV.Caption:=(AKunde.Vorname); myItemAddKtoLV.SubItems.Add(AKunde.Nachname); end;
Code:
procedure TDataconnect.LegeKundeAn(Akunde: TKunde);
var neuerKuQuery: TIBOQuery; neuerKuTransa:TIBOTransaction; begin neuerKuQuery:= TIBOQuery.Create(nil); neuerKuTransa:= TIBOTransaction.Create(nil); neuerKuTransa.IB_Connection:=neuerKuQuery.IB_Connection ; try neuerKuQuery.IB_Connection:= FDataBase; neuerKuTransa.IB_Connection:= FDatabase; try neuerKuQuery.SQL.Text:= 'INSERT INTO KUNDEN (Vorname,Nachname) Values ('+QuotedStr(Akunde.Vorname)+','+QuotedStr(Akunde.Nachname)+') returning Kunden_ID'; neuerKuQuery.ExecSQL; Akunde.ID := neuerKuQuery.ParamByName('Kunden_ID').AsInteger; neuerKuTransa.Commit; Except on E : Exception do begin ShowMessage('FEHLER IN Lege Kunde AN'); neuerKuTransa.Rollback; end; end; Finally neuerKuQuery.Free; neuerKuTransa.Free; end; end; vielen vielen Dank im vorraus für eure zeit und hilfe liebe grüße |
AW: Plötzlich ist der Zeiger = NIL
Zitat:
|
AW: Plötzlich ist der Zeiger = NIL
wenn ich die ID weglasse denn funktioniert das auch nicht.
ich muss ja das create aufrufen, oder stehe ich da auf dem schlauch? |
AW: Plötzlich ist der Zeiger = NIL
Nein, denn Kunde gibt es doch nicht ... worauf willst du da casten? [edit] grade stand da ja noch eine andere Frage :angle:
Dort noch nicht auf die ID Kunde zugreifen. Wozu willst du Kunden denn seine "eigene" ID zuweisen? Wenn, dann mach das innerhalb des Create. (wenn es seine Eigene ist, dann wird er die doch schon wissen und muß sie nicht erneut bekommen :gruebel) |
AW: Plötzlich ist der Zeiger = NIL
Habs schon, hab einfach eine Integer Var deklariert jetzt klappts :)
danke mal wieder für deine Hilfe :) |
AW: Plötzlich ist der Zeiger = NIL
Die IDs werden ja vermutlich von der DB vergeben (per Generator und Trigger). Daher würde ich entweder eine Methode zum Anlegen neuer Kunden schreiben oder einfach eine 0 als ID übergeben, welche nach dem Speichern automatisch aus der DB ermittelt und im Objekt aktualisiert wird.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:21 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