Announcement

Collapse
No announcement yet.

Sperrungsdatei

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

  • Sperrungsdatei

    eine Delphianwendung soll von mehreren Arbeitsplätzen über ein Netzlaufwerk auf Paradox-Tabellen zugreifen. die einzige Einstellung, die ich vorgenommen habe, ist "NetFileDir".
    Beim arbeiten bekommt der Anwender ab und an die Fehlermeldung:
    "Sperrungs-Datei ist zu groß".
    Was ist eine Sperrungs-Datei und was muß ich ändern?

  • #2
    Ich vermute, in dieser "Sperrungs-Datei" werden die Datensätze eingetragen, die derzeit bearbeitet werden, um zu verhindern, dass zwei Benutzer in denselben Datensatz schreiben.

    Was du ändern musst, weiß ich aber auch nicht ;-))

    Helge

    Comment


    • #3
      Hallo,

      für diese Fehlermeldung gibt es verschiedene Gründe: <br>
      a) EXE liegt im gleichen Verzeichnis wie die Datenbank <br>
      b) Clients verwenden kein eigenes (lokales) privates Verzeichnis (PrivateDir)<br>
      c) TTable ist offen und gleichzeitig sind mehrere TQuery-Abfragen aktiv <br>
      d) LOCAL SHARE wurde auf TRUE gesetz

      Comment


      • #4
        Danke,
        es scheint zu funktionieren. Lag wohl an Punkt b

        Comment


        • #5
          Hallo Herr Kosch,
          ich habe das gleiche Problem habe aber eigentlich die Dateine nicht im gleichen Verzecihniss. Habe die EXE im Hauptverz. im Netz und je client eigenen unterverz wo die Sperr dateien drinnen sind. wo setze ich bitte den Loacl Share auf true false und tquerys sind auch nicht offen. Die Anwendung startet gar nicht auf dem 2ten Client.

          Haben sie da noch einen Tip bitte.

          Vielen Dank

          Joachi

          Comment


          • #6
            Hallo,

            alle Clients <b>müssen den exakt gleichen Pfad</b> für die Netzwerksperrdatei verwenden - siehe BDE-Verwaltung <i>Konfiguration | Treiber | Native | Paradox | NET DIR</i>.

            LOCAL SHARE wird in der BDE-Verwaltung über <i>Konfiguration | System | INIT | LOCAL SHARE</i> konfiguriert

            Comment


            • #7
              Hallo Herr Kosch Danke für die schnelle Antwort. Das Verz. sollte jedoch stimmen. Ich hole es aus dem Pfad für meine Anwendung. (target)
              Habe mal ein kleines Stück Source eingeschnippelt
              Vorher hatte ich Set PRivat Dir auf c:\ ging aber auch nicht.

              Danke für ihre Hilfe.

              target := ExpandFileName(Application.ExeName);
              target := ExtractFilePath(paramSTR(0));
              Nsize := Max_Computername_length + 1;
              setlength(Computername,NSize);
              if getcomputername(Pchar(ComputerName),Nsize) then
              Computername := pchar(Computername);
              setlength(UserName,NSize);
              if getUserName(Pchar(UserName),Nsize) then
              UserName := PChar(UserName);

              form1.Caption := ' PC: '+ Computername + ' User: ' + UserName;
              if DirectoryExists(target + 'DB\' + Computername ) then
              Session.PrivateDir := target + 'DB\' + Computername // 'C:\temp'
              else
              begin
              if not CreateDir(target + 'DB\' + Computername) then
              raise Exception.Create('Verzeichnis User ' + Computername + ' kann nicht erstellt werden');
              Session.PrivateDir := target + 'DB\' + Computername // 'C:\temp'
              end;

              Session.NetFileDir := target + 'DB\'; // Netzuser einrichten

              Comment


              • #8
                Hallo Herr Kosch Danke für die schnelle Antwort. Das Verz. sollte jedoch stimmen. Ich hole es aus dem Pfad für meine Anwendung. (target) Habe mal ein kleines Stück Source eingeschnippelt Vorher hatte ich Set PRivat Dir auf c:\ ging aber auch nicht.

                Danke für ihre Hilfe.
                <PRE>
                target := ExpandFileName(Application.ExeName); target := ExtractFilePath(paramSTR(0)); Nsize := Max_Computername_length + 1; setlength(Computername,NSize); if getcomputername(Pchar(ComputerName),Nsize) then Computername := pchar(Computername); setlength(UserName,NSize); if getUserName(Pchar(UserName),Nsize) then UserName := PChar(UserName);

                form1.Caption := ' PC: '+ Computername + ' User: ' + UserName; if DirectoryExists(target + 'DB\' + Computername ) then Session.PrivateDir := target + 'DB\' + Computername // 'C:\temp' else begin if not CreateDir(target + 'DB\' + Computername) then raise Exception.Create('Verzeichnis User ' + Computername + ' kann nicht erstellt werden'); Session.PrivateDir := target + 'DB\' + Computername // 'C:\temp' end;

                Session.NetFileDir := target + 'DB\'; // Netzuser einrichten;
                <PRE&gt

                Comment


                • #9
                  Hallo Herr Kosch Danke für die schnelle Antwort. Das Verz. sollte jedoch stimmen. Ich hole es aus dem Pfad für meine Anwendung. (target) Habe mal ein kleines Stück Source eingeschnippelt Vorher hatte ich Set PRivat Dir auf c:\ ging aber auch nicht.

                  Danke für ihre Hilfe.
                  <PRE>
                  target := ExpandFileName(Application.ExeName);
                  target := ExtractFilePath(paramSTR(0));
                  Nsize := Max_Computername_length + 1; setlength(Computername,NSize); if getcomputername(Pchar(ComputerName),Nsize) then
                  Computername := pchar(Computername);
                  setlength(UserName,NSize);
                  if getUserName(Pchar(UserName),Nsize) then
                  UserName := PChar(UserName);

                  form1.Caption := ' PC: '+ Computername + ' User: ' + UserName;
                  if DirectoryExists(target + 'DB\' + Computername ) then
                  Session.PrivateDir := target + 'DB\' + Computername // 'C:\temp'
                  else
                  begin
                  if not CreateDir(target + 'DB\' + Computername) then
                  raise Exception.Create('Verzeichnis User ' + Computername + ' kann nicht erstellt werden');
                  Session.PrivateDir := target + 'DB\' + Computername // 'C:\temp' end;
                  Session.NetFileDir := target + 'DB\'; // Netzuser einrichten;
                  <PRE&gt

                  Comment


                  • #10
                    Hallo,

                    das ist der falsche Weg! Für die BDE gilt <b>NET DIR</b> für <b>alle</b> Anwendungen auf <b>allen</b> Client-Rechnern, die auf Paradox-Tabellen im Netzwerk zugreifen. Somit ist das Initialisieren im eigenen Programm nur dann sicher, wenn garantiert zu jeder Zeit auf jedem Rechner nur dieses eine Programm läuft und diese Initialisierung zu einem Zeitpunkt erfolgt, zu dem die BDE noch nicht auf Paradox-Tabellen zugegriffen hat.

                    Ich würde daher NET DIR ausschliesslich über die BDE-Verwaltung an allen Client-Rechner synchron einstellen und dazu ein <b>Wurzelverzeichnis</b> im Netzwerk nutzen, für das alle Benutzer volle Rechte haben.

                    Das Verzeichnis für <b>PrivateDir</b> sollte auf der lokalen Festplatte liegen, es macht keinen Sinn, temporäre Tabellen auf einem Netzlaufwerk anzulegen, da der Zugriff spürbar langsamer sein muss als beim lokalen Zugriff. Solange jeder Client C:\Temp verwendet (und dieses Verzeichnis auf jeder lokalen Festplatte vorhanden ist), können Probleme niemals an PrivateDir liegen.
                    &#10

                    Comment


                    • #11
                      Hallo,
                      Ist es denn richtig, das wenn ich über die BDE aus mehreren Anwendungen auf Paradox Datenbanken zugreife sie alle auf einem Laufwerk sein müssen.

                      Wäre es somit nicht besser auf SQL zu wechseln. z.B. <B>MYSQL</B> Server. Ist es möglich eine Paradox Datenbank auf SQL zu portieren zumindest die Structur. Die Software entsteht noch somit ist jetzt noch die Entscheidung möglich. "Letzte Chance" ;-)

                      Geht MYSQL mit DELPHI 5 ??

                      Das Lokale Verzeichniss habe ich nur zum Testen auf das Netz gelegt. Damit ich besser sehe was da passiert. im Loakl Verz. steht immer alles drinnen aber dummer weise entsetht im Netzwerzeichniss ausser den Netzdatein auch nochmal Private Dateien Das sollte ja warscheinlich nicht sein oder??

                      Gruß Joachi

                      Comment


                      • #12
                        Hallo,

                        man muss bei Paradox zwischen der <i>Netzwerksperrdatei</i> im NET DIR-Verzeichnis und den <i>Datenbank-Dateien</i> (.DB) unterscheiden. Während alle Anwendungen/Rechner ein gemeinsames Verzeichnis für NET DIR verwenden <b>müssen</b>, darf jede Anwendung die eigenen Datenbank-Dateien in beliebigen Verzeichnissen (mit Ausnahme von NET DIR und dem eigenen Programmverzeichnis) ablegen. Für Paradox bilden ja alle Dateien in einem Verzeichnis eine Datenbank.

                        Ein Umstieg auf eine SQL-Datenbank ist immer mit grundlegenden Änderungen am Programm (und in der Regel auch beim Datenmodell) verbunden

                        Comment


                        • #13
                          Nach meinem Kenntnisstand muß LOCAL SHARE auf TRUE stehen, da sonst kein RECORD LOCK entsteht und nicht bemerkt wird, ob ein Datensatz bearbeitet wird.
                          Gruß Holge

                          Comment

                          Working...
                          X