Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Zugriffsfehler ADOQuery (https://www.delphipraxis.net/166000-zugriffsfehler-adoquery.html)

t0mmy 25. Jan 2012 13:58

Datenbank: MSSQL • Version: 2008 • Zugriff über: ADO

Zugriffsfehler ADOQuery
 
Hallo!

Also ich bekomme einen Fehler:

Zitat:

Zugriffsverletzung bei Adresse 00639556 in Modul 'Programm.exe'. Lesen von Adresse 0000000.
und das wenn ich Zweimal ein Query in meinem Programm verwende.


Die sieht folgendermaßen aus:

Delphi-Quellcode:
  with ADOQuery_1 do
  begin
    Close;
    SQL.Clear;
    SQL.Text := 'DELETE FROM Tabelle2'+
                'WHERE Spalte1 LIKE '''+
                NummerString2+'''';
    ExecSQL;

    SQL.Clear;
    SQL.Text := 'DELETE FROM Tabelle1 '+
                'WHERE Spalte1 LIKE '''+
                NummerString2+'''';
    ExecSQL;
    Close;
  end;
Sobald das Query den SQL befehl zugewiesen bekommt schreibt er den Fehler.(Hab ich mit Haltepunkten festgestellt) woran könnte das liegen ich möchte keine eigene Query verwenden!

Bernhard Geyer 25. Jan 2012 14:02

AW: Zugriffsfehler ADOQuery
 
Da hast du wohl entweder deine Query nicht erzeugt oder woanders frei gegeben.

mkinzler 25. Jan 2012 14:02

AW: Zugriffsfehler ADOQuery
 
-Existiert den die Instanz?
-Irgendwelche persistenten (Zugriffs-)felder?
Btw. Die Clearanweisungen sind überflüssig.

t0mmy 25. Jan 2012 14:13

AW: Zugriffsfehler ADOQuery
 
Die Query ist erzeugt.. Wie meinst du das mit dem Freigeben?
Auch das clear löst den fehler nicht -.-

DeddyH 25. Jan 2012 14:34

AW: Zugriffsfehler ADOQuery
 
Delphi-Quellcode:
Assert(Assigned(ADOQuery1));
ADOQuery_1.Close;
ADOQuery_1.SQL.Text := 'DELETE FROM Tabelle2'+
                'WHERE Spalte1 LIKE '''+
                NummerString2+'''';
ADOQuery_1.ExecSQL;
ADOQuery_1.SQL.Text := 'DELETE FROM Tabelle1 '+
                'WHERE Spalte1 LIKE '''+
                NummerString2+'''';
ADOQuery_1.ExecSQL;
Was kommt hierbei? Übrigens solltest Du das Dingen besser parametrisieren.

t0mmy 25. Jan 2012 15:14

AW: Zugriffsfehler ADOQuery
 
Bei deinem Code kommt wieder einer Zugriffsverletzung -.-

DeddyH 25. Jan 2012 15:22

AW: Zugriffsfehler ADOQuery
 
Und in welcher Zeile?

p80286 25. Jan 2012 16:59

AW: Zugriffsfehler ADOQuery
 
wie wäre es hiermit:
Code:
ADOQuery_1.Close;
ADOQuery_1.SQL.Text := 'DELETE FROM Tabelle2'+
                'WHERE Spalte1 LIKE '''+
                NummerString2+'''';
ADOQuery_1.ExecSQL;
ADOQuery_1.Close;
ADOQuery_1.SQL.Text := 'DELETE FROM Tabelle1 '+
                'WHERE Spalte1 LIKE '''+
                NummerString2+'''';
ADOQuery_1.ExecSQL;
ADOQuery_1.Close;
Gruß
K-H

DeddyH 25. Jan 2012 17:28

AW: Zugriffsfehler ADOQuery
 
Spinne ich, oder ist nach ExecSQL die Datenmenge sowieso geschlossen? Ich hege wie meine Vorredner ja auch eher den Verdacht, dass die Query gar nicht mehr (oder noch nicht) existiert, aber nicht nil ist.

Sir Rufo 25. Jan 2012 17:57

AW: Zugriffsfehler ADOQuery
 
Wenn das so ausgeführt wird, dann sollte zunächst mal ein Fehler vom SQL Server zurückkommen, denn hinter Tabelle2 fehlt ein Leerzeichen ;)

DeddyH 25. Jan 2012 18:44

AW: Zugriffsfehler ADOQuery
 
:lol: Jo stimmt, jeder hat "geguttenbergt", und niemand hat das gesehen^^.

t0mmy 26. Jan 2012 07:19

AW: Zugriffsfehler ADOQuery
 
Auch der Code vom p80286 gibt mir einen Zugriffsfehler -.- also ich steh an. Ich greife in meinem Programmcode zweimal auf die Query zu aber bei dem beispiel hier mit NummerString2 funktionierts nicht -.-

DeddyH 26. Jan 2012 07:22

AW: Zugriffsfehler ADOQuery
 
Nochmal: in welcher Zeile kommt der Fehler?

haentschman 26. Jan 2012 07:23

AW: Zugriffsfehler ADOQuery
 
Moin...
du wurdest schon mehrfach gefragt wo die Instanz der Query erzeugt wird.
Zitat:

Die Query ist erzeugt..
...wo, wie, wann ?

Sir Rufo 26. Jan 2012 08:09

AW: Zugriffsfehler ADOQuery
 
Zitat:

Zitat von t0mmy (Beitrag 1147660)
Auch der Code vom p80286 gibt mir einen Zugriffsfehler -.- also ich steh an. Ich greife in meinem Programmcode zweimal auf die Query zu aber bei dem beispiel hier mit NummerString2 funktionierts nicht -.-

Es wäre evtl. hilfreich, wenn du uns mal den gesamten Code dieser Unit zeigst (evtl. sogar das ganze Projekt). Mir scheint, als ob du irgendwo unbeabsichtigt die Instanz wieder freigibst

DeddyH 26. Jan 2012 08:32

AW: Zugriffsfehler ADOQuery
 
Zitat:

Zitat von Sir Rufo (Beitrag 1147667)
Mir scheint, als ob du irgendwo unbeabsichtigt die Instanz wieder freigibst

Damit sind wir schon zu dritt. Aber es kommen ja keine gescheiten Infos.

t0mmy 26. Jan 2012 09:35

AW: Zugriffsfehler ADOQuery
 
Okay, bevor ich jetzt dumm und deppat alles probier hab ich einfach eine eigene Query erstellt.. aber die funktioniert auch nicht.. wo liegt blos der fehler???

[Edit]: Verdammter Scheiss es liegt am NummerString2 wenn ich den als ShowMessage ausgeben möchte dann kommt schon der fehler. Aber an was kann kann das liegen ich hol mir die NummerString2 von der DBGrid per SelectedFiel.AsString...

t0mmy 26. Jan 2012 09:48

AW: Zugriffsfehler ADOQuery
 
Ein Assigned(DBGrid.SelectedFiel) := True funktioniert nicht da er den fehler Der linken Seite kann nichts zugewiesen werden bringt -.-

DeddyH 26. Jan 2012 09:53

AW: Zugriffsfehler ADOQuery
 
Ich kann Dir nicht folgen. Wieso greifst Du eigentlich auf das DBGrid zu statt auf die angeschlossene Datenmenge?

t0mmy 26. Jan 2012 09:59

AW: Zugriffsfehler ADOQuery
 
Ja weil ich über das DBGrid die Auswähl tätigen möchte spriche meine Nummer zu bekommen aber nicht weiss wie ich das mit der DataSource mache -.-

p80286 26. Jan 2012 10:10

AW: Zugriffsfehler ADOQuery
 
Zitat:

Zitat von Sir Rufo (Beitrag 1147667)
Es wäre evtl. hilfreich, wenn du uns mal den gesamten Code dieser Unit zeigst (evtl. sogar das ganze Projekt). Mir scheint, als ob du irgendwo unbeabsichtigt die Instanz wieder freigibst

Ohne Sourcen hat das langsam keinen Zweck mehr!

Gruß
K-H

t0mmy 26. Jan 2012 10:18

AW: Zugriffsfehler ADOQuery
 
muss ich meine DBGrid initializieren damit ein selectedfield.asString funktioniert?
wie geht das?

DeddyH 26. Jan 2012 10:23

AW: Zugriffsfehler ADOQuery
 
Du willst auf ein bestimmtes Feld im aktuellen Datensatz zugreifen, stimmt das soweit?

haentschman 26. Jan 2012 10:25

AW: Zugriffsfehler ADOQuery
 
Nochmal... arbeite direkt mit dem Dataset (Table/Query) und nicht über 3 Ecken über das Grid. Das ist nur zur Darstellung da.

Beispiel für direkten Zugriff:
Delphi-Quellcode:
Label1.Caption:= Query1.FieldByName('VORNAME').asString

t0mmy 26. Jan 2012 10:32

AW: Zugriffsfehler ADOQuery
 
@DeddyH: Ja so ist es.. Da ich in der DBGrid einige Zeilen habe möchte ich per Mausauswahl das jeweilige Feld löschen.

@haentschman: Deine Idee ist gut, jedoch hab ich die auch schon probiert und da bekomme ich auch einen Zugriffsfehler.
Ich hab auch nicht meine Query geschlossen nachdem ich Abgefragt habe.
Wie das mit der Datasource gehen soll is mir bissal unklar.. ich hab da einiges probiert aber nur fehler bekommen scheint das ich das falsche benütze :(

haentschman 26. Jan 2012 10:36

AW: Zugriffsfehler ADOQuery
 
Zitat:

...und da bekomme ich auch einen Zugriffsfehler.
...dann beantworte mal meine Frage von vorhin und zeige deinen Code. Den Zugriffsfehler bekommst du nur weil dein Dataset nicht (mehr) vorhanden ist.

DeddyH 26. Jan 2012 10:43

AW: Zugriffsfehler ADOQuery
 
Wenn das Dataset nicht mehr da oder geschlossen ist, sollte aber auch das Grid nix mehr anzeigen. Gehen wir mal den umständlichen Weg:
Delphi-Quellcode:
Nummer2 := DBGrid.Datasource.Dataset.FieldByName('WasWeißIchWieDasFeldHeißt').AsInteger;

Sir Rufo 26. Jan 2012 11:08

AW: Zugriffsfehler ADOQuery
 
Hmmm ... jetzt haben ihn irgendwie schon 3 Leute - alle die ihm hier antworten - aufgefordert, mal den gesamten zusammenhängenden Code zu zeigen und er reagiert noch nicht einmal darauf.
Ich habe jeden falls nirgends etwas wie "nee, geht nicht, weil..." von ihm gefunden.

Also entweder ist das hier das lang gesuchte WeltBeherrschungsUniversalTool - würde ich ja auch nicht posten, erst mal will ich die Welt beherrschen, dann käme der Daniel an die Reihe, und dann ... mal schauen - oder der TE hat einfach Langeweile
(oder er hat was an den Augen= :gruebel: )

t0mmy 26. Jan 2012 12:20

AW: Zugriffsfehler ADOQuery
 
Ja, ich weiss, ich hätte den code auch gepostet wenn der nicht über 1000 zeilen gehen würde!
Ich hab auch alles probiert was ihr mir geraten habt aber ohne erfolg.

Ich habe jetzt den Fehler eingegrenzt:

Delphi-Quellcode:
ShowMessage(Main.DBGrid2.SelectedField.AsString);
Hier kommt die Zugriffsverletzung -.-

Auf die Antwort die ich mitgeteiltbekommen: Es ist nicht initialisiert? Meine Frage: was und wie?

DeddyH 26. Jan 2012 12:26

AW: Zugriffsfehler ADOQuery
 
Delphi-Referenz durchsuchenSelectedField
Zitat:

Gibt die Feldkomponente an, die der aktuell markierten Zelle des Gitters entspricht.

Mit SelectedField können Sie den Fokus zu einem bestimmten Feld des Gitters verschieben. Außerdem können Sie auf die Feldkomponente zugreifen, die der aktuell markierten Zelle entspricht. Ist keine Zelle markiert, hat SelectedField den Wert nil (Delphi) bzw. NULL (C++). Dies ist der Fall, wenn beispielsweise eine Zeile markiert wurde.
Soll das etwa heißen, dass SelectedField vielleicht nicht die beste Vorgehensweise darstellt? Sollte man dann evtl. besser über die Datenmenge gehen? Wurde das etwa schon mehrfach erwähnt?

p80286 26. Jan 2012 12:32

AW: Zugriffsfehler ADOQuery
 
Zitat:

Zitat von t0mmy (Beitrag 1147745)
Delphi-Quellcode:
ShowMessage(Main.DBGrid2.SelectedField.AsString);
Hier kommt die Zugriffsverletzung -.-

das heißt Dein dbgrid und/oder das Selectedfield zeigt ins Nirwana, da ist nichts, nada niente,null,nil .....

Wenn da mal was war, dann ist es jetzt weg.
(und meine Kristallkugel ist auch nicht da)

Gruß
K-H

P.S.
1000 Zeilen Daten und Oberfläche fröhlich gemischt?
wofür dann oop ???

Sir Rufo 26. Jan 2012 12:34

AW: Zugriffsfehler ADOQuery
 
Zitat:

Zitat von p80286 (Beitrag 1147753)
P.S.
1000 Zeilen Daten und Oberfläche fröhlich gemischt?
wofür dann oop ???

Programmieren als Klick-Adventure :mrgreen:

DeddyH 26. Jan 2012 12:47

AW: Zugriffsfehler ADOQuery
 
[OT]
Zitat:

Zitat von Sir Rufo (Beitrag 1147756)
Programmieren als Klick-Adventure :mrgreen:

The curse of ADO Island :mrgreen: [/OT]

t0mmy 26. Jan 2012 12:51

AW: Zugriffsfehler ADOQuery
 
Genau... ich hab alles in drei Buttons drinnen -.-

Sir Rufo 26. Jan 2012 12:54

AW: Zugriffsfehler ADOQuery
 
Ich glaube ich weiß jetzt was der Fehler ist ... wie geil ...

Ich wette, dass ADOQuery2 dazu benutzt wird, um das DBGrid mit Daten zu befüllen ... ja und wenn man dann mit ADOQuery2 - aus reiner Sparsamkeit, soll ja nichts verkommen - ein Statement ausführt, dann darf man sich auch nicht wundern, wenn dann da was in die Hose geht.

t0mmy 26. Jan 2012 12:57

AW: Zugriffsfehler ADOQuery
 
Wie gern würd ich dir recht geben. Aber ich hab weiter oben geschrieben das ich eine eigene Query erstellt habe und nochmal geschrieben das ich wenn ich auf den datensatz über die query zugreife ich auch eine zugriffsverletzung bekomme

Sir Rufo 26. Jan 2012 12:59

AW: Zugriffsfehler ADOQuery
 
Kannst du mal nur die dfm-Datei hier posten ... dann sehen wir auch schon mehr

Allerdings sind auch 1000 Zeilen (gepackt als ZIP) kein Problem


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