Announcement

Collapse
No announcement yet.

Wieder mal: PDOXUSRS.LCK

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

  • Wieder mal: PDOXUSRS.LCK

    Ich weiß, Probleme mit diesen Netzwerk-Sperrdateien wurden schon oft diskutiert, aber hier nun mein Problem:<BR>
    Die PDOXUSRS.NET liegt <I>einmalig</I> in einem separaten Verzeichnis auf einem Netzlaufwerk (Novell).<BR>
    In einem anderen Netzlaufwerk sind die Datenbanken gespeichert.<BR>
    Anwender, die Daten in die DB schreiben haben logischerweise RW-Rechte auf dieses Verzeichnis.<BR>
    Anwender, die diese Daten nur zur Sichtung benötigen, haben nur Read-Rechte<BR>
    auf dieses Verzeichnis. So kann verhindert werden, daß DB-Dateien z.B. mit den Explorer gelöscht werden.<BR>
    Jetzt aber das Problem:<BR>
    Delphi will genau in diesem Verzeichnis die .LCK-Dateien ablegen.<BR>
    Liegen die .LCK-Dateien immer (automatisch) im DB-Verzeichnis?<BR>
    <BR>
    Für Infos bin ich dankbar.<BR>
    Gruß Gunnar.

  • #2
    Hallo,

    die interne Reihenfolge der Zugriffe auf eine Paradox-Datenbank im Netwerk habe ich in meinem Buch <i>Client/Server-Datenbankentwicklung mit Delphi</i> auf den Seiten 114ff beschrieben: <br>
    1. Zugriff auf die Netzwerksperrdatei <i>pdoxusrs.net</i> <br>
    2. Prüfung, ob alle Clients den gleichen Zugriffspfad verwenden <br>
    3. Privates Verzeichnis wird mit <i>paradox.lck</i> geschützt <br>
    4. Zur Sicherheit wird der Paradox 4-Sperrmechnismus (vor der BDE-Zeit) über <i>pdoxusrs.lck</i> im <b>Datenbankverzeichnis</b> gesetzt, wenn der Zugriff über das Netzwerk erfolgt. Die BDE benötigt diese Datei nicht - sie soll eventuelle nur Uralt-DOS-Programme abblocken.

    Eine Lösungsweg für dieses Problem beschreibe ich auf der Seite 118: Das eigene Programm ruft einmalig <b>DbiAcqPersistTableLock</b> auf, um eine Sperrdatei "auf Verdacht" anzulegen, die dann als Datei in diesem Netzverzeichnis angelegt wird. Wenn dann alle Dateien mit ReadOnly geflagt werden, ist die Sperrdabei zu Zugriff schon da, so dass die BDE den Schritt 4 auslässt.
    &#10

    Comment


    • #3
      Hallo Andeas!<BR>
      Danke für die schnelle Reaktion.<BR>
      Ich habe diverse Delphi-Bücher, auch von dir (Interbase), aber o.g. z.Z. <I>noch</I> nicht!<BR>
      Könntest du den Lösungsansatz als Beispiel hinterlegen?<BR>
      Denn das Problem muß mal wieder sofort gelöst werden.<BR>
      Danke und Gruß<BR>
      Gunna

      Comment


      • #4
        Hallo,

        das folgende Beispiel stammt aus der Hilfedatei <b>BDE32.HLP</b> (zu finden im BDE-Verzeichnis):
        <pre>
        Place a lock on a non-existent table:

        This example places and releases persistent lock on the TTable T. This example uses the following input:

        AcqAndRelPersistTableLock(Table1);

        procedure AcqAndRelPersistTableLock(T: TTable);
        var
        Drv: PChar;
        begin
        with T do begin
        if (TableType = ttParadox) then
        Drv := StrNew(szParadox)
        else if (TableType = ttdBASE) then
        Drv := StrNew(szdBASE)
        else Drv := nil;
        try
        Check(DbiAcqPersistTableLock(DBHandle, PChar(TableName), Drv));
        Check(DbiRelPersistTableLock(DBHandle, PChar(TableName), Drv));

        finally
        if Assigned(Drv) then StrDispose(Drv);
        end;
        end;
        end;
        </pre>
        In meinem Buch ist nur die Schreibweise kürzer:
        <pre>
        Check(DbiAcqPersistTableLock(Database1.Handle, 'NoTable.db', szParadox));
        </pre&gt

        Comment


        • #5
          Hallo Andreas!<BR>
          Hatte nach deinem Hinweis auf <B>DbiAcqPersistTableLock</B> auch schon die BDE-Hilfe bemüht. Aber es funktioniert immer noch nicht so, wie es nach deiner Beschreibung hätte funktioniern sollen.<BR>
          Also: Habe den DbiAcqPersistTableLock-Aufruf mit Verweis auf TDatabase-Handel, nicht existestente Datei 'NoTable.DB' und Dateityp szParadox eingebaut.<BR>
          Die Aufruf erzeugt auch im DB-Verzeichnis die Dateien PARADOX.LCK und PDOXUSRS.LCK .<BR>
          Auch kann ich diese Dateien Read-Only flaggen. Beim Beenden des Programms sind diese dann weiterhin vorhanden.<BR>
          Habe dann das Programm mit und ohne DbiAcq..-Aufruf nochmals gestartet
          und bekomme ich beim Zugriff auf die Tabellen den Fehler:<BR>
          <I>Verzeichnis ist schreibgeschützt. Zugriff verweigert. Datei: PFAD/podxusers.lck Datei bereits vorhanden</I>
          Die Tabellen werden dann nicht geöffnet. D.h. Delphi will weiterhin diese .LCK-Dateien erzeugen.<BR>
          Was habe ich da übersehen oder was läuft quer?<BR>
          Für den entscheidenden Tip bin ich dankbar.<BR>
          <BR>
          Gruß Gunna

          Comment


          • #6
            Hallo,

            wie öffnet das Programm die Datenbank? Die Eigenschaft <b>ReadOnly</b> sollte sowohl bei <b>TDatabase</b> (virtueller BDE-Alias) als auch bei <b>TTable</b> auf True gesetzt werden, wenn ein Anwender das Programm startet, der nur Lese-Rechte auf dem Netzlaufwerk hat

            Comment


            • #7
              Hallo Andreas,
              ich habe das ganze nochmal mit einem Mini-Projekt versucht, erhalte aber immer dieselben Fehlermeldungen. Delphi ist nicht zu überzeugen, das Anlegen der LCK-Dateien zu unterlassen oder zu überspringen.<BR>
              Ich könnte die paar Zeilen Quellcode des Mini-Projektes zumailen, wenn du dich dieser Problematik annehmen könntes.<BR>
              Nochmal ein paar Daten zur Problematik:<BR>
              TSession: mit lokalem PrivateDir, Netzverzeichnis (RW-Rechte) für NetFileDir<BR>
              TDatabase: mit Verbindung zu TSession, ReadOnly=true, Verzeichnis über Alias<BR>
              TTable: mit Verbindung zu TDatabase, ReadOnly= true, TableName= PARADOX.DB<BR>
              TDataSource: mit Verbindung zu TTable<BR>
              TDbGrid: mit Verbindung zu TDataSource<BR>
              <BR>
              Alles in allem recht Trivial. Aber die DB-Tabllen lassen sich nicht öffnen, wenn der Benutzer NurLese-Rechte auf das DB-Verzeichnis auf einem Noevell-5-Server hat.<BR>
              Beim Debugen bin ich bis zu der Stelle in DbTables gekommen, wenn DbiOpenTables aufgerufen wird. Dort versucht Delphi die LCK-Dateien anzulegen. - Und ERROR!
              <BR>
              Würde mich sehr freuen, kompetente Hilfe zu erhalten.<BR>
              Gruß Gunnar

              Comment


              • #8
                Hallo Leute,

                das Problem wird im Thread
                "http://www.entwickler-forum.com/webx?128@@.1dd0502a" behandelt.

                Bitte benutzt für weitere Antworten diesen Thread.

                Grüsse,
                Leut

                Comment

                Working...
                X