Announcement

Collapse
No announcement yet.

Zugriffsverletzung bei TQuery

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Zugriffsverletzung bei TQuery

    Hallo,

    ich habe ein sehr seltsames Problem. Ich installiere mein Delphi-Programm (Delphi 5) und die BDE (5.1.) über InstallShield-Express. Öffne ich ein Formular in dem ein Datenzugriff (PARADOX) über eine Query-Komponente erfolgt, bekomme ich eine Zugriffsverletzung. Das Formular läßt sich auch nicht sauber schließen. Starte ich das Programm erneut, läuft eigenartigerweise alles prima. Ich habe alles mögliche getestet um herauszufinden, an welcher Stelle der Fehler auftritt. Es ist zwar seltsam, aber ich glaube das nur der erste Zugriff über eine beliebige Query im Programm den Fehler verursacht. Formulare in denen über ein TTable-Komponente zugegriffen wird, laufen einwandfrei.
    Der Fehler tritt bei NT, Windows 2000 und XP auf. WIN 9x haben wir nicht getestet. Hat jemand eine Idee ?

  • #2
    Hallo,

    da Paradox keine SQL-Datenbank ist, muss die BDE diese Fähigkeit über LOCAL SQL simulieren, wozu temporäre Tabellen angelegt werden. Da die BDE diese Ressourcen global für alle Prozesse verwaltet hört sich das so an, also ob der 1. Versuch schiefgeht. Ich würde folgendes versuchen (..alles ein Schuss ins Blaue...):

    1. BDE-Verwaltung | Konfiguration | System | INIT: <br>
    Parameterwerte hochsetzen (siehe Hilfe) und mit dem Wert für SHAREDMEMLOCATION experimentieren.

    2. Prüfen, ob die Umgebungsvariablen für TMP und TEMP gesetzt sind und der Benutzer auch Rechte an diesen Verzeichnissen hat.

    3. Prüfen, ob der Benutzer Rechte am Registryzweig der BDE hat (d.h. tritt das Problem auch beim interaktiv angemeldeten Administrator auf?

    Comment


    • #3
      Hallo Herr Kosch,

      vielen Dank für die rasche Antwort. Ich habe das Problem gelöst, kenne aber die Ursache nicht. Ich habe in mein Projekt eine Art Mandantenverwaltung integriert. Nach dem Start schaut das Programm nach, ob eine Mandantentabelle (PARADOX ohne Primärindex) im lokalen Verzeichnis vorhanden ist. Wenn nicht, wird die Tabelle angelegt. Nun ist mir bekannt, daß man Tabellen nicht im Programmverzeichnis ablegen soll. Die Tabelle wird wiefolgt erzeugt:

      With TTable.Create(Nil) Do
      Begin
      TableName := DName;
      With FieldDefs Do
      Begin
      Add('MA_NR', TFieldType(14) ,0,False);
      Add('MA_NAME', TFieldType(1) ,40,False);
      Add('MA_VERZ', TFieldType(1) ,200,False);
      Add('MA_MENUE', TFieldType(1) ,255,False);
      End;
      CreateTable;
      Close;
      Free;
      End;

      Da ich festgestellt habe, daß mein Problem nur mit dem Anlegen oder Vorhandensein dieser Tabelle zu tun haben kann, habe ich das Programm geändert. Die Tabelle wird nun mit einem SQL-Befehl erzeugt.

      ExecuteQuery (GV_PROGVERZEICHNIS,
      'CREATE TABLE "MANDANTEN.DB" ' +
      ' (MA_NR AUTOINC,
      MA_NAME CHAR(40),
      MA_VERZ CHAR(200),
      MA_MENUE CHAR(255))');

      Siehe da, es funktioniert alles so wie es soll. Wo lag hier das Problem

      Comment

      Working...
      X