Fehler mit ALIAS

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

Moderator: Moderatoren

Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14655
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Fehler mit ALIAS

Beitrag von Jan »

Auf einer "fehler.dbf" habe ich eine "fehler.cdx" mit 2 Tags erstellt. 1 Tag auf das Feld "nr" mit UNIQUE, den 2. Tag auf das gleiche Feld, aber ohne UNIQUE.

Innerhalb einer Funktion greife ich gleichzeitig auf beide Tags zu. Also öffne ich die dbf 2x, jeweils mit dem passenden Tag. Und gebe jeweils einen eindeutigen Alias an.

Das Problem: Je nach Alias und Feldaufruf erhalte ich verschiedene Fehler:

(ich öffne die dbf in diesem Testlauf nur 1x, um den Fehler besser eingrenzen zu können)

Öffne ich die dbf über "USE fehler INDEX fehler ALIAS fehler NEW SHARED", verwiese auf die Felder mit "fehler->feld", dann wird nur Müll angezeigt. Nix mit UNIQUE. Nur den 1. Datensatz im Browse, dafür aber in jeder Zeile der gleiche.

Greife ich auf die Felder mit "(fehler)->feld" zu, dann bekomme ich einen Laufzeitfehler: "Unbekannte Variable Fehler".

Öffne ich das ganze so: "USE fehler INDEX fehler ALIAS uebersicht NEW SHARED", und greife wieder mit "(uebersicht)-feld" zu, dann bekomme ich beim kompilieren diesen Fehler: "Error:" Keine Fehlernummer, keine Beschreibung, nix.

Mit Alias uebersicht, aber Zugriff mit "uebersicht->feld", kann ich sauber kompilieren, aber es gibt beim Öffnen der Datenbank einen Laufzeitfehler "Datenbankalias existiert nicht/ungültig", mit "Operation: Fehler".

Da stellen sich mir 2 Fragen: Warum ist der Fehler überhaupt unterschiedlich, je nachdem wie ich den Alias nenne? Und warum gibt es überhaupt einen Fehler? Lt. Onlinehilfe sollte der Zugriff auf die Felder korrekt über (cAlias)->feldname geschehen. Und Einschränkungen an einen Alias habe ich nirgends gefunden.

Jan
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21199
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

Hi Jan,

stell doch mal das Stück Quelltext hier rein, wie Du was und wo machst. Dann kann man sicherlich besser erkennen, wo der Hund begraben ist.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
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:

Beitrag von Martin Altmann »

Hallo Jan,
also dass (fehler)-> und (uebersicht)-> nicht gehen in Deinem Fall, ist klar.
In beiden Fällen geht er von Variablen fehler bzw. uebersicht aus, von denen er den Inhalt nehmen soll - und das ist bei Dir ja nicht der Fall, da es ja die eigentlichen Aliasnamen sind!
Also mußt Du schon mal die () weglassen!
Und Du kannst nicht zweimal die selbe Datei mit dem selben ALIAS im gleichen Thread öffnen.
Gefährlich wird es auch, wenn Du z.B. Variablen oder Feldnamen hast, die so heißen, wie Dein Alias - das könnte das etwas andere Verhalten beim Nutzen von (uebersicht)-> erklären.

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
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21199
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

Hi Martin,

wo hat er denn 2x mit gleichem Alias geöffnet?
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
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:

Beitrag von Martin Altmann »

Hallo Manfred,
er schreibt, dass er es für den Testlauf nur einmal macht - also gehe ich davon aus (und das sagte er ja auch weiter oben), dass dem später nicht so sein wird.
War nur als Hinweis gemeint, damit er daran denkt!

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
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21199
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

Aha,

deswegen meinte ich ja, er solle mal etwas Code reinstellen, damit dieses evtl. Missverständnis verschwindet. Vorstellen kann ich mir dass mit den Alias nämlich so nicht. Aber mit den Klammern hast Du Recht, die sind so nicht erforderlich.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14655
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Beitrag von Jan »

Nene ihr beiden, also das mache ich nun schon richtig. Bei dem 2. öffnen wäre der Alias "details". Ich wollte aber ausschließen, daß der Fehler vielleicht durch das doppelte Öffnen auftaucht, und habe deswegen das 2. Öffnen erstmal wieder komplett rausgenommen.

Und Martin: Wie oben erwähnt sagt die Onlinehilfe, das es wirklich (cAlias)-> heißen muß. Abgesehen davon: Es funktioniert ja auch ohne die Klammern nicht.

Jan
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:

Beitrag von brandelh »

Hallo Jan,

zuerst die Syntax:

Code: Alles auswählen

use XYZ alias XYZ   ->   der Alias hier [b]ist[/b] XYZ.


Der einzig richtige Zugriff über diesen Alias ist XYZ->(funtion()) oder XYZ->Feld !

Code: Alles auswählen

use XYZ 
if neterr()
   ...
endif
nAlias := select()   // hier wird der numerische Aliaswert in nAlias gespeichert.
Der 'text' Alias ist hier beim 1. Öffnen XYZ später dann + Selectbereich, das interessiert aber nicht.
Wir nehmen den in der Variablen nAlias gespeicherten numerischen Alias (nenn ich jetzt einfach mal so).
Der einzig richtige Zugriff über eine Variable ist (lassen wir mal & beiseite): (nAlias)->(funtion()) oder (nAlias)->Feld !

Wenn man den Selectbereich wissen würde (kein guter Stil, da zu eingeschränkt) könnte man z.B. auch (3)->feld schreiben, sobald 3 der richtige Selectbereich wäre.

Eine mögliche Ursache für deine Probleme könnte in einem Öffnungsfehler liegen. Da du alles in eine Zeile schreibst, was von der SYNTAX her erlaubt ist, hast du keine Chance zu prüfen ob beim use bereits ein Fehler aufgetreten ist.

Daher nehme ich immer folgende Form:

Code: Alles auswählen

use XYZ shared NEW
if neterr()
   Fehlermeldung()
   Ende...
else
   set index to und hier alle Indexdateien der Datei ! Führende zuerst !
endif
Man kann ohne Probleme eine DBF mehrfach öffnen, dann aber bitte jeweils shared, neterr() prüfen und alle Indexe aufmachen.
Die Reihenfolge der Indexdateien kann man dann verändern, damit die führende gleich passt.
Mehrfach wurde geschrieben, dass man nicht immer alle Indexdateien aufmachen muss, was richtig ist, wenn man alles richtig macht.
Aber sobald auch nur auf eine Datei nicht nur lesend zugegriffen wird, spart man sich jede Menge Ärger wenn man alle öffnet.

Ob das jetzt dein Problem trifft kann ich aber nicht beurteilen.
Gruß
Hubert
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:

Beitrag von Martin Altmann »

Hallo Jan,
dass weiß ich, dass die Online-Hilfe das so sagt! Aber die Online-Hilfe sagt cAlias!!! Und das heißt, eine Character-Variable, die den Aliasnamen enthält - und darum geklammert werden muss!
Also: () nur wenn eine Variable genommen wird, sonst weglassen!!!
Und wie gesagt: Ein Alias sollte nie nicht unter keinen Umständen den selben Namen wie ein Feld oder eine andere Variable haben!

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

Beitrag von Jan »

OK. Ich schiebe das Mißverständnis jetzt mal auf die fortgeschrittene Uhrzeit 8) .

Aber es gibt doch auch ohne Klammern Fehler! Und der Alias heißt in beiden Fällen (uebersicht, fehler) anders als die Felder. Und irgendwelche anderen Variablen.

Und Hubert: Wie gesagt, es ist eine cdx, die nur die beiden Indizee enthält. Ich lege mit OrdSetFocus() nur den jeweils führenden Index fest.

Jan
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:

Beitrag von brandelh »

Hi,

das es in beiden Fällen Fehler gibt glauben wir gerne, deshalb brauchen wir den Quellcode. Aber ich meine du hast dich auch über die unterschiedlichen Fehlermeldungen gewundert. Die sind nun ja erklärt.

(XYZ)-> muss die Fehlermeldung bringen, dass XYZ keine Variable ist; kein Wunder, wenn sie ein Alias ist.
Gruß
Hubert
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:

Beitrag von Koverhage »

versuch es doch mal so:

("fehler")->text
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14655
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Beitrag von Jan »

So, ich habe das jetzt mal eingrenzen können. Das mit den Klammern ist ja jetzt anscheinend erstmal geklärt. Also die Fehlermeldung beim Öffnen der Datenbank

[quote]
------------------------------------------------------------------------------
FEHLERPROTOKOLL von "C:\ALASKA\Programme\Quisy\Quisy.exe" Datum: 22.02.2007 08:55:24

Xbase++ Version : Xbase++ (R) Version 1.90.331
Betriebssystem : Windows XP 05.01 Build 02600 Service Pack 2
------------------------------------------------------------------------------
oError:args :
-> NIL
oError:canDefault : N
oError:canRetry : J
oError:canSubstitute: N
oError:cargo : NIL
oError:description : Datenbank-Alias existiert nicht/ist ung
hschmidt
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 164
Registriert: Mo, 09. Jan 2006 17:06
Wohnort: Paderborn
Hat sich bedankt: 2 Mal
Kontaktdaten:

Beitrag von hschmidt »

Hallo Jan,

beim USE werden CDX-Indexdateien, die den selben Namen haben wie die DBF-Datei (bei Dir 'Fehler') automatisch geöffnet.
Ich vermute, dadurch dass Du den Index beim USE noch explizit mit angibst, versucht das Programm, die Indexdatei ein zweites Mal zu öffnen.

Wenn Du INDEX einfach weglässt und den führenden Index mit OrdSetFocus() bestimmst, funktioniert es dann?

Hans
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14655
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Beitrag von Jan »

Hallo Hans,

wenn ich den Index weglasse, hat das nachfolgende

Code: Alles auswählen

ORDSETFOCUS("fehleruni")
keinerlei Auswirkungen. Also scheint der Index nicht geöffnet zu sein.

Abgesehen davon mache ich das grundsätzlich so, daß der Index so heißt wie die dbf. Und nirgends macht das Probleme, nur hier.

Alles ging gut bis ich den Alias eingebaut habe.

Jan
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:

Beitrag von Rolf Ramacher »

Hi Jan,

warum benötigst du denn den alias. ?
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14655
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Beitrag von Jan »

Weil ich die dbf in diesem Dialog 2x mit unterschiedlichen Sortierungen öffnen muß.

Jan
Günter Beyes
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 315
Registriert: Mo, 16. Okt 2006 13:04
Wohnort: Region Stuttgart

Beitrag von Günter Beyes »

Hallo Jan,

also meines Erachtens ist der Fehlerort nicht Zeile 43 von FEHLERLISTE1, sondern es passiert irgendwo innerhalb des Codeblocks eine Ebene darüber, siehe (B)FEHLERLISTE1(0).

Ersetzt du den Standard-Errorblock durch einen eigenen, und wenn ja was tut der ?

Viele Grüße,
Günter
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14655
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Beitrag von Jan »

Hallo Günter,

ja, ich benutze eine modifizierte errorsys. Ich schreibe darin die Fehler in besagte fehler.dbf. Funktioniert auch einwandfrei. Sonst überall.

Und wenn ich die wieder raus nehme ist die Fehlermeldung genau die gleiche. Es liegt also nicht an meiner errorsys.

Jan
Günter Beyes
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 315
Registriert: Mo, 16. Okt 2006 13:04
Wohnort: Region Stuttgart

Beitrag von Günter Beyes »

Hallo Jan,

was sagt DBESetDefault() unmittelbar vor dem USE-Befehl?

Günter
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14655
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Beitrag von Jan »

DBFCDX, was auch korrekt ist.

Jan
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14655
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Beitrag von Jan »

Ich habe mal versucht, den Index nachträglich zu öffnen. Dann aucht der Fehler dort auf.

Gibt es irgendwelche Inkompatibilitäten zwischen Alias und Index? Wäre doch arg merkwürdig. Anderseits: Nur Alias funktioniert, und nur Index auch. Nur beides zusammen nicht.

Jan
Günter Beyes
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 315
Registriert: Mo, 16. Okt 2006 13:04
Wohnort: Region Stuttgart

Beitrag von Günter Beyes »

Hallo Jan,

taucht der Fehler auch in einem Minimalprogramm auf, das ausschließlich die eingebauten Funktionen von Xbase++ verwendet und nichts anderes tut als die Datei zu öffnen?

Ich habe die Situation gerade mal mit einer willkürlich gewählten DBF in meinem Standard-Ausprobierprogramm nachgestellt, und hier funktioniert das fehlerlos. :?

Günter
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:

Beitrag von brandelh »

Hallo Jan,

hast du nach dem USE auf NETERR() gepfrüft ?

Wie man in der errorsys.prg nachlesen kann, gibt es bei USE nie einen Fehler auch wenn die Datei nicht geöffnet werden konnte !

Deshalb ist - wie schon geschrieben - grundsätzlich die Zeile

use ... index ...

zu vermeiden !
Gruß
Hubert
Benutzeravatar
andreas
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1902
Registriert: Mi, 28. Sep 2005 10:53
Wohnort: Osnabrück
Hat sich bedankt: 4 Mal
Kontaktdaten:

Beitrag von andreas »

Hallo Jan,

früher habe ich auch die Datenbank und Index so wie du in einer Zeile geöffnet. Nach dem Ich es satt hatte, ständig Fehler in solchen Zeilen zu suchen, habe ich es aufgeteilt: zuerst die Datenbank öffnen, dann die Indexdatei(en). So konnte ich zumindest eingrenzen, wo der Fehler genauer vorkam.
Gruß,

Andreas
VIP der XUG Osnabrück
Antworten