Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Fehler bei SQL und Combobox.Items.Add (https://www.delphipraxis.net/62585-fehler-bei-sql-und-combobox-items-add.html)

Avax2k 6. Feb 2006 23:59

Datenbank: ACCESS • Version: 2003 • Zugriff über: ADO

Fehler bei SQL und Combobox.Items.Add
 
hallo habe folgenden Code..der auch super beim ERSTEN MAL funktioniert!!

Delphi-Quellcode:
procedure TForm1.FillComboBox2 (aCB : TspSkinComboBox);
begin
  try
    ADOQuery7.Close;
    ADOQuery7.SQL.Text := 'SELECT * FROM Test WHERE ID = 7 ORDER BY ID ASC';
    ADOQuery7.Open;
    while not (ADOQuery7.Eof) do
    begin
      aCB.Items.Add(ADOQuery7.FieldByName('ID').AsString);
      ADOQuery7.Next;
    end;
  finally
    ADOQuery7.Free;
  end;
end;
soweit so gut..NUR wenn ich ein zweites Mal die Funktion aufrufe (ist auf einen Button gelegt) dann bekomme ich Fehler : EAccessviolation at address 0048A992 read of address: 00000000.

was ist denn das und wieso kommt da ein Fehler sollte doch problemlos funktionieren und eben bei jedem Druck auf den Knopf alles anzeigen?!

ach ja der Knopf ist so
FillComboBox2(ComboBox1);

marabu 7. Feb 2006 06:59

Re: Fehler bei SQL und Combobox.Items.Add
 
Guten Morgen.

Wenn du die Query-Komponente am Ende zerstörst, dann kannst du sie nur einmal benutzen. Wenn sich die Ergebnismenge nicht ändert, solltest du sie nur einmal einlesen. Bei deinem SQL-Statement fällt mir auf, dass du ID (PK?) selektierst (1 Treffer), nach ID sortierst und dann auch noch den ID in die ComboBox einträgst. Macht sowas Sinn?

Delphi-Quellcode:
procedure TForm1.FillComboBox2 (aCB : TspSkinComboBox);
begin
  with ADOQuery7 do
  try
    SQL.Text := 'SELECT * FROM Test WHERE ID = 7 ORDER BY ID ASC';
    Open;
    while not Eof do
    begin
      aCB.Items.Add(FieldByName('ID').AsString);
      Next;
    end;
  finally
    Close;
  end;
end;
Grüße vom marabu

Avax2k 7. Feb 2006 11:59

Re: Fehler bei SQL und Combobox.Items.Add
 
hallo marabu :P

abermals darf ich mich für deine Hilfe recht herzlich bedanken.
Jetzt weiss ich, dass ich kein zweites Mal aufKomponenten zugreifen kann sofern diese zuvor freigegeben worden sind..hätte diesen Fehler nur dann entdecken können, wenn Delphi ein wenig präziser mit der Fehlermeldung gewesen wäre oder wenigstens in der Procedur anhalten würde und nicht nach dem Aufruf der Procedur. In dem Beispiel habe ich mit Absicht eine feste ID genommen um sicherzustellen, dass das von mir gewollte auch tatsächlich funktioniert. Es wird aber "umgebaut" und es wird nach mehreren Kriterien gesucht. Aber wie du sagtest sonst mit lediglich der Verwendung eines Parameters hätte diese Funktion gar keinen Sinn.

Nochmals danke, auf dich kann ich immer zählen :D :thumb:

Bernhard Geyer 7. Feb 2006 12:10

Re: Fehler bei SQL und Combobox.Items.Add
 
Zitat:

Zitat von Avax2k
..hätte diesen Fehler nur dann entdecken können, wenn Delphi ein wenig präziser mit der Fehlermeldung gewesen wäre oder wenigstens in der Procedur anhalten würde und nicht nach dem Aufruf der Procedur.

Kenst Du FastMM (wird auch in D2006 verwendet). Dies ist ein anderer Memory-Manager der die solche Fehler besser meldet (so in der Art: "Auf freigegebenen Speicherbereich wird zugegriffen")


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:15 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 by Thomas Breitkreuz