Announcement

Collapse
No announcement yet.

Verzeichnis

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

  • Verzeichnis

    Hallo Leute,

    ich habe folgende Probleme, wofür vieleicht jemand eine Erklärung hat.

    In meinem Programm habe ich einen Hilfe Schalter eingefügt, wlcher mit
    folgendem Befehl eine Text-Datei öffnet:
    shellexecute(handle,nil,Pchar('notepad.exe'),Pchar ('Hilfe.txt'),Pchar(''),SW_SHOW)

    Die Hilfe.text Datei liegt üblicherweise im Hauptverzeichnis meines Programms und alles lief problemlos.

    Jetzt habe ich in meinem Programm noch ein Start-Formular einfügen müssen, mit welchem ich dem Programm mitteile, wo bestimmte Dateien für einen integrierten Viewer liegen. Dies habe ich mit folgernder Programmierung gelöst, so daß mein Programm beim Starten immer weiß, wo die benötigten Dateien liegen:
    AssignFile(dat_verz,'C:\Schnitt\Verzeichnis.txt');
    Reset(dat_verz);
    ReadLn(dat_verz, verz);
    CloseFile(dat_verz);
    AssignFile(dat_lauf,'C:\Schnitt\Laufwerk.txt');
    Reset(dat_lauf);
    ReadLn(dat_lauf, lauf);
    CloseFile(dat_lauf);

    So, jetz zu meinem Problem.
    Obwohl die beiden oben genannten Programmierungen meiner Meinung nach nichts miteinander zu tun haben, versucht das Programm jezt die Hilfe Datei in dem neu ausgewählten Verzeichnis zu suchen. Kann das sein ?

    Hängt damit dann vieleicht auch mein zweites Problem zusammen, nämlich wenn ich als Datei-Verzeichnis das CD-Rom angebe, bekomme ich bei bestimmten Datenbank-Aufrufen die Meldung:
    Zu wenig Festplattenspeicher.

    Vielen Dank im voraus

    Jörg

  • #2
    Hallo,

    das eigene Programm kann beim Start über <b>Application.ExeName</b> das eigene Startverzeichnis auslesen. Wenn dann andere Dateizugriffs-Operationen das aktuelle Verzeichnis für diesen Prozess ändern, kann das Programm jederzeit über den Aufruf der Win32-API-Funktion <b>SetCurrentDirectory</b> zu diesem "Startverzeichnis" zurückwechseln

    Comment


    • #3
      shellexecute(handle,nil,Pchar('notepad.exe'),Pchar ('Hilfe.txt'),Pchar(''),SW_SHOW)

      das PChar('Hilfe.txt') sollte generell mit vollständigem Pfad angegeben werden, Deine Anwendung weiss ja immer wo sie stehen sollte. Damit vermeidest Du das vom gerade aktuell gesetzen Pfad "gesucht" wird.

      Jede Anwendung hat noch aus DOS Zeiten ein sogenanntes PSP (Program Segment Prefix). Unter Windows, leicht abgespeckt, werden dort solche Sachen wie Startverzeichniss/EXE.Name und auch das Arbeitsverzeichniss gespeichert. Wie Andreas schon sagte lässt sich das umsetzen. Nun, da Du aber nur "Hilfe.txt" im Program aufrufts und an die SHELL übergibst, muss die IMMER suchen. Sie kennt ja sozusagen nur ihren eigenen Arbeitspfad, der für alle APP's gleich ist. Die SHELL selber startet ein neues Program, nämlich NotePad.exe, der wird gefunden sucht aber logischerweise die "Hilfe.txt" erstmal in seinem eigenen Arbeitspfad usw.usw.usw. Also, ist der einfachste Weg eine Pfadangabe zu einer bekannten Datei immer VOLLSTÄNDIG anzugeben.

      Gruß Hage

      Comment


      • #4
        Hallo Andreas, hallo Hagen,

        vielen Dank für eure Antworten, die Hilfe Datei kann jetzt ohne Probleme im Hauptverzeichnis liegen und von dort auch aufgerufen werden.
        Dennoch bleibt mein zweites Problem bestehen. Wenn ich als Datei Verzeichnis das CD-Rom angebe, bekomme ich bei bestimmten Datenbankaufrufen folgende Fehlermeldung:
        Im Projekt *.exe ist eine Exception der Klasse EDBEngineError aufgetreten. Meldung: ‚Zu wenig Fesplattenspeicher’. Prozeß wurde angehalten.

        Die Viewer-Befehle, welche auf das CD-Rom zugreifen, funktionieren aber.

        Mit meinen eher bescheidenen Programmierkenntnissen kann ich keinen Zusammenhang in meiner Programmierung dafür finden. Vielleicht fällt euch etwas dazu ein.

        Vielen Dank

        Jör

        Comment


        • #5
          Hi

          Der Datenbankzugriff versucht temporäre Daten auf CD zu schreiben. Nun, der verfügbare Platz einer CD ist immer 0 !

          Du solltest mitthilfe einer TSession/TDatabase Komponente den Netzpfad und Temporären Pfad auf die Festplatte umleiten.

          Gruß Hage

          Comment


          • #6
            Hallo Hagen,

            danke für die Antwort. Aber ich verstehl immer noch nicht die Ursache meines Problems, bzw. ich versuche es zu verdeutlichen.
            Das Hauptprogramm liegt auf der Festplatte, auch die Table und Dataset Komponenten verweisen auf ein Verzeichnis auf der Festplatte.
            Lediglich für die Viewer-Dateien (CAD-Zeichnungen im DWF-Format) gebe ich das CD Rom an (mit den Befehlen wie im ersten Schreiben beschrieben). Die Viewer Befehle funktionieren auch. Wie kann mir die Angabe des CD-Rom Laufwerks für die DWF-Datein den Datenbankzugriff versauen.
            Nochmals vielen Dank für Deine Bemühungen

            Jör

            Comment


            • #7
              Hm, keine Ahnung
              Im Grunde müsste es gehen, ich vermute also das in Deinen Sourcen irgendwo ein "Schussligkeits"-Fehler ist, z.b. falscher/verwechselte Pfadangaben.

              Gruß Hage

              Comment

              Working...
              X