AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Plötzlich ist der Zeiger = NIL

Ein Thema von Impulz · begonnen am 20. Dez 2011 · letzter Beitrag vom 20. Dez 2011
Antwort Antwort
Impulz

Registriert seit: 19. Aug 2011
Ort: Lübeck
68 Beiträge
 
Delphi 7 Professional
 
#1

Plötzlich ist der Zeiger = NIL

  Alt 20. Dez 2011, 08:47
Delphi-Version: 5
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:
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;
hier ist der teil von der Kunden Unit (wir nehmen diese als beispiel)


Code:
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;
die beiden Funktionen:

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
Danil
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#2

AW: Plötzlich ist der Zeiger = NIL

  Alt 20. Dez 2011, 08:55
Zitat:
Kunde := TKunde.Create(Kunde.id...
Du versuchst, bereits im Konstruktor auf die Property id der gerade zu erstellenden Instanz zuzugreifen. Das kann ja nicht funktionieren.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Impulz

Registriert seit: 19. Aug 2011
Ort: Lübeck
68 Beiträge
 
Delphi 7 Professional
 
#3

AW: Plötzlich ist der Zeiger = NIL

  Alt 20. Dez 2011, 09:04
wenn ich die ID weglasse denn funktioniert das auch nicht.

ich muss ja das create aufrufen, oder stehe ich da auf dem schlauch?
Danil

Geändert von Impulz (20. Dez 2011 um 09:06 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#4

AW: Plötzlich ist der Zeiger = NIL

  Alt 20. Dez 2011, 09:11
Nein, denn Kunde gibt es doch nicht ... worauf willst du da casten? [edit] grade stand da ja noch eine andere Frage


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)
$2B or not $2B

Geändert von himitsu (20. Dez 2011 um 09:13 Uhr)
  Mit Zitat antworten Zitat
Impulz

Registriert seit: 19. Aug 2011
Ort: Lübeck
68 Beiträge
 
Delphi 7 Professional
 
#5

AW: Plötzlich ist der Zeiger = NIL

  Alt 20. Dez 2011, 09:11
Habs schon, hab einfach eine Integer Var deklariert jetzt klappts

danke mal wieder für deine Hilfe
Danil
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#6

AW: Plötzlich ist der Zeiger = NIL

  Alt 20. Dez 2011, 09:13
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:15 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz