Das OFFIZIELLE PROFAN SUPPORT FORUM
Einsteigerfragen
PROFAN-Programmierung
Helfer & Tools
Anregungen & Vorschläge
PROFAN-NEWS
Die Regeln!
2 - PROFAN-Programmierung

 Neues Thema  |  Zur Übersicht  |  Suchen  |  Einloggen   Neuerer Beitrag  |  Älteres Thema 
 Datei löschen funktioniert nicht
Autor: Wilfried Heyse2 (---.echostar.pl)
Datum:   31.12.17 15:59

Auf jeden Fall vorab allen Xprofanern einen guten Rutsch ins neue Jahr. und ein gutes selbiges.

Folgende Löschanforderung wird nicht ausgeführt. Die Datei ist vorhanden und wird auch in der Messagebox richtig angezeigt.
Das Löschen funktioniert jedoch nicht im Programm.
                  Messagebox(Datenpfad$+ "OFFENERECHNUNGEN\" +Rnummeralt$+".DBF","Test",0)
                   'If fileexists (Altdbf$) = 1
                   Assign #3,Datenpfad$+ "OFFENERECHNUNGEN\" +Rnummeralt$+".DBF"
                   Erase #3
                    'Altdbf$ = ""
                    sleep 500
                   'Endif
       Neustart


Es gibt keine Fehlermeldung und auch der Neustart wird richtig ausgeführt. Wo ist der Haken?

Gebe ich die Nummer von manuell ein

Assign #3,"C:/Ladendaten/OFFENERECHNUNGEN/26070.DBF"
 Erase #3


wird die Datei einwandfrei gelöscht



Beitrag beantworten
 
 Re: Datei löschen funktioniert nicht
Autor: p. specht (---.aon.at)
Datum:   31.12.17 20:02

Mir passiert das auch oft, dann kontrolliere ich, ob alle Pfade statt / ein \\ drin haben. Hat oft geholfen...
Gruss

und natürlich auch Dir ein Gutes Neues Jahr!

____
Ein richtiges Problem hat keine Lösung, nur Näherungen!

Beitrag beantworten
 
 Re: Datei löschen funktioniert nicht
Autor: Heinz Brill (---.dip0.t-ipconnect.de)
Datum:   31.12.17 20:32

Überprüfe mal deine Variable : Rnummeralt$

Offenbar kümmert es Assign (ob Befehl oder Funktion)
überhaupt nicht, ob angegebene Datei überhaupt existiert.
Es kommt auch keine Fehlermeldung, selbst bei Erase #...
nicht.

Es kann sein, daß der Dateiname nicht genau stimmt :
statt

26070.DBF

vielleicht so was :

26070.DBF.DBF

Mir ist das auch schon öfter passiert, daß ich die
Datei - Endung zweimal hatte.

Da müßte auch Roland nochmal Hand anlegen, daß wenigstens
eine ordentliche Fehlermeldung bei Nichtvorhandensein der Datei
kommt.

Wie gesagt, ist nur mal eine Vermutung von mir.

H.Brill
XProfan X4 + FreeProfan

Beitrag beantworten
 
 Re: Datei löschen funktioniert nicht
Autor: Wilfried Heyse2 (---.echostar.pl)
Datum:   31.12.17 21:34

Ich bin einen Schritt weiter gekommen. Es muss etwas damit zu tun haben, wo die Variablen definiert sind.

Oberhalb des Procs "Start " habe ich fast alle erforderlichen Variablen definiert.
dazwischen (also vor "Start") liegt das Menue, mit den Einträgem, die nicht neu zu laden sind.

Ändere ich jetzt das Programm so, das nicht das Unterprogramm "Start" ausgeführt wird, sondern die EXE komplett neu gestartet wird, funktioniert es.

Das Menue, die Kunden- u. Artikelliste müssen ja nicht bei jedem "Neustart" neu geladen werden, da sie unverändert bleiben, so lange sich nichts ändert.

Mittelfristig werde ich versuchen, die Declarierung Variablen, die dafür erforderlich sind,, vom Unter- (eigentlich ist es ja das "Hauptprogramm") zu trennen. Ist auch sauberer. Einstweilen muss eben die EXE neu gestartet werden. Trotzdem finde ich es irgendwie merkwürdig und kann es mit nicht erklären. Vielleicht fehlt mir an dieser Stelle auch einfach das Wissen.

Beitrag beantworten
 
 Re: Datei löschen funktioniert nicht
Autor: Heinz Brill (---.dip0.t-ipconnect.de)
Datum:   01.01.18 07:20

Prosit Neujahr :-)
Um da genaueres zu sagen, müßte man den Code sehen.
Nach deinen Schilderungen kann ich nur soviel sagen, daß
es an der Sichtbarkeit der Variablen hängt.

Grundsätzlich mache ich es so, daß ich die Variablen, die
auch in Unterprogrammen gültig sein sollen, in der ersten
Zeile meines Quellcodes definiere und wenn nötig auch schon
einen Wert gebe. Alle anderen temp. Variablen definiere ich
erst in den PROCs. Natürlich sollte man dort den Variablen
andere Namen geben, alleine schon, um selber den Überblick
zu behalten.

Das Hauptprogramm mache ich nie in eine Proc. Das besteht ja
meistens nur aus einer Event-Schleife, die auf Ereignisse wartet.

Zitat:

Ändere ich jetzt das Programm so, das nicht das Unterprogramm
"Start" ausgeführt wird, sondern die EXE komplett neu gestartet wird,
funktioniert es.


Das ist hier so der Fall : da scheinen Variablen in der Proc "Start"
verändert zu werden, was dann wiederum zu einem solchen Verhalten
führt.

Grundsätzlich würde ich die Variablen - Deklaration und das Menu
im Hauptprogramm lassen. Und auch keine Proc fürs Hauptprogramm.
Die Kunden - und Artikelliste können natürlich dann auch noch vor
der Hauptschleife in extra Listen geladen werden.

Alles andere kommt in Procs, in denen dann auch lokale Variablen, falls
nötig, deklariert werden.

H.Brill
XProfan X4 + FreeProfan

Beitrag beantworten
 
 Re: Datei löschen funktioniert nicht
Autor: Wilfried Heyse2 (---.echostar.pl)
Datum:   01.01.18 12:20

Heinz, vielen Dank für deine Antwort.
Ohne dass ich da mal kräftig aufräume, werde ich wohl nicht weiter kommen. Das Programm ist im Laufe der Jahre angewachsen und immer wieder habe ich irgendwo nachgeflickt.
Ohne einen konkreten Ablaufplan werde ich wohl nicht mehr weiter kommen.
Immerhin sind es inzwischen insgesamt über 12.000 Zeilen Programmcode (inkl. Leerräume).
Vieles davon ist sicher mit der "Von hinten durch die Brust ins Auge" -Methode gelöst. Hat aber bisher alles funktioniert.

Kommt Zeit, kommt Rat. Vielleicht finde ich den Fehler irgendwann. Bis dahin muss der Neustart eben durch einen Neuaufruf der Exe stattfinden. Dann geht alles.

Ich habe schon angefangen, noch einmal alles von Anfang an zu machen. Aber es dauert halt. Ich bin mir auch unsicher, ob es sich lohnt. Wenn meine Firma irgendwann auf ein anderes Programm umsteigt, (was ich nicht in der Hand habe, aber durch einen kürzlich stattgefundenen Betriebsübergang durchaus möglich ist), ist alles für die Katz.

Auf jeden Fall ein fohes neues 2018

lg Wilfried

Beitrag beantworten
 
 Re: Datei löschen funktioniert nicht
Autor: Heinz Brill (---.dip0.t-ipconnect.de)
Datum:   01.01.18 13:33

Oweia, 12.000 Zeilen ist ja jede Menge Holz.
Das macht das ganze noch schwieriger. Aber
aufgeben würde ich da nicht, zumal ja sehr
viel Zeit und Arbeit dahinter steckt.

Ich würde mal mit der normalen Suchfunktion
des Editors nach
Datenpfad$+ "OFFENERECHNUNGEN\" +Rnummeralt$+".DBF
suchen.

Vielleicht kannst du ja auch im Debug-Modus was erreichen.

$D "akt. Pfad", Rnummeralt$
$D "akt. Pfad", Datenpfad$

geht halt besser, wie eine Messagebox.

Es scheint ja vermutlich am Dateipfad bzw. Dateiname zu liegen.
Und da das Problem erst seit kurzem auftritt, würde ich auch
dann zuerst bei den letzten Modifikationen suchen.

H.Brill
XProfan X4 + FreeProfan

Nachricht bearbeitet (01.01.18 14:16)

Beitrag beantworten
 
 Re: Datei löschen funktioniert nicht
Autor: Wilfried Heyse2 (---.echostar.pl)
Datum:   01.01.18 20:58

Ein Schrittchen weiter.
Eventuell hat es nichts mit dem Programm zu tun, sondern mit damit, dass Windows die einmal angesprochenen Dateien im laufenden Programm nicht wieder vollständig frei gibt.

Selbst ein Shell Aufruf eines eigens anglegten externen Programms
 Window 1368,0-300,200
 
 Declare Datenpfad$
 Datenpfad$ = "C:\Ladendaten\"
 
 
 Declare Doppelrnummer$
   db("open",#1,Datenpfad$+"Doppel.dbf")
   Doppelrnummer$ = db("Get","Doppelnumm")
   db("Close",#1)
 
 
 Print Fileexists (Datenpfad$+ "\OFFENERECHNUNGEN\" +Trim$(Doppelrnummer$)+".DBF")
 Print Fileexists (Datenpfad$+ "\Auftraege\" +Trim$(Doppelrnummer$)+".DBF")
 
 sleep 1500
 
   IF (Fileexists (Datenpfad$+ "\OFFENERECHNUNGEN\" +Trim$(Doppelrnummer$)+".DBF") = 1) &  (Fileexists (Datenpfad$+ "\Auftraege\" +Trim$(Doppelrnummer$)+".DBF") = 1)
       Assign #3,(Datenpfad$+ "\OFFENERECHNUNGEN\" +Trim$(Doppelrnummer$)+".DBF")
       Erase #3
   Endif
   
 
 Print Fileexists (Datenpfad$+ "\OFFENERECHNUNGEN\" +Trim$(Doppelrnummer$)+".DBF")
 Print Fileexists (Datenpfad$+ "\Auftraege\" +Trim$(Doppelrnummer$)+".DBF")
 sleep 1500

bleibt erfolglos, obwohl die Dateien als vorhanden (1) angezeigt werden. An einem falschen Namen oder Pfad kann es also nicht liegen.

Copy funktioniert, aber Erase nicht.

Wie schon geschrieben, wird die Funktion bei einem kompletten Neustart einwandfrei ausgeführt.

Beitrag beantworten
 
 Re: Datei löschen funktioniert nicht
Autor: Wilfried Heyse2 (---.echostar.pl)
Datum:   01.01.18 22:34

Jetzt bin ich mir sicher, dass es eine Windows Kiste ist. Starte ich mein oben erwähntes Hilfsprogramm autark parallel, also ohne das andere Programm zu schliessen, wird die Funktion NICHT ausgeführt. Schliesse ich das das erstgestartete Programm, wird die Datei gelöscht.

Die Frage ist nur, wie komme ich da raus?



Beitrag beantworten
 
 Re: Datei löschen funktioniert nicht
Autor: Heinz Brill (---.dip0.t-ipconnect.de)
Datum:   02.01.18 07:04

Sieht ja fast danach aus, daß die Datei noch
offen ist.
Vielleicht mal danach abklopfen, daß nach einem
Schreiben/Suchen/Ändern die Datei mit

db("Close", #N)


wieder geschlossen wird. Dieses Vorgehen würde ich
sowieso bevorzugen :
Datei öffnen - bearbeiten - schließen.

Ist halt auch sicherer, als wenn die Datei(en) erst bei
Programmende geschlossen werden. Wenn dann mal
in einem Modul (Proc) was abstürzt, ist die Chance
geringer, daß eine DB zerfetzt wird.

H.Brill
XProfan X4 + FreeProfan

Beitrag beantworten
 
 Re: Datei löschen funktioniert nicht
Autor: Wilfried Heyse2 (---.echostar.pl)
Datum:   02.01.18 10:23

Heinz, du hast vollkommen recht. Aber eigentlich achte ich penibel darauf, die Datei nach Abschluss der jeweiligen Aktion gleich wieder zu schliessen. Lieber mache ich sie 3-mal auf und zu.

Trotzdem liegst du mit deiner Vermutung total richtig. Ich habe mal versucht, die Datei bei geöffnetem Programm im Explorer manuell zu löschen. Fehlanzeige: Die Aktion kann nicht abgeschlossen werden, da die Datei in "Profan-Runtime" geöffnet ist.

Hab schon alles abgesucht, aber bisher nichts gefunden. Dennoch, die Suche geht weiter. Wäre ja gelacht.

Beitrag beantworten
 
 Re: Datei löschen funktioniert nicht
Autor: Heinz Brill (---.dip0.t-ipconnect.de)
Datum:   02.01.18 10:41

Ja, Windows verhindert das.
Versuche mal eine Textdatei, die im normalen Windows-Editor
noch geöffnet ist, zu löschen.
Geht ja auch nicht.

H.Brill
XProfan X4 + FreeProfan

Beitrag beantworten
 
 Re: Datei löschen funktioniert nicht
Autor: Jörg Greve (---.dip0.t-ipconnect.de)
Datum:   02.01.18 12:15

Frohes Neues Jahr an alle :-)

Zitat:


Assign #3,Datenpfad$+ "OFFENERECHNUNGEN\" +Rnummeralt$+".DBF"
Erase #3


Ich würd da auch so rangehen wie p.specht bereits angesprochen hat.
Als Kontrolle temporär den so erzeugten Dateipfad anzeigen lassen.
Und nicht vergessen, ggf. die .dbf mit der passenden Zugriffsnummer vorher zu schließen, wie Heinz ja schon empfohlen hat.

 @db("Close", #N) 'aber nur, falls sie noch geöffnet ist
 
 Assign #3,Datenpfad$+ "\\OFFENERECHNUNGEN\\" +Rnummeralt$+".DBF" 'Backslash immer doppelt eintragen.
 
 'jetzt schauen, ob der Dateipfad auch wirklich passt:
  print Datenpfad$+ "\\OFFENERECHNUNGEN\\" +Rnummeralt$+".DBF"
 
 Erase #3
 


Falls du in der Variablen Datenpfad$ bereits die beiden "\\" angehängt hast, darf natürlich vor "OFFENERECHNUNGEN\\" kein "\\" vorgesetzt werden.
Wenn die .dbf wirklich geschlossen ist und der Pfad stimmt, sollte das gehen.

Gruß Jörg

Ideen gibt es viele - man muss sie nur haben...
XProfan X2.1, X3.1 / XP-Pro, Win7-Pro (32/64) / Linux Mint-Mate, AntiX

Nachricht bearbeitet (02.01.18 12:16)

Beitrag beantworten
 
 Re: Datei löschen funktioniert nicht
Autor: Heinz Brill (---.dip0.t-ipconnect.de)
Datum:   02.01.18 12:30

Ich habe mir auch oft so beholfen, daß ich einen
Schalter (einfache globale Long Variable) benutze.

Beim Öffnen der Datei einfach z.B.
k_offen = 1
und beim Schließen
k_offen = 0

Wenn man das konsequent, auch bei mehreren Dateien
und Variablen, macht, und dies vor jeder Datei-Operation
abfrägt, ist man auf der sicheren Seite.
Sollte k_offen = 0 sein, kann man immer noch nachträglich
die Datei öffnen.

H.Brill
XProfan X4 + FreeProfan

Beitrag beantworten
 
 Re: Datei löschen funktioniert nicht
Autor: Jörg Greve (---.dip0.t-ipconnect.de)
Datum:   02.01.18 14:28

Zitat:


Wenn man das konsequent, auch bei mehreren Dateien
und Variablen, macht...


jo genau. Bei vielen dBase Dateien hab ich für sowas dann immer gern ein Array genommen. Der Index des Elements entsprach dann der Dateinummer.
Das hat dann zusätzlich den Vorteil, das beim Beenden des Programms oder ähnlichen Situationen alle noch offenen .dbf's gezielt geschlossen werden können:
 Declare ds&[] 'array für DateiStatus
 ...
 'entsprechend der Dateianzahl werden dann im Programmverlauf die Elemente 0 oder 1 gesetzt
 ...
 ...
 db_off 'alle offenen dbf's schließen
 ...
 
 Proc db_off
  'alle noch offenen dbf's schließen
  WhileLoop 1,SizeOf(ds&[])-1
   If ds&[&loop] 'wenn geöffnet  
    @db("Close",&loop)
    ds&[&loop] = 0 'dateistatus auf 0 (geschlossen)
   EndIf
  EndWhile
 EndProc
 
 


Diese Proc kann ich dann an beliebiger Stelle im Programm aufrufen, wenn ich sicher sein will, das auch wirklich alle dbf's geschlossen sind.
Auf die gleiche Weise könnte ich sie (wenn nötig) alle auf einem Schlag wieder öffnen. :-)

Gruß Jörg

Ideen gibt es viele - man muss sie nur haben...
XProfan X2.1, X3.1 / XP-Pro, Win7-Pro (32/64) / Linux Mint-Mate, AntiX

Nachricht bearbeitet (02.01.18 14:31)

Beitrag beantworten
 
 Re: Datei löschen funktioniert nicht
Autor: Wilfried Heyse2 (---.echostar.pl)
Datum:   02.01.18 20:46

Erst einmal DANKE für eure Tips.

Ist was für die Zukunft. Denn: Heureka (ich habs) gefunden.
Ich habe mir an den markanten Stellen Stops eingebaut. und dann mit Hilfe dieser Funktion zwischendurch abgefragt.

https://www.com-magazin.de/tipps-tricks/windows-8/geoeffnete-dateien-anzeigen-208883.html

Und tatsächlich es hat ein db("close",#1) im Druckvorgang gefehlt.
Da in der ursprünglichen Version das Programm immer komplett neu gestartet wurde, ist dieser schon jahrelang existierende Fehler nicht aufgefallen.
Erst jetzt, bei dem Versuch, das ganze etwas schneller zu machen. So ist das, wenn man anfängt am Computer aufzuräumen.

Beitrag beantworten
 Foren-Liste  |  Baumstruktur   Neuerer Beitrag  |  Älteres Thema 


 Foren-Liste  |  Zur Registrierung 
 Benutzerlogin
 Benutzername:
 Passwort:
 Login-Daten speichern:
   
 Passwort vergessen?
E-Mail-Adresse oder Username unten eingeben. Dann wird Dir per e-Mail ein neues Passwort zugeschickt.

phorum.org