DBF Datei wird zerstört

Zugriff, Engines, Konvertierung. Von ADS über DBF bis zu SQL.

Moderator: Moderatoren

Antworten
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

DBF Datei wird zerstört

Beitrag von Koverhage »

Hallo,

habe folgendes Phänomen:

Ich prüfe mit ob eine Dbf Datei vorhanden ist. Durch einen Tippfehler wird diese
nicht gefunden.
Wenn die Datei nicht da ist, wird ein dbcreate durchgeführt. Die Datei ist im Zugriff (Netzwerk)
die Datei kann nicht erzeugt werden.
Leider wird die Datei dabei zerstört, alle Sätze sind noch da, enthalten aber entsprechend
ihres Typs Werte (o, space oder .f.)
Klar es ist ein Programmfehler von mir, aber wenn die Datei nicht erzeugt werden kann, dürften
die Werte doch nicht weg sein, bzw. müssten ja alle Records weg sein.
Gruß
Klaus
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: DBF Datei wird zerstört

Beitrag von Rolf Ramacher »

Hallo Klaus,

das verstehe ich nicht. "Durch einen Tippfehler wird sie nicht gefunden." Gibt es für die DBF ein Eingabefeld des Users ??
wie sieht ´denn dein Code aus.
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9367
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 102 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: DBF Datei wird zerstört

Beitrag von Tom »

Hallo, Klaus.

Wenn ich das hier mache:

Code: Alles auswählen

USE TABELLE.DBF ALIAS TAB
a := DbStruct()
DbCreate("TABELLE.DBF",a)
erhalte ich - wie erwartet - einen Laufzeitfehler. Die Tabelle wird aber nicht "zerstört". Sie bleibt unverändert erhalten.

Ich nehme an, dass Du in Deinem Code danach noch irgendwelchen Unsinn anstellst, dass also z.B. alle Datensätze gelöscht werden oder ähnliches. Vermutlich erwartest Du, dass ja alles in Ordnung ist, dann wird die vermeintlich erzeugte Tabelle angefasst, überarbeitet o.ä. Das DbCreate() selbst ist jedenfalls nicht der Verursacher der Probleme.
Herzlich,
Tom
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: DBF Datei wird zerstört

Beitrag von Koverhage »

Hallo Tom,

hier mein Code.

Local cDbfDatei := cArbeitsverzeichnis + "xyz.dbf"
Local cStrDatei := cArbeitsverzeichnis + "xyz.str"

if !Fexists("xyz.dbf")
DbCreateFrom( cDbfDatei,, cStrDatei,,.t.,"xyzneu" ) // Neue Datei erzeugen
("xyzneu")->(DbCloseArea())
endif


Der Fehler im Code ist, bei !Fexists hätte es anstatt "xyz.dbf" cDbfDati sein müssen.

Im Gegensatz zu Deinem Beispiel benutze ich DbCreateFrom, dort ist das Ergebnis wie beschrieben.


Rolf,

der Tippfehler kommt nicht vom User, sondern von mir im Programmcode.
Zuletzt geändert von Koverhage am Mo, 26. Apr 2010 8:07, insgesamt 1-mal geändert.
Gruß
Klaus
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:

Re: DBF Datei wird zerstört

Beitrag von Martin Altmann »

Klaus,
bist Du Dir bei dem, was Du da gepostet hast, wirklich sicher :?:
Der Name für die zu erstellende Datei und für die Datei mit den Strukturdefinitionen (deren Aufbau also kopiert werden soll), sind bei Dir identisch :!:

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
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: DBF Datei wird zerstört

Beitrag von Rolf Ramacher »

Hi Klaus,

es gibt noch eine andere Function File() diese gibt .t. oder .f. zurück. versuch es doch mal so

Code: Alles auswählen

if File("xyz.dbf") =.f.
   Dbcreate("xyz.dbf",aStruc)
endif


Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: DBF Datei wird zerstört

Beitrag von Koverhage »

Martin,

jetzt ja ;-)

Rolf,

das hätte den gleichen Effekt, da es nicht die Abfrage an sich ist, es fehlt dort nur das Verzeichnis.
Gruß
Klaus
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: DBF Datei wird zerstört

Beitrag von Rolf Ramacher »

Hi Klaus,

wo soll die Datei denn Existieren ? Bei Fexists() gibst du kein Arbeitsverzeichnis mit Woher soll die Fexists denn wissen, in welchem Verzeichnis gesucht werden soll. ?
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: DBF Datei wird zerstört

Beitrag von Koverhage »

Hallo Rolf,

das ist nicht das Thema. Habe ich das so undeutlich formuliert ?

1. Ich prüfe mit fexists oder file ob eine bestimmte DBF Datei vorhanden ist.
Aufgrund des Tippfehlers von mir (vergessen den Pfad anzugeben) geben diese .f. zurück
2. Deshalb soll die Datei angelegt werden (hier wurde , was aber scheitert da diese Datei
bereits existiert und durch andere Nutzer im Zugriff ist und es kommt zu dem unschönen Ergebnis,
das alle Daten weg sind.
Gruß
Klaus
Benutzeravatar
Armin
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 393
Registriert: Mo, 26. Sep 2005 12:09
Wohnort: 75331 Engelsbrand
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: DBF Datei wird zerstört

Beitrag von Armin »

Hallo Klaus,

ich kenne das Phänomen mit einem auf Xbase++ umgesetzten dbu.exe in einem Windows Netzwerk.
Wenn dort eine dbf von einem Anwender shared geöffnet ist und ich mit dbu und F3 Felder hinzufügen will, dann werden alle Datensätze entfernt... :?:

Ich hab´s nicht untersucht, es ist aber sehr komisch, weil das exklusive Öffnen scheitert und dann trotzdem die Datensätze entfernt werden... :roll:

Gruß, Armin
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: DBF Datei wird zerstört

Beitrag von Rolf Ramacher »

Hi Klaus,

ja jetzt habe ich es verstanden. Versuche es doch mal so. Ich habe eine Function, die prüft, ob ein exclusivezugriff funkt.

Code: Alles auswählen

#Define CRLF Chr(13)+ Chr(10)
Function Netz_Use()
Local lJa:=.f.
PARAMETERS Datei, ex_use, cTitel, Info, Name

If Info="alias"
	If ex_use && exclusive
		Use &Datei New Exclusive Alias Name
	EndIf
Else
	If ex_use && exclusive
		Use &Datei New Exclusive
	EndIf
EndIf
If NetErr()
	lJa:=.f.
	Msgbox("Die Datenbank "+Datei+" ist in Benutzung"+CRLF+;
         "Das Programm an allen Stationen beenden und erneut starten",cTitel)
Else
	lJa:=.t.
EndIf
Return lJa
Nach dem Rückgabe von "lJa" kannst du ja entsprechend reagieren.
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: DBF Datei wird zerstört

Beitrag von Koverhage »

Rolf,

ich prüfe doch zuerst ob die Datei besteht und bekomme aufgrund des Tippfehlers ein .f.
zurück.
In dem Fall nützt mir ein exklusives Öffnen nichts.

Es geht ja auch nur darum, das dbcreatefrom eine Fehlermeldung zurückgibt, das die
Datei nicht erstellt werden kann, da diese in Bearbeitung ist, die Datei aber zerstört wird.
Gruß
Klaus
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:

Re: DBF Datei wird zerstört

Beitrag von brandelh »

Hi,

eine offene Datei dürfte von dbCreate() nicht überschrieben werden.
Ich habe es zwar nicht probiert, aber wenn es sich so verhält solltest du ein kleines Beispielprogramm an Alaska als PDR senden.
Gruß
Hubert
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: DBF Datei wird zerstört

Beitrag von Rolf Ramacher »

Hallo Leute,

also ich habe es gerade probiert. Bei meiner Artikelinfo wird beim start immer eine tmporäre Datenbank erzeugt - ich habe diese mit meinem Editor geöffnet und dass die Artikelinfo gestaret.

Ich erhalte dann eine Fehlermeldung, daß die Datei NICHT mit DbCreate() erzeugt werden kann.

@Klaus, dann muß bei dir noch ein anderer Fehler sein.
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9367
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 102 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: DBF Datei wird zerstört

Beitrag von Tom »

Klaus, dann muß bei dir noch ein anderer Fehler sein.
Mein Reden seit Anno Tobak. DbCreate() zerstört eine Datei nicht, wenn sie das Ziel der Operation wäre. Wahrscheinlich gehst Du später im Code davon aus, mit der neuen Datei zu arbeiten, während Du tatsächlich auf derjenigen herumrödelst, die als Kopiervorlage genutzt werden sollte. :wink:
Herzlich,
Tom
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: DBF Datei wird zerstört

Beitrag von Koverhage »

Tom,

mag sein das es bei DBCreate so ist, bei DBCreateFrom ist es definitiv so.
Gruß
Klaus
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: DBF Datei wird zerstört

Beitrag von Rolf Ramacher »

Hi Klaus,

ich habe gerade das mit DbCreateFrom() mit dem Testprogramm aus der Hilfe ausprobiert und bekomme den Fehler nicht
reproduziert. Es kann also m.E. nicht am DbCreateFrom() liegen. da muß noch etwas anderes sein.
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: DBF Datei wird zerstört

Beitrag von Koverhage »

Hallo Rolf,

welches Testprogramm ?

Wenn Du das Beispiel 1 nimmst, müsste bei DBcreatefrom noch als letzter Parameter der Alias angegeben werden.
In dem Beispiel wird ja nur eine Temp Datei erzeugt und nachher umbenannt und wird auch geschlossen.

Aber darum geht es eigentlich nicht.

Wenn Du die Strukturdatei nimmst, das Programm mehrfach startest und dann ein dbcreatefrom machst (natürlich
direkt auf Adressen.dbf) müsste es so sein wie ich beschrieben habe.

Hier mal mein Testprogramm:
Die Dateien liegen hier im Beispiel in c:\temp
Die Abfrage ob die Datei vorhanden ist, wurde aber nur mit c:\ geprüft

*+
*+ Source Module => G:\CLICK\SAMPLE.PRG
*+

#include "AppEvent.ch"
#include "Common.ch"
#include "DCMSG.CH"
#include "DCPRINT.CH"
#include "DCDIALOG.CH"
#INCLUDE "dctree.ch"
#include "Fileio.ch"
#include "Inkey.ch"
#include "Gra.ch"
#include "Xbp.ch"
#include "dll.ch"
#include "nls.ch"
#include 'dccolor.ch'
#include 'bap.ch'


#define BYTE CHR(0)
#define WORD BYTE+BYTE
#define DWORD WORD+WORD
#define LONG DWORD+DWORD
#define NULL 0

#define MAX_ZUGRIFFE 324


*+
*+ Procedure Main()
*+
proc Main()

local nEvent, mp1, mp2, oXbp, drawingArea, abbruch, state

parameters dbfpath
// *PUBLIC CLIPPER, FlagShip

// restore from mdisp addit && Bildschirm-Attribute
// XbpCRT-Fenster erzeugen
// oCrt := XbpDialog():New( AppDesktop(), , {0,30}, {800,570}, , .f. )
oCrt := XbpDialog():New( AppDesktop(), , {0,20}, {800,580}, , .f. )
oCrt :TaskList := .t.
oCrt:title := "Test DbCreateFrom"
oCrt:drawingArea:new( , ,{0,20}, {800,540}, , .F.)
//oCrt:drawingArea:bitmap := BMP_BACKGROUND
oCrt:Create()
ops:=xbppresspace():new()
ops:create(oCrt:drawingarea:windevice())
oCrt:show()
state:=oCrt:GetFrameState()
if state == XBPDLG_FRAMESTAT_NORMALIZED
oCrt:SetFrameState(XBPDLG_FRAMESTAT_MAXIMIZED)
endif

setcancel( .F. )

anfang( 'le000' )

ende()
return


*+ Procedure ende()
*+
procedure ende

oCrt:show()
dbunlockall()
return



*+
*+ Procedure anfang()
*+
procedure anfang( prozed_na )
cStrDatei := "c:\temp\artikel.str"
cDbfDatei := "c:\temp\artikel.dbf"
cDbtDatei := "c:\temp\artikel.dbt"
cNtxDatei1 := "c:\temp\artikel.ntx"
set excl OFF
SET TALK OFF
set cons OFF
set conf on
set exac OFF
set scor OFF
set inte on
set dele on
set date GERM
set epoch to 1980
set century on
//DC_LangSet( DCLANG_GERMAN )
DC_DOTHOTKEY(-1)
DC_FIELDWDEBUG(.F.)
DC_READGUIDEBUG(.F.)
set rushmore off
set optimize off
if !Fexists("c:\artikel.dbf")
DbCreateFrom( cDbfDatei,, cStrDatei,,.t.,"arneu" ) // Neue Datei erzeugen
("arneu")->(DbCloseArea())
endif
use (cDbfDatei) alias ar
if !Fexists( cNtxDatei1 )
clindex(cDbfDatei, cNtxDatei1, 'PadL(rtrim(artnr),12)')
endif
return



procedure clindex

parameters datei, ntx, schluessel
index on &schluessel to &ntx
return
Gruß
Klaus
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9367
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 102 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: DBF Datei wird zerstört

Beitrag von Tom »

Am Rande - was ist eigentlich aus diesen beiden Herrschaften geworden?

set rushmore off
set optimize off
Herzlich,
Tom
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: DBF Datei wird zerstört

Beitrag von Koverhage »

Tom,

ich setze die immer auf OFF, hat bei mir zu keiner Verbesserung der Geschwindigkeit geführt.
Soweit ich mich erinnere, haben sogar teilweise Daten gefehlt, kann das aber nicht mit
Bestimmtheit sagen.
Gruß
Klaus
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:

Re: DBF Datei wird zerstört

Beitrag von brandelh »

Hi,

soweit ich mich erinnere wäre es schneller mit ON, wenn es funktionieren würde ...
ich meine mich aber zu erinnern, dass man es aus Sicherheitsgründen abschalten soll.
Ich kann mich ja aber auch irren 8)

Laut DOKU steht es auf ON.
Gruß
Hubert
Antworten