Exclusive Zugriff für Dbpack

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

Moderator: Moderatoren

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

Exclusive Zugriff für Dbpack

Beitrag von Rolf Ramacher »

Hallo zusammen,

ich möchte beim Programmstart alle Datenbanken packen. Deshalb lade ich alle dbf in ein Array und dieses durchlaufe ich dann. Es läuft auch, aber irgendwann knallt es dann immer bei der gleichen datenbank.

so sieht mein Code aus:

aDb:=Directory("*.dbf")
For i = 1 to Len(aDb)
cDb:=aDb[1]
If Netz_Use(cDb,.t.,cDB+"im Zugiff")
(cDB)->(DbPack())
Close (cDb)
EndIf
Next i

beim Dbpack() erhalte ich die Meldung, daß die Datenbank ungültig ist.
Dies müßte doch gehen, ohne die Datenbanken direkt anzusprechen.

Die Function Netz_Use funkt. in anderen Programmteilen problemlos.
Auch mit Alias kommt die gleiche Meldung.
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12911
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Re: Exclusive Zugriff für Dbpack

Beitrag von AUGE_OHR »

hi,
Rolf Ramacher hat geschrieben: aDb:=Directory("*.dbf")
For i = 1 to Len(aDb)
cDb:=aDb[1]
If Netz_Use(cDb,.t.,cDB+"im Zugiff")
(cDB)->(DbPack())
Close (cDb)
EndIf
Next i
beim Dbpack() erhalte ich die Meldung, daß die Datenbank ungültig ist.
Dies müßte doch gehen, ohne die Datenbanken direkt anzusprechen.

a.) Umlaute in DBF Namen ? (wenn ja ConvToOemCP() )
b.) NTX oder CDX ? (wenn CDX -> DbeSys.PRG ?
c.) ist die DBF wirklich ok ? wenn Memo auch ok ?

gruss by OHR
Jimmy
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1931
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Beitrag von Rolf Ramacher »

Hi Jimmy,

danke für deine schnelle Antwort. Ich habe es gefunden, es lag am anhang .dbf. Ohne ".dbf" läuft es. Aber nächstes Problem.

Nachdem etliche Datenbanken erfolgreich gepackt wurden erhalte ich die Meldung Kein Platz im Workspace für diese Workarea .

Gibt es eine Begrenzung ? Die Länge der aDb ist 332 Einträge.
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1931
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Beitrag von Rolf Ramacher »

Hallo,

die oben gennante Meldung mit der Workspace erhalte ich nur bei 2 Datenbanken. Die anzahl der Datensätze sind nur ca. 700. Es gibt nur ein Feld mit "C" 59 Zeichen.

Hat hierzu jemand eine Idee ?? Denn diese Meldung hatte ich noch nie.
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16545
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 114 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Rolf,
Du öffnest 332 Datenbanken? Wie geschieht das in Deiner Funktion? Wird immer mit NEW geöffnet? Ist dann vielleicht der Workarea-Counter zu hoch?

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
AUGE_OHR
Marvin
Marvin
Beiträge: 12911
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Re: Exclusive Zugriff für Dbpack

Beitrag von AUGE_OHR »

hi,
Rolf Ramacher hat geschrieben: Nachdem etliche Datenbanken erfolgreich gepackt wurden erhalte ich
die Meldung Kein Platz im Workspace für diese Workarea .

Die Länge der aDb ist 332 Einträge

Code: Alles auswählen

      (cDB)->(DbPack())
       Close (cDb)
müsste doch sein ?

Code: Alles auswählen

       (cDB)->( DbClose() )
wie Martin auch schon fragte ob du in deiner Netz_Use() ein NEW benutzt ?
kannst ja einfach mal ein

Code: Alles auswählen

 IF USED()
   ? LEN( WorkSpaceList() )
 ENDIF
um zu prüfen wie viele er in seiner List hat.

unabhängig davon würde ich ihm in der FOR/NEXT ein wenig SLEEP()
geben damit er den "Cache" auch wegschreiben kann.

oder wie wäre es mit Index aufbauen nach dem PACK ?

gruss by OHR
Jimmy
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1931
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Beitrag von Rolf Ramacher »

Hallo Martin/Jimmy

also in Netz_use öffne ich die Datenbanken immer mit einem New
aber mit sleep werde ich mal prüfen.

gebe dann Bescheid
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1931
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Beitrag von Rolf Ramacher »

Hallo Martin/Jimmy


@Martin - Nein ich öffne nicht 332 Datenbanken gleichzeitig, sondern das Array enthält 332 Datenbanken.

also mit sleep(001) brachte den gleichen Fehler. Der Hinweis von Jimmy
Close (cDB) brachte ebenfalls den gleichen Fehler.

Die Datenbank heißt im Orginal 0204261.dbf - Ich habe diese mal als
aaa.dbf umbenannt . dann hat es funktioniert. Darf eine Datenbank nicht mit nummern beginnen ??
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16545
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 114 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Rolf,
dann ist das klar!
Warum? Nun, ganz einfach - der Datenbankname ist der ALIAS() - und ein ALIAS() als so hohe Nummer kann Probleme geben (->Workarea!)
Ergo: Die Datei darf schon eine Nummer als Dateinamen haben - nur nicht der entsprechende Alias()!

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
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15699
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 69 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Beitrag von brandelh »

Hallo,

früher bei DOS (eventuell auch Win98) hieß es einmal, dass eine Datei mit einem Buchstaben beginnen muss, das ist heute nicht mehr so, aber eventuell kommt da ein Übersetzungsproblem ins Spiel.

Wenn der Compiler den Dateinamen als Alias nimmt und dieser nur aus Ziffern besteht, könnte bei (cAlias) der Alias 999999 intern mit dem numerischen Selectbereich 3-> ... verwechselt werden, da ja beides erlaubt ist, aber einen Selectbereich mit 9989989 ist jenseits aller Grenzen.

Nur so als Vermutung, passen würde dann die Fehlermeldung.
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15699
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 69 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Beitrag von brandelh »

Hallo Martin,

warst wiedermal schneller :wink:

Unsere Erklärungen sind aber ziemlich ähnlich ... werden dann ja wohl stimmen :D
Gruß
Hubert
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16545
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 114 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Hubert,
das tun sie - bin da früher nämlich auch oft genug drüber gestolpert... :D

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
Jan
Marvin
Marvin
Beiträge: 14659
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Beitrag von Jan »

Wie wäre es denn, wenn man diese Datei dann öffnet als

Code: Alles auswählen

Use 0204261 Alias A0204261 new Shared
Dann könnte man den Alias aus dem Inhalt des Arrays und dem vorgestellten Buchstaben einfach zusammenstellen, und es wäre keine Nummer mehr?

Jan
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15699
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 69 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Beitrag von brandelh »

Hi,

genau so sollte es gehen und wenn wir gleich dabei sind.
Hast du schon mal versucht 'DBF1234567890' mit DBU zu öffnen ?
Das Öffnen wäre kein Problem, da ja kurze Dateinamen gebildet werden, aber leider 'DBF123~1' ist das ~ Zeichen wohl im Namen, aber nicht im Alias erlaubt, somit würde ich eine Funktion vorschlagen, die beides erledigt:

Code: Alles auswählen

function MyAlias(cDBF)
     local cAlias := "A"+cDBF
     cAlias := StrTran(cAlias,"~","_")
return cAlias

USE (cDBF) ALIAS (MyAlias(cDBF)) ...

(... nicht getestet, einfach so aus dem Kopf... nicht getestet, einfach so aus dem Kopf, also sind Fehlermeldungen möglich)
Gruß
Hubert
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14659
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Beitrag von Jan »

Hubert,

warum denn so kompliziert? Wie Du schon sagst: DBU macht das Problem mit der ~ bzw. dem langen dateinamen jenseits von 8.3. Xbase++ hat damit Null Probleme, jedenfalls nicht mit der Länge. Also muß in einem Xbase-Code die Tilde auch nicht ersetzt wereden.

Jan
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15699
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 69 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Beitrag von brandelh »

Hi Jan,

da hast du natürlich Recht, der Vorschlag gehört ins Clipperforum :wink:
Gruß
Hubert
Antworten