Datenbank-Alias existiert nicht/ist ungültig

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

Moderator: Moderatoren

Antworten
Werner
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 118
Registriert: Sa, 18. Mär 2006 16:08

Datenbank-Alias existiert nicht/ist ungültig

Beitrag von Werner »

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

Re: Datenbank-Alias existiert nicht/ist ungültig

Beitrag von brandelh »

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)
if file("&sv_binx")
ist das & vor sv ein Tippfehler ?

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
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Datenbank-Alias existiert nicht/ist ungültig

Beitrag von Tom »

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

Re: Datenbank-Alias existiert nicht/ist ungültig

Beitrag von AUGE_OHR »

brandelh hat geschrieben: Di, 03. Jul 2018 11:20

Code: Alles auswählen

   nMyDBF := select()  
das es um den Alias geht wäre ALIAS() doch besser als SELECT(), oder :?:
gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Datenbank-Alias existiert nicht/ist ungültig

Beitrag von brandelh »

hättest du gelesen was ich sonst geschrieben habe, wüsstest du dass ich den Select-Bereich dem Alias immer vorziehe 8)
Gruß
Hubert
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Datenbank-Alias existiert nicht/ist ungültig

Beitrag von Jan »

Hubert,

Du solltes Jimmy besser kennen.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Datenbank-Alias existiert nicht/ist ungültig

Beitrag von Tom »

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

Re: Datenbank-Alias existiert nicht/ist ungültig

Beitrag von AUGE_OHR »

hi,
brandelh hat geschrieben: Di, 03. Jul 2018 21:43 hättest du gelesen was ich sonst geschrieben habe, wüsstest du dass ich den Select-Bereich dem Alias immer vorziehe )
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
Dieses Verfahren geht 100 Mal gut, aber an dieser Stelle kommt die Fehlermeldung:
und
mit einem bestimmten Alias-Namen
sowie
Um diese Datei im Arbeitsbereich zu schließen
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" Problem :!:

---

@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() //
Die Funktion gibt ein eindimensionales Array zurück.
Es enthält Zeichenketten mit den Aliasnamen aller belegten Workareas im Workspace.
man könnte mit WorkSpaceList() also überprüfen ob ein ALIAS() existiert und in welchem SELECT() es ist.

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
Antworten