Entwickler-Ecke
Datenbanken - Zugriffsverletzung bei Adresse ...
cam - So 06.03.11 19:47
Titel: Zugriffsverletzung bei Adresse ...
Hallo an alle,
ich hoffe, ihr könnt mir helfen. Wir suchen schon seit Stunden eine Lösung.
Ich will den Inhalt einer Tabellenspalte (MS SQL Server 2008) in eine ComboBox (Delphi 2009) schreiben.
Beim Ausführen des Codes komme ich immer bis zur Ausgabe 'Datenbankverbindung steht' danach kommt folgende oder ähnliche Fehlermeldung (variiert): "Zugriffsverletzung bei Adresse 63696C43. Lesen von Adresse 63696C43" - Wo liegt das Problem???
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29:
| procedure TForm1.DBOpen(Sender: TObject); var query: TADOQuery; begin try ADOConnection1.Open(); ShowMessage('Datenbankverbindung steht'); with query do begin Close; SQL.Clear; SQL.Add('SELECT Name FROM Tabelle'); Open; CBZaehlliste.Items.Clear; ShowMessage('Abfrage ausgeführt'); First; while not query.Eof do begin ShowMessage(FieldByName('Name').AsString); CBZaehlliste.Items.Add(FieldByName('Name').Text); Next; end; end; except on e: exception do begin ShowMessage(e.Message); end; end; end; |
Moderiert von
Narses: Code- durch Delphi-Tags ersetzt
jaenicke - So 06.03.11 20:13
cam hat folgendes geschrieben : |
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TForm1.DBOpen(Sender: TObject); var query: TADOQuery; begin try ADOConnection1.Open(); ShowMessage('Datenbankverbindung steht'); with query do begin Close; | |
Naja, du deklarierst query, initialisierst die Variable aber nicht. Die entsprechende Compilerwarnung hast du offenbar einfach mal ignoriert... :roll: :autsch:
SmileySN - So 06.03.11 20:43
Ja du solltest ein
Delphi-Quelltext
1:
| query := TADOQuery.Create(Nil); |
vorher benutzen, wenn du es schon selbst anlegen willst.
cam - So 06.03.11 22:20
Danke! Hatte Tomaten auf den Augen ;)
haentschman - Mo 07.03.11 21:48
...dann hätte ich noch den with query do Block. Setze mal vor jede Zeile das "query". da kommen komische Sachen dabei raus. Komisch, daß das nicht angemeckert wird. Daß with nur in Ausnahmefällen benutzen.
:wave:
jaenicke - Mo 07.03.11 21:51
Das Problem ist doch schon behoben. ;-)
Wegen with: Das funktioniert schon, es macht den Code nur extrem unübersichtlich und damit fehleranfällig und verhindert effektives Debuggen, aber funktionieren tut es. ;-)
haentschman - Mo 07.03.11 22:03
:gruebel:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| while not query.Eof do begin ShowMessage(FieldByName('Name').AsString); CBZaehlliste.Items.Add(FieldByName('Name').Text); Next; end; |
...dieser komplette Block steht innerhalb des with Blockes... und das funktioniert ? :shock: Ich lasse mich gern belehren. Aber das ist unlogisch. :zwinker:
jaenicke - Mo 07.03.11 22:16
Klar geht das. Innerhalb von "with query" gibt es kein "query", also wird außerhalb geschaut und dort das query gefunden. ;-)
Du bist innerhalb von with nicht gezwungen den with-Ausdruck wegzulassen.
haentschman - Mo 07.03.11 22:28
Bin ich mal froh, daß ich leserlichen, debuggbaren Quelltext produziere... Das Chaos geht ja gar nicht... :roll:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!