Verzeichnis auswählen

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Benutzeravatar
Lutz Rübe
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 144
Registriert: Mi, 02. Aug 2006 18:13
Wohnort: 24536 Neumünster
Danksagung erhalten: 6 Mal
Kontaktdaten:

Verzeichnis auswählen

Beitrag von Lutz Rübe »

Einen wunderschönen guten Morgen allerseits,

ich hab' hier mal 'ne Frage, die bei den erfahreneren Programmierern ein Lächeln auslöst :D weil sie so trivial und banal sein dürfte. Trotzdem stelle ich sie hier, da ich keine Lust habe, hier weitere Tage und Wochen mit herumzu experimentieren.

In meiner Anwendung soll ein Benutzer ein (daten-)Verzeichnis auswählen können und ggf. sogar ein neues anlegen. Die Auswahl der Datenbanken soll bzw. muß dem Programm überlassen werden.

In den Samples ist zwar ein ähnliches Beispiel, aber der Benutzer soll - wie gesagt - keine Datenbanken auswählen, und es soll ein vorgegebenes Verzeichnis sein (evtl. sogar auf einem anderen Laufwerk ???)

Ich kann mir sehr gut vorstellen, dass der eine oder andere von Euch hier schon eine fertige Lösung hat.

Danke für Eure Kommentare und Hilfe.

Gruß
Lutz
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21192
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

Hi Lutz,

hast Du Dich schon mit dem XbpFileDialog() auseinandergesetzt?

Code: Alles auswählen

DIRCHANGE("..\")                                                // in das Rootverzeichnis des Programmes
cShdVerzeichnis := CurDir()                                     // ermitteln, wie das heißt
DIRCHANGE("programm")
cUmsatzVerzeichnis := CurDrive() + ":\" + cShdVerzeichnis
cUmsatzVerzeichnis += "\datenbanken\kasse\" + ALLTRIM(STR(YEAR(DATE()))) + "\" + ALLTRIM(STR(MONTH(DATE()))) // das sollte als Vorgabe genügen
oDlg  := XbpFileDialog():new():create()
oDlg:fileFilters := {;                 

{"kassenbericht_20*.dbf","kassenbericht_20*.dbf"};
                          }
oDlg:noWriteAccess := .T.                                       // es soll hier nichts von Hand geändert werden können
oDlg:title         := "Auswählen von Kassenberichten..."
oDlg:validatePath  := .T.   // sollte mal getestet werden
cFile := oDlg:open(cUmsatzVerzeichnis)
oDlg:destroy()
mit dem Schnipsel gibst Du Dateien vor, die auch nicht geändert werden können in der Anzeige.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Günter Beyes
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 315
Registriert: Mo, 16. Okt 2006 13:04
Wohnort: Region Stuttgart

Beitrag von Günter Beyes »

Hallo Lutz,

heute kam im offiziellen Alaska-Forum die gleiche Frage auf.

Schau mal in der Newsgroup public.xbase++.gui nach dem
Diskussionsthema 'Window api call', begonnen am 8. Januar 2005.
Da geht es um den Windows-eigenen 'Browse for Folder'-Dialog.
Sourcecode ist auch dabei.

Gruß,
Günter
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12907
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Beitrag von AUGE_OHR »

hi,

ähnlich wie Manfred verwende ich XbpFileDialog :

Code: Alles auswählen

STATIC PROCEDURE OPENDIR()
LOCAL oFileDlg
LOCAL cPathName
LOCAL nPosi  := 0

   oFileDlg   := XbpFileDialog():new()
   oFileDlg:center      := .T.
   oFileDlg:title := 'Start Ordner auswählen'
   oFileDlg:create()
   cPathName := oFileDlg:saveAs("Select Path, Press Enter or Click SAVE",,.T.)

   IF .NOT. EMPTY(cPathname)
      *** extract path in case user selected a file
      nPosi := RAT("\",cPathName)
      IF nPosi > 0
         cPathName := Upper( LEFT( cPathName, nPosi ))
      ENDIF
   ...

   ENDIF
RETURN
gruss by OHR
Jimmy
Benutzeravatar
Lutz Rübe
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 144
Registriert: Mi, 02. Aug 2006 18:13
Wohnort: 24536 Neumünster
Danksagung erhalten: 6 Mal
Kontaktdaten:

Beitrag von Lutz Rübe »

vielen Dank für eure Vorschläge....

der erste hatte einen sehr guten Ansatz und funktionierte mehr oder weniger in meinem sinne.
der zweite hat mir nicht wirklich weitergeholfen, da ich vorher noch nie in der newsgroup war und ich den genannten artikel auch nicht gefunden habe.
der letzte ansatz von Jimmy war der beste.

Doch leider habe ich ein problem, das ausgewählte verzeichnis zum standard-datenpfad zu machen.
PROCEDURE em_03b
LOCAL oFileDlg
LOCAL cPathName
LOCAL nPosi := 0

oFileDlg := XbpFileDialog():new()
oFileDlg:center := .T.
oFileDlg:title := 'Start Ordner auswählen'
oFileDlg:create()
cPathName := oFileDlg:saveAs("Select Path, Press Enter or Click SAVE",,.T.)

IF .NOT. EMPTY(cPathname)
*** extract path in case user selected a file
nPosi := RAT("\",cPathName)
IF nPosi > 0
cPathName := Upper( LEFT( cPathName, nPosi ))
ENDIF

ENDIF
set DEFAULT TO cPathName
set PATH TO (cPfad)
MsgBox("Pfad wurde gesetzt auf: "+CurDir())
If ! File(database)
--> Erstellen neue Datenbank im neuen verzeichnis
else
--> öffne Datenbank im neuen verzeichnis
end

RETURN
wenn ich dann die datenbanken auf existenz (if File(database)) prüfen möchte bzw. mit diesen dankenbanken arbeiten möchte, verzweigt das programm immer wieder auf das "ursprungsverzeichnis"

was habe ich übersehen ??

Gruß
Lutz
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16517
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Lutz,
so wie ich das sehen, scheint Deine Methodik zum Abschneiden eines Files nicht schlüssig zu sein?
Du gehst von rechts durch und suchst nach einem \ - damit wirst Du immer den letzten Pfadanteil abschneiden - entweder einen Dateinamen, oder ein Verzeichnis!
Ausserdem endet danach Dein Pfad mit einem \ - das dürfte für DEFAULT und PATH aber (wahrscheinlich) nicht richtig sein, oder?

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Lutz Rübe
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 144
Registriert: Mi, 02. Aug 2006 18:13
Wohnort: 24536 Neumünster
Danksagung erhalten: 6 Mal
Kontaktdaten:

Beitrag von Lutz Rübe »

Hallo Martin,

wenn ich in der Anwendung, in der die Datenbank genutzt werden soll, das Verzeichnis mit MsgBox() anzeige, sind die Einstellungen korrekt !
cPfad := CurDrive()+ ":\"+CurDir(CurDrive()) + "\"
MsgBox(cPfad )

IF ! OpenDb("em_ein","em_ein",.T.,.F.)
quit
ELSE
SET INDEX TO e_stnr,e_name,e_tnr,e_mnr,e_tot
ENDIF
Trotzdem wird die falsche Datenbank geöffnet. Muß ich irgendwie ein "reset" machen ? Welchen Pfad benutzt der Befehl DbUseArea() eigentlicht ?
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9361
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Beitrag von Tom »

Hallo, Lutz.

DbUseArea() greift zuerst auf das SET DEFAULT-Verzeichnis zu und dann auf SET PATH. Da Du offenbar eine eigene Funktion "OpenDb" geschrieben hast, wäre es, sofern diese Funktion immer bei Dateiöffnungen benutzt wird, der leichteste Weg, dort den Pfad bei DbUseArea einfach mit anzugeben. Natürlich bei OrdListAdd nicht vergessen!

In der Mehrmandantenversion unserer Software steht SET DEFAULT immer auf dem Verzeichnis, in dem sich die Datenbank befindet, und SET PATH zeigt auf den aktuellen Mandanten-Unterordner. Auf diese Art können sich die Kunden - weitgehend - aussuchen, welche Tabellen mandantenübergreifend zur Verfügung stehen sollen, da zuerst immer im SET DEFAULT-Verzeichnis gesucht wird. Die Dateien werden ohne Pfadangabe geöffnet, aufpassen muß man in dieser Situation nur beim Reindexieren. Dafür frage ich über DbInfo(DBO_FILENAME) den kompletten Namen der geöffneten Tabelle - mit Pfad - ab.
Herzlich,
Tom
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hi,

ohne Angabe von dem default Verzeichnis, wird immer das aktuelle benutzt. Ich nutze immer die direkte Angabe ...

Code: Alles auswählen

cPfad := "c:\..." oder auch relativ zum eigenen ".\"
cFile := "Kunde"  // ohne .DBF, da meine Indexdatei genauso heist.
use (cPfad+cFile) ...
if neterr()
   ... Fehlerbehandlung
else
   set index to (cPfad+cFile)
zu beachten ist auch, dass einige Funktionen das Standardverzeichnis ändern, z.B. die Dateiauswahl - wenn ich mich recht erinnere.
Deshalb habe ich diese in eigene Funktionen gekapselt und setzte das Verzeichnis zurück.
Gruß
Hubert
Siggi
Rookie
Rookie
Beiträge: 12
Registriert: Di, 07. Feb 2006 14:53
Wohnort: Limsdorf

Beitrag von Siggi »

Hallo Lutz,

für "Dateiarbeit" nutze ich folgende Funktionen...

Code: Alles auswählen

*************************
FUNCTION AppPath()
*************************
// liefert den Programmpath
return ( FPATH(AppName(.t.),1) )


**********************
FUNCTION FPATH (cDat, nNr)
**********************
/* zerlegt cDat in aRet:={ Path, Name, Extension, , , , , WinDateiname, HTML-Dateiname}
* if nNr in [1, 2, 3] dann wir aRet[nNr] als String geliefert
* 15.10.2006 if nNr = 6 aus .\HTML\ wird AppPath()+\HTML\
* 25.06.2003 if nNr = 4 .or. 23 dann aRet= 'Name+"."+ Extension'
* 25.07.2003 if nNr = 5 .or. 12 dann aRet= 'LW + Name'
* 20.01.2004 if nNr = 8 '"' + "C:\\Eigene Dateien\\Handbuch.doc" + '"' Lange Dateinamen
* 09.03.2006 if nNr = 9 Aufbereitung für Browser und HTML-Seiten "///c:/xbase/source/WinHansa/losansky.png"
*/
LOCAL aRet:={"", "", "", "", "", "", "", "",""}, nPos:=0, cFile:=cDat
LOCAL aT:={}

cDat:=alltrim(cDat)
if nNr=6
   // Parameterdatei .\HTML\ manche Programme brauchen c:\xbase\source\pkonto\html\
   if substr(cDat, 1, 2)= ".\"
      cDat:= AppPath()+substr(cDat, 3)
   endif
   aRet[6] := cDat
endif
if nNr=23; nNr:=4;  endif
if nNr=12; nNr:=5;  endif
if nNr=8          // Dateinamen mit Leer- und Sonderzeichen
   aRet[8]:= StrTran (cDat, "/", "\")
   if "\\" $ aRet[8]
      // 21.09.2004 wegen \\server\freigabe
      aRet[8]:= '"' +ConvToAnsiCP(aRet[8]) + '"'
   else
      aRet[8]:= '"' +ConvToAnsiCP(StrTran (aRet[8], "\", "\\")) + '"'
   endif
endif
if nNr=9 // für HTML
   aRet[9]:= StrTran (cDat, "\", "/")
   if substr(aRet[9], 1, 1 )#"/"
       aRet[9]:= "///"+aRet[9]
   endif
endif
if (nPos:=rat("\", cDat) ) # 0
   if nPos==len(cDat)          // keine Datei nur Verzeichnis
      aRet[1]:=cDat
      cDat:=""
   else
      aRet[1]:=subst(cDat, 1, nPos)
      cDat:=substr (cDat, nPos+1, 200)     // Path abschneiden
   endif
endif

if (nPos:=rat(".", cDat) ) # 0
   aRet[3] :=substr (cDat, nPos+1,200)  // Extension
   cDat:= substr(cDat, 1, nPos-1)
endif
aRet[2]:=cDat                     // der Rest sollte Dateiname sein
aRet[4]:=aRet[2]+iif(empty(aRet[3]), "", "."+aRet[3])
aRet[5]:=aRet[1]+aRet[2]

return (iif(nNr#NIL, aRet[nNr], aRet) )

*****************
FUNCTION ISDIR (cPath, bNeu)
*****************
// 24.01.2006 fehlende Verzeichnisse werden ohne Nachfrage angelegt
// 05.12.2005 wechselt zu Verzeichnis isdir:= ISDIR(".\HTML\") und giebt das "alte" zurück
// Laufverk und Verzeichnis kommt zurück
// bei Freigaben auf MSMÜLL klappt    isdir:= CurDrive()+":\"+ CurDir() nicht !!!!
// 17.10.2006 LOCAL cDir := iif (CurDrive()="\", "", CurDrive()+":\")+ CurDir()

LOCAL cDir := iif (empty(CurDrive()), "", CurDrive()+":\")+ CurDir()

DEFAULT bNeu TO .f.

if cPath # NIL .and. ! empty(cPath)
   if FExists (cPath, "D")
       CurDir(cPath)
   else
    if bNeu
       cDir:= MDIR (cPath)
       CurDir(cPath)
    else
       MsgBox ("Das Verzeichnis [  "+cPath+"  ] ist nicht zu finden... ", "IsDir ()")
    endif
   endif
endif
return(cDir)

*****************
FUNCTION MDIR  (cDir)
*****************
* MakeDir erstellt Verzeichnis wenn nicht vorhanden
* Rückgabe Verzeichnis oder "" wenn Pech gehabt
LOCAL cRet:=""
if empty(cDir); cRet := IsDir()
else
   // "/\" am Ende abschneiden
   do while substr(cDir, len(cDir), 1) $ "/\"
      cDir:=substr(cDir, 1, len(cDir)-1)
   endd
   cDir := FPATH (cDir, 6)
   if ! FExists (cDir, "D")
      RunShell ("/C MD "+cDir,,,.t.)
   endif
   if FExists (cDir, "D"); cRet:=cDir
   else; MsgBox ("Das Verzeichnis [ "+cDir+" ] konnte nicht angelegt werden !", "MDir ()")
   endif
endif
return(cRet)
viel Spass

Siggi
Benutzeravatar
Lutz Rübe
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 144
Registriert: Mi, 02. Aug 2006 18:13
Wohnort: 24536 Neumünster
Danksagung erhalten: 6 Mal
Kontaktdaten:

Beitrag von Lutz Rübe »

Hallo Günter,

vielen Dank für den Source-Code. Mit dem Modul erreiche ich genau das, was ich wollte !!!!

Einen kleinen Schönheitsfehler habe ich jedoch noch: ich kann zwar mit der Variablen "ncRootItem" ein Laufwerk vorgeben, jedoch nicht ein Verzeichnis. Somit lande ich zwangsläufig immer im Rootverzeichnis und nicht in einem gewünschten "Daten"-Verzeichnis. Mache ich da irgendetwas falsch ?

Hallo Siggi,

danke für Deinen Tipp, den ich selbstverständlich auch noch ausprobieren werde. Er erscheint mir interessant, da der Code deutlich kürzer ist als der von Günter.

An unseren fleißigen Forums-Moderator Martin habe ich noch die Frage, ob es nicht irgendwo eine Stelle für "Downloads" gibt, in der man solche genialen Modul-Lösungen wie die von Günter ("BrowseFolder") und Hubert ("HBPrint") einstellen und für Forums-Mitglieder downloaden kann ?

Gruß an alle
Lutz
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hallo Lutz,

das Forum selbst ist zur Zeit nicht in der Lage Uploads/Downloads zu verwalten. Unter 'Links...' kann man aber - wie sonst auch - auf eigenen Webspace verlinken, was für komplette Sachen wie meine Druckerklasse am Besten ist. Jeder Anwender weiß, dass dort immer die neuesten Versionen stehen.

Falls jemand keinen Webspace hat, kann er eine ZIP an mich senden und ich stelle diese auf meinen Webserver. Dann kann man darauf verlinken.
Gruß
Hubert
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16517
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Lutz,
vielen Dank für die Blumen :oops:
Wie Hubert bereits schrieb, ist es derzeit noch nicht möglich.
Mit der neuen Boardversion geht sowas. Diese ist derzeit jedoch noch in der Betaphase (jedoch schon "feature frozen", es werden also nur noch Fehler bereinigt). Wann sie kommt, steht in den Sternen. Sicherlich nicht vor Mitte/Ende nächsten Jahres - denke ich mal...

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Günter Beyes
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 315
Registriert: Mo, 16. Okt 2006 13:04
Wohnort: Region Stuttgart

Beitrag von Günter Beyes »

Hallo Lutz,
ich kann zwar mit der Variablen "ncRootItem" ein Laufwerk vorgeben, jedoch nicht ein Verzeichnis. Somit lande ich zwangsläufig immer im Rootverzeichnis und nicht in einem gewünschten "Daten"-Verzeichnis. Mache ich da irgendetwas falsch?
Nein, du machst nichts falsch, sondern das Modul ist nicht auf dem aktuellen Stand. :oops: Was ich dir schickte, stand so auch in der Newsgroup. Unterdessen gab es ein paar Korrekturen und Änderungen, unter anderem genau wegen dieses "Schönheitsfehlers".

@Hubert:

Hallo Hubert,

darf ich nochmal (zum letzten Mal, versprochen! Mein Webspace ist in Arbeit.) auf dein freundliches Hosting-Angebot zurückkommen :?:

Viele Grüße,
Günter
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9361
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Beitrag von Tom »

Am Rande:

Es gibt für die im Einsatz befindliche phpBB-Version (das ist die Software, die dem Forum zugrundeliegt) zwar sogenannte "Mods", die Dateianhänge und Uploads erlauben, aber erstens ist die Inbetriebnahme von Mods durchaus anstrengend und zweitens wird es derlei in der kommenden phpBB-Version 3 standardmäßig geben. Die befindet sich in der Betaphase und wird irgendwann 2007 zur Verfügung stehen - und dann auch eingesetzt.
Herzlich,
Tom
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Günter Beyes hat geschrieben: Hallo Hubert,
darf ich nochmal (zum letzten Mal, versprochen! Mein Webspace ist in Arbeit.) auf dein freundliches Hosting-Angebot zurückkommen :?:
Aber natürlich, ich habe noch genug Platz für Xbase++ Beispiel ZIPs, die sind ja eh so klein.
Gruß
Hubert
Benutzeravatar
Lutz Rübe
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 144
Registriert: Mi, 02. Aug 2006 18:13
Wohnort: 24536 Neumünster
Danksagung erhalten: 6 Mal
Kontaktdaten:

Beitrag von Lutz Rübe »

Hallo Günter,

wenn Du bei Hubert jetzt die zip-Datei zum Download zur Verfügung stellen möchtest, was ich ja sehr begrüße, wird es dann die neue Version sein, die Du bereits erwähnt hattest:
Nein, du machst nichts falsch, sondern das Modul ist nicht auf dem aktuellen Stand. Was ich dir schickte, stand so auch in der Newsgroup. Unterdessen gab es ein paar Korrekturen und Änderungen, unter anderem genau wegen dieses "Schönheitsfehlers".
Auch mit der jetzigen kann ich sehr gut leben, aber die oben angedeutete wäre das i-Tüpfelchen.

Gruß
Lutz
Günter Beyes
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 315
Registriert: Mo, 16. Okt 2006 13:04
Wohnort: Region Stuttgart

Beitrag von Günter Beyes »

wird es dann die neue Version sein?
Keine Frage, klar! :)

Günter
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hallo,

hier steht Günters Datei zum Download:

* leider ging die Datei verloren.
Gruß
Hubert
Benutzeravatar
Lutz Rübe
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 144
Registriert: Mi, 02. Aug 2006 18:13
Wohnort: 24536 Neumünster
Danksagung erhalten: 6 Mal
Kontaktdaten:

Beitrag von Lutz Rübe »

Hallo Günter, haollo Hubert,

nachdem Hubert ja die Zip-Datei auf seiner HP zur Verfügung gestellt hat, habe ich es gleich ausprobiert.

Von meiner Sicht aus kann ich nur sagen: SUPER !!!

In diesem Zusammenhang habe ich noch eine Frage:

wenn ich den Befehl SET DEFAULT TO cPfad setze, ist dieser nur wirksam, wenn ich es in der Main-Procedure machen. Ein Verzeichnis-Wechsel aus einem "Unterprogramm" ist bei mir nicht möglich. Ich habe auch schon versucht, die DBF's unter Angabe des neuen Pfades zu öffnen, erhalte aber immer den vorherigen, alten Datenbestand. Was mache ich falsch ?

Gruß
Lutz
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hi,

eigentlich müsste es mit set default to immer funktionieren ...
Versuche mal mit \ und ohne \ hinten am Pfad.

Aber ich nutze grundsätzlich immer vollständige Namen beim USE, dann ist man sicher !

Code: Alles auswählen

cPfad := "c:\Temp\"
cFile   := "Test"         // ohne DBF, dann kann man sie auch für die Indexe nutzen
use (cPfad+cFile)  ...
if neterr()...

Das geht immer und ist sicher ... na ja, man könnte noch mit fExist() prüfen ob die Datei überhaupt da ist 8)
Gruß
Hubert
Günter Beyes
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 315
Registriert: Mo, 16. Okt 2006 13:04
Wohnort: Region Stuttgart

Beitrag von Günter Beyes »

Hallo Lutz,

danke für die Blumen! :oops:

SET DEFAULT hat Thread-lokale Gültigkeit. Kann das hier eine Rolle spielen?

Gruß,
Günter
Benutzeravatar
Lutz Rübe
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 144
Registriert: Mi, 02. Aug 2006 18:13
Wohnort: 24536 Neumünster
Danksagung erhalten: 6 Mal
Kontaktdaten:

Beitrag von Lutz Rübe »

Hallo Hubert,
mit der Pfad-Angabe, wie Du sie gemacht hast, habe ich es schon mal probiert, bin aber nicht wirklich weitergekommen.

hallo Günter,

mit Threads habe ich (noch) keine Erfahrung und setze sie demnach nicht bewußt ein. Es kann also nur sein, daß die Module, die ich einsetze (auf der Basis von MDIDEMO) zusätzliche Threads aufrufen.

Wie kann ich das prüfen ?

Gruß
Lutz
Günter Beyes
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 315
Registriert: Mo, 16. Okt 2006 13:04
Wohnort: Region Stuttgart

Beitrag von Günter Beyes »

Hallo Lutz,

Alaskas Original-MDIDemo verwendet jedenfalls laut Textsuche keine zusätzlichen Threads.

Nutzt du vielleicht in deinem Programm ActiveX? Soweit ich weiß, startet Xbase++ dann einen zusätzlichen Thread für eigene Zwecke.

Per Programm kannst du mit dem Ausdruck (ThreadId() = 1) feststellen, ob das Program gerade im Hauptthread läuft oder nicht.

Gruß
Günter
Rolf
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 258
Registriert: Do, 27. Apr 2006 12:28
Wohnort: Görlitz

Beitrag von Rolf »

Hallo Günther

Der FolderBrowser wurde sehr gut von die umgesetzt.
Auch eine gute Demo die auf Anhieb bei mir (pbuild V 1.7) funktionierte.
Vielen Dank

Grüße Rolf
Antworten