Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Zugriffsverletzung bei SQL Abfrage (mit Params) [gelöst] (https://www.delphipraxis.net/77701-zugriffsverletzung-bei-sql-abfrage-mit-params-%5Bgeloest%5D.html)

Deadinpac 23. Sep 2006 14:02

Datenbank: Paradox • Version: 7 • Zugriff über: TQuery;TDatasource

Zugriffsverletzung bei SQL Abfrage (mit Params) [gelöst]
 
Moin,

Ich erhalte immer eine Zugriffsverletzung bei einer SQL Abfrage mit Params!
vieleicht könnt ihr mir weiterhelfen?

Delphi-Quellcode:
uses Inifiles;
Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
var
ini: Tinifile;
begin
try
Ini := TIniFile.Create(Datapfad+Listbox3.Items[ListBox3.ItemIndex]);
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Text := ini.ReadString('SQL','SQLS','');
Query1.ParamCheck := True;
Query1.ParamByName('SF1').AsString := S1SF1.Text;
Query1.Open;
finally
    Ini.Free;
end;
end;
Ini-File
SQL-Code:
[*SQL*]
SQLS=SELECT * FROM infosS1 WHERE (Name = :SF1)
(*) Nur Wegen den BBCODES

Zugriffsverletzung
Code:
Zugriffsverletzung bei Adresse 004CE470 in Modul 'swinfo.exe'. Lesen von Adresse 00000000.
Habe mir schon andere Codes hier im Forum angeguckt aber ich finde kein Fehler :wall:

MFG
Sven

marabu 23. Sep 2006 14:40

Re: Zugriffsverletzung bei SQL Abfrage (mit Params)
 
Hallo Sven,

einen Fehler an deinem SELECT-Statement kann ich auch nicht entdecken. Die genaue Code-Zeile, bei der die Zugriffsverletzung auftritt, hast du leider nicht angegeben. "Lesen von Adresse 0000" ist ein Zeichen dafür, dass ein Zeiger nicht initialisert war. Vielleicht trotzdem noch ein paar Hinweise:

Delphi-Quellcode:
const
  SECTION_NAME = 'SQL';
  KEY_NAME = 'SQLS';
  PARAM_NAME = 'SF1';

procedure TForm1.Button3Click(Sender: TObject);
var
  ini: TMemIniFile;
  fn: TFileName;
  stmt: String;
begin
  with ListBox3 do
    fn := DatenPfad + Items[ItemIndex];

  with TMemIniFile.Create(fn) do
  try
    stmt := ReadString(SECTION_NAME, KEY_NAME, '');
    ShowMessage(stmt); // ist da wirklich ein Parameter SF1 drin?
  finally
    Free;
  end;

  with Query1 do
  begin
    // Close; // nicht nötig, weil SQL.Text neu gesetzt wird
    // SQL.Clear; // überflüssig weil SQL.Text als Ganzes verändert wird
    SQL.Text := stmt;
    // Query1.ParamCheck := True; // nur einmal im OI setzen
    ParamByName('SF1').AsString := S1SF1.Text;
    Open;
  end;
end;
Wichtig ist, dass wirklich die richtige INI-Datei geöffnet wird - nämlich die, welche du im Editor verändert hast.

Grüße vom marabu

Deadinpac 24. Sep 2006 00:23

Re: Zugriffsverletzung bei SQL Abfrage (mit Params) [gelöst]
 
Danke @marabu

komischer weise nachdem ich gepostet habe und gucken wollte bei welchen Zeiger er die zugriffsverletzung anzeigt ging alles Ganz normal ohne zugriffsverletzung *komisch*

Aber ich habe jetzt trozdem dein Code verwendet der sieht mir besser geschrieben aus :)

MFG
Sven


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