AGB  ·  Datenschutz  ·  Impressum  







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

TEdit mit DBEdit?

Ein Thema von Leon de Bar · begonnen am 3. Nov 2004 · letzter Beitrag vom 5. Nov 2004
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#11

Re: TEdit mit DBEdit?

  Alt 4. Nov 2004, 15:50
Zitat von Leon de Bar:
...bekomme ich eine fehlermeldung: ADOQuery1: Das Feld 'Name' wurde nicht gefunden....
Gibt es denn in der Tabelle mit der dein ADOQuery1 "verbunden" ist auch das Feld 'Name'?
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Leon de Bar

Registriert seit: 1. Okt 2004
Ort: Berlin
125 Beiträge
 
Delphi 6 Enterprise
 
#12

Re: TEdit mit DBEdit?

  Alt 4. Nov 2004, 15:53
Hast du meinen source-code heute früh nicht erhalten?

ja, die Query sieht so aus...:

Delphi-Quellcode:
  ADOQuery1.SQL.Text :=
    'SELECT Mitgliedsnummer, Vorname, Name, Strasse, Land, PLZ, Ort, ' +
      'Tel_1, Fax_1, Tel_2, Fax_2, Handy, email, ' +
      'GebDat, ' +
      'Saldo, ' +
      'Eintritt, ' +
      'Spielernummer, Trikot, Spielerposition.Spielerpos FROM ' +
      'ID, Mitglied, Kontakt, GebDatList, MG_Saldenliste, ' +
      'Mitgliedsstatus, Spielerdaten, Spielerposition ' +
      'WHERE Mitglied.ID=Kontakt.ID AND Kontakt.ID=GebDatList.ID AND ' +
      'GebDatList.ID=MG_Saldenliste.ID AND MG_Saldenliste.ID=Mitgliedsstatus.ID ' +
      'AND Mitgliedsstatus.ID=Spielerdaten.ID AND Spielerdaten.Spielerpos=' +
      'Spielerposition.SID';
Nachtrag:
...und das zeigt mir der Compiler an.

[Hinweis] Mitgliedsdaten.pas(103): Auf 'ds' zugewiesener Wert wird niemals benutzt

Scheint so als würde überhaupt nicht auf meinen Code zugegriffen zu werden. Verstehe ich das richtig?
  Mit Zitat antworten Zitat
Leon de Bar

Registriert seit: 1. Okt 2004
Ort: Berlin
125 Beiträge
 
Delphi 6 Enterprise
 
#13

Re: TEdit mit DBEdit?

  Alt 5. Nov 2004, 16:43
* push *
  Mit Zitat antworten Zitat
Leon de Bar

Registriert seit: 1. Okt 2004
Ort: Berlin
125 Beiträge
 
Delphi 6 Enterprise
 
#14

Re: TEdit mit DBEdit?

  Alt 5. Nov 2004, 21:24
kann geschlossen werden.

der fehler lag bei mir, da ich die ereignisse in OnCreate und nicht im OnShow eingetragen hatte. Nun läuft es...

Thx für die mithilfe.
  Mit Zitat antworten Zitat
Tharon

Registriert seit: 19. Okt 2004
Ort: Frankfurt/Main
12 Beiträge
 
Delphi 2007 Professional
 
#15

Re: TEdit mit DBEdit?

  Alt 5. Nov 2004, 22:05
Also... Sharky hat schon richtig erkannt, dass ich einfach nicht ständig Form1.DataSource1.DataSet im nachfolgenden Code wiederholen wollte! Allerdings ist wohl das Prinzip noch nicht ganz klar... Ausserdem steckt in seinem Codebeispiel ein gaaanz böser Fehler drin: Erst wird eine neue TDataSet-Instanz erzeugt (was hier völlig unnötig ist), dann wird der Objektvariablen ds eine ganz andere Instanz (nämlich Form1.DataSource1.DataSet) zugewiesen. Im finally-Abschnitt wird dann diese andere Instanz zerstört (also Form1.DataSource1.DataSet) und die neu erzeugte Instanz wird überhaupt nicht zerstört (es gibt ja auch keinen Pointer mehr auf diese neue Instanz)... uiuiuiuiuiuiu....

Die richtige Variante sieht so aus:

Delphi-Quellcode:
procedure TForm1.FormShow(Sender: TObject);
var
  ds : TDataSet; // lokales TDataSet
begin

  ds := Form1.DataSource1.DataSet;
  Panel1.Caption := Format(' Das sind Daten von %s, %s - %s', [ds['Name'], ds['Vorname'], ds['Mitgliedsnummer']]);

  { ... }

end;
Du könntest es auch so schreiben, was aber länger und vor allem schlechter wartbar ist:

Delphi-Quellcode:
procedure TForm1.FormShow(Sender: TObject);
begin

  Panel1.Caption := Format(' Das sind Daten von %s, %s - %s',
                           [Form1.DataSource1.DataSet['Name'],
                            Form1.DataSource1.DataSet['Vorname'],
                            Form1.DataSource1.DataSet['Mitgliedsnummer']
                           ]);

  { ... }

end;
Die Anweisung
ds := TDataSet.Create(Self); musst Du unbedingt aus Deinem Code entfernen! Denn Du erzeugst hier eine neue Instanz, die aber weder benötigt noch verwendet wird (deshalb auch der Compiler-Hinweis "Auf 'ds' zugewiesener Wert wird niemals benutzt") und - was wirklich schlimm ist - niemals freigegeben wird! D.h Du erzeugst bei jedem Aufruf Deines Formulars eine neue TDataSet-Instanz, die dann alle nutzlos ohne Referenz im Speicher rumliegen...

Wenn Du allerdings tatsächlich eine Objektinstanz erzeugen musst, ist der nachfolgende Zugriff auf diese neue Instanz unbedingt durch einen try-finally-Block zu kapseln (so wie es Sharky schon gezeigt hat):

Delphi-Quellcode:
var
  obj1: TMyClass;
begin

  obj1 := TMyClass.Create();
  try
    // Irgendwas mit obj1 machen...
  finally
    obj1.Free;
  end;

end;
Thomas
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 13:47 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