Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Zugriffsverletzung (https://www.delphipraxis.net/118423-zugriffsverletzung.html)

Geraldine83 7. Aug 2008 13:44

Datenbank: ? • Version: ? • Zugriff über: ODBC

Zugriffsverletzung
 
Hallo,

ich habe ein Merkwürdiges Problem.
Ich wollte eine Exe starten und dort kommt jetzt ne Zugriffsverletzung.

Wen ich den Quellcode debugge kommt eine Fehlermeldung von EAccessViolation.
Quellcode wurde nicht geändert.

Die Fehlermeldung kommt an einer Stelle:
Q_RelAc.SQL.Clear

Die Query wurde vorher geschlossen. Das Merkwürdige ist, dass er einmal
ordnungsgemäß durchläuft und beim zweiten Mal kommt die Fehlermeldung.

An was könnte das liegen?

Grüßle Geraldine

DeddyH 7. Aug 2008 13:45

Re: Zugriffsverletzung
 
Und das sollen wir an einer(!) Zeile Quellcode erkennen?

mkinzler 7. Aug 2008 13:46

Re: Zugriffsverletzung
 
Ohne weitere Infos/Code werden wir dir nicht helfen können
Btw.: Statt
Delphi-Quellcode:
Q_RelAc.SQL.Clear;
Q_RelAc.SQL.Add();
würde ich
Delphi-Quellcode:
Q_RelAc.SQL.Text := ...;
verwenden

Geraldine83 7. Aug 2008 13:52

Re: Zugriffsverletzung
 
anbei der Quellcodeteil...

Bei SQL.Clear springt er raus...

Delphi-Quellcode:
with Q_RelAc do
               begin
                  SQL.Clear;
                  if fMain.IniWerte.LVSFile = '1' then
                  begin
                      Q_RelAc.SQL.Add('select ik, mnr, ktxt, uschl, usartklasse, usplatzgroesse, usmaxbest, gewicht, me, createdate '+
                              'from relac '+
                              'where '+
                              'uslvs = :p0');
                  end
                  else
                  if fMain.IniWerte.LVSFile = '3' then
                  begin
                      Q_RelAc.SQL.Add('select x.ik, a.mnr, a.ktxt, a.uschl, x.usartklasse, x.usplatzgroesse, x.usmaxbest, a.gewicht, a.me, a.createdate '+
                              'from relac a, relacx x '+
                              'where '+
                              'x.uslvs = :p0 '+
                              'and x.mnr = a.mnr');
                  end;
                  Params[0].AsInteger := lvsReady;
                  Open;
                  First;
                  while not EoF do
                     begin
                        //StartTimer('Vorbereitung für ASCII-Datei (Stammdaten)');
                        S := FormatDateTime('yyyymmddhhnnsszzz', Now);
                        F := Format(fnMMArtikel, [S]);
//                        Z := FieldByName('Ik').AsInteger;
                        Z := Fields[0].AsInteger;
                        //StopTimer;
                        //StartTimer('Schreiben der ASCII-Datei (Stammdaten)');
                        WriteDownloadFile2(
                           D[1] + F,                               // Dateiname
                           D[2] + F,                               // Dateiname für Sicherungskopie
                           Fields[1].AsString,
                           Fields[2].AsString,
                           Fields[3].AsString,
                           Fields[4].AsInteger,
                           Fields[5].AsInteger,
                           Fields[6].AsFloat,
                           Fields[7].AsFloat,
                           Fields[8].AsString);
// Geändert 09.07.2006 /EH wegen variablem SQL ac / Acx
//                           FieldByName('MNr').AsString,            // Artikel
//                           FieldByName('KTxt').AsString,           // Beschreibung 1
//                           FieldByName('Uschl').AsString,          // Beschreibung 2
//                           FieldByName('USArtKlasse').AsInteger,   // Artikelklasse
//                           FieldByName('USPlatzGroesse').AsInteger, // Platzgröße
//                           FieldByName('USMaxBest').AsFloat,       // Max. Bestand
//                           FieldByName('Gewicht').AsFloat,         // RefGewicht
//                           FieldByName('ME').AsString);            // Einheit
                        //StopTimer;
                        //StartTimer('Update RELAC (Status=0)');
                        UpdateStatusRELAC(Z, lvsOk);
                        //StopTimer;
                        Next;
                     end;
                  Close;
                  Free;

mkinzler 7. Aug 2008 13:55

Re: Zugriffsverletzung
 
Warum kein Case
Kann fMain.IniWerte.LVSFile auch andere Werte als 1 und 3 annehmen?

Geraldine83 7. Aug 2008 13:57

Re: Zugriffsverletzung
 
Ne, andere Werte gibt es bis jetzt nicht.
Das komische ist, der Quellcode lief / läuft, aber wenn ich ihn jetzt starten will, dann kommt die Fehlermeldung.
Es wurde nichts geändert...

DeddyH 7. Aug 2008 14:04

Re: Zugriffsverletzung
 
Mir ist das Free am Ende aufgefallen. Wird die Query bei jedem Aufruf neu erzeugt?

p80286 7. Aug 2008 16:38

Re: Zugriffsverletzung
 
Ich denke auch, daß das free am Ende den Ärger macht. Das zugehörige create hab ich nirgendwo gefunden.

Gruß
K-H

p.s.
Zitat:

Zitat von Geraldine83
Ne, andere Werte gibt es bis jetzt nicht.
Das komische ist, der Quellcode lief / läuft, aber wenn ich ihn jetzt starten will, dann kommt die Fehlermeldung.
Es wurde nichts geändert...

Wunder gibt es immer wieder!

Geraldine83 8. Aug 2008 07:03

Re: Zugriffsverletzung
 
Hallöchen,

ich hab jetzt das free rausgenommen und man siehe... es funktioniert.
Danke an alle, die mir geholfen haben!

Grüßle Geraldine

:bounce2:


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:16 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