Datenbank-Alias existiert nicht/ist ungültig
Moderator: Moderatoren
Datenbank-Alias existiert nicht/ist ungültig
Hi!
Ich habe ein Problem mit einem bestimmten Alias-Namen
sv_binx = alltrim(sv_path1)+"vs_binx.dbf"
Um diese Datei im Arbeitsbereich zu schließen, hat mir ein Kollege einmal folgenden Code empfohlen:
if file("&sv_binx")
use &sv_binx ALIAS alia220
close alia220
endif
Dieses Verfahren geht 100 Mal gut, aber an dieser Stelle kommt die Fehlermeldung:
Fehler BASE/8022
Beschreibung: Datenbank-Alias existiert nicht/ist ungültig
Thread ID:1
Was mache ich hier falsch? Ist der ALIAS-Name alia220 vielleicht anderweitig definiert?
Gruß Werner
Ich habe ein Problem mit einem bestimmten Alias-Namen
sv_binx = alltrim(sv_path1)+"vs_binx.dbf"
Um diese Datei im Arbeitsbereich zu schließen, hat mir ein Kollege einmal folgenden Code empfohlen:
if file("&sv_binx")
use &sv_binx ALIAS alia220
close alia220
endif
Dieses Verfahren geht 100 Mal gut, aber an dieser Stelle kommt die Fehlermeldung:
Fehler BASE/8022
Beschreibung: Datenbank-Alias existiert nicht/ist ungültig
Thread ID:1
Was mache ich hier falsch? Ist der ALIAS-Name alia220 vielleicht anderweitig definiert?
Gruß Werner
- brandelh
- 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: Datenbank-Alias existiert nicht/ist ungültig
Kann es sein, dass diese Funktion an mehreren Stellen gleichzeitig aufgerufen wird ?
Wenn der Namen grundsätzlich problematisch wäre, dann würde es nie funktionieren.
Du schreibst leider nicht, wo genau der Fehler auftritt.
Wenn es beim USE ist, könnte der Aliasname bereits benutzt sein (also doppelt aufgerufen).
Wenn es beim Close ist, könnte es sein dass use einen Fehler hatte und die Datei nicht geöffnet wurde (warum auch immer)
wenn der Name der DBF in einer Variablen sv_binx liegt, dann ist dies der richtige Weg (geht auch bei local):
if file( sv_binx )
use (sv_binx) ...
Gerade wenn man es mit mehreren Fenstern zu tun hat, sollte man den Alias automatisch bestimmen lassen und entweder abfragen,
oder besser gleich mit dem select Bereich in einer Variablen arbeiten, dann ist das immer sicher.
Den Macro Operator benötigt man nur, wenn man ein Macro übersetzen will, in einer Private oder einem String.
use (cFileName) NEW ...
if neterr() // *** es kann immer was schief gehen !!!
Fehlerbehandlung
nMyDBF := NIL
else
nMyDBF := select()
...
Zugriffe:
(nMyDBF)->Feldname
(nMyDBF)->(Lastrec())
if ! (nMyDBF)->(eof())
CLOSE (nMyDBF)
Wenn der Namen grundsätzlich problematisch wäre, dann würde es nie funktionieren.
Du schreibst leider nicht, wo genau der Fehler auftritt.
Wenn es beim USE ist, könnte der Aliasname bereits benutzt sein (also doppelt aufgerufen).
Wenn es beim Close ist, könnte es sein dass use einen Fehler hatte und die Datei nicht geöffnet wurde (warum auch immer)
ist das & vor sv ein Tippfehler ?if file("&sv_binx")
wenn der Name der DBF in einer Variablen sv_binx liegt, dann ist dies der richtige Weg (geht auch bei local):
if file( sv_binx )
use (sv_binx) ...
Gerade wenn man es mit mehreren Fenstern zu tun hat, sollte man den Alias automatisch bestimmen lassen und entweder abfragen,
oder besser gleich mit dem select Bereich in einer Variablen arbeiten, dann ist das immer sicher.
Den Macro Operator benötigt man nur, wenn man ein Macro übersetzen will, in einer Private oder einem String.
use (cFileName) NEW ...
if neterr() // *** es kann immer was schief gehen !!!
Fehlerbehandlung
nMyDBF := NIL
else
nMyDBF := select()
...
Zugriffe:
(nMyDBF)->Feldname
(nMyDBF)->(Lastrec())
if ! (nMyDBF)->(eof())
CLOSE (nMyDBF)
Gruß
Hubert
Hubert
- Tom
- 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: Datenbank-Alias existiert nicht/ist ungültig
Das sind alles die richtigen Hinweise von Hubert. Ergänzend noch: Du kannst mit "Used(cAlias)" jederzeit (z.B. vor dem Close) abfragen, ob eine Tabelle mit dem Alias, der in cAlias gespeichert ist, wirklich in Benutzung ist. Das ist sozusagen ein verspätetes "NetErr()". Ohne Variable: Used("blabla88"), falls der Alias "blabla88" lautet.
Herzlich,
Tom
Tom
- AUGE_OHR
- Marvin
- Beiträge: 12909
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Datenbank-Alias existiert nicht/ist ungültig
das es um den Alias geht wäre ALIAS() doch besser als SELECT(), oder
gruss by OHR
Jimmy
Jimmy
- brandelh
- 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: Datenbank-Alias existiert nicht/ist ungültig
hättest du gelesen was ich sonst geschrieben habe, wüsstest du dass ich den Select-Bereich dem Alias immer vorziehe
Gruß
Hubert
Hubert
- Jan
- Marvin
- Beiträge: 14655
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Datenbank-Alias existiert nicht/ist ungültig
Hubert,
Du solltes Jimmy besser kennen.
Jan
Du solltes Jimmy besser kennen.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Tom
- 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: Datenbank-Alias existiert nicht/ist ungültig
Die Fehlermeldung kommt, wenn Tabellenoperationen stattfinden sollen, ohne dass in der Workarea eine Tabelle zur Verfügung steht. Entweder ist sie nicht geöffnet oder nicht selektiert. Beides kann man prüfen. Für beides kann es viele Gründe geben. Die wir übrigens im Forum schon einige Male diskutiert haben.
Herzlich,
Tom
Tom
- AUGE_OHR
- Marvin
- Beiträge: 12909
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Datenbank-Alias existiert nicht/ist ungültig
hi,
es kann doch durchaus sein das die SELECT Bereiche gefüllt sind aber der ALIAS "zu dem Zeitpunkt" nicht existiert.
Werner schreibt
---
@Jan : bitte keine leeren Kommentare sondern Lösungs-Vorschläge.
---
in \SOURCE\SYS\AppExit.prg kann man sehen was die App normal machen würde.
wenn man solche Fehler zur Laufzeit nicht abfängt dann kann man es auch als Erweiterung ins Error.LOG einbauen um dem Problem auf die Spur zu kommen.
ich verwende auch SELECT() und die Frage war nach ALIAS -> ALIAS()
es kann doch durchaus sein das die SELECT Bereiche gefüllt sind aber der ALIAS "zu dem Zeitpunkt" nicht existiert.
Werner schreibt
undDieses Verfahren geht 100 Mal gut, aber an dieser Stelle kommt die Fehlermeldung:
sowiemit einem bestimmten Alias-Namen
er kann also, bei einem bestimmten Alias-Namen, es 99 x Mal schliessen aber beim 100st Mal kommt ein Fehler ... das ist doch kein "normales" ProblemUm diese Datei im Arbeitsbereich zu schließen
---
@Jan : bitte keine leeren Kommentare sondern Lösungs-Vorschläge.
---
in \SOURCE\SYS\AppExit.prg kann man sehen was die App normal machen würde.
Code: Alles auswählen
aWS := WorkSpaceList() //
man könnte mit WorkSpaceList() also überprüfen ob ein ALIAS() existiert und in welchem SELECT() es ist.Die Funktion gibt ein eindimensionales Array zurück.
Es enthält Zeichenketten mit den Aliasnamen aller belegten Workareas im Workspace.
wenn man solche Fehler zur Laufzeit nicht abfängt dann kann man es auch als Erweiterung ins Error.LOG einbauen um dem Problem auf die Spur zu kommen.
gruss by OHR
Jimmy
Jimmy