Autor Beitrag
cam
Hält's aus hier
Beiträge: 14



BeitragVerfasst: So 06.03.11 19:47 
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???
ausblenden 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;
  //ds: TADODataSet;
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 user profile iconNarses: Code- durch Delphi-Tags ersetzt
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 06.03.11 20:13 
user profile iconcam hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TForm1.DBOpen(Sender: TObject);
var
  query: TADOQuery;
  //ds: TADODataSet;
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 297

WinXP, Win7
Delphi 2010 Professional
BeitragVerfasst: So 06.03.11 20:43 
Ja du solltest ein
ausblenden Delphi-Quelltext
1:
 query := TADOQuery.Create(Nil);					

vorher benutzen, wenn du es schon selbst anlegen willst.
cam Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: So 06.03.11 22:20 
Danke! Hatte Tomaten auf den Augen ;)
haentschman
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 285
Erhaltene Danke: 33


DX10 Berlin Professional
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 285
Erhaltene Danke: 33


DX10 Berlin Professional
BeitragVerfasst: Mo 07.03.11 22:03 
:gruebel:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 285
Erhaltene Danke: 33


DX10 Berlin Professional
BeitragVerfasst: Mo 07.03.11 22:28 
Bin ich mal froh, daß ich leserlichen, debuggbaren Quelltext produziere... Das Chaos geht ja gar nicht... :roll: