Fehlermeldung "Ungültiger Descriptor-Index"

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

zachy
**
Beiträge: 37
Registriert: So, 13.05.2012 19:31

Fehlermeldung "Ungültiger Descriptor-Index"

Beitrag von zachy »

Hallo Community,

seit meinem "Umzug" auf den MS SQL Server 2008 R2 läuft vieles ungewohnt... :?

Ich habe bspw ein Rechnungsformular erstellt, welches aus einem Hautpformular (hier stehen Rechnungsnummer, -datum, -kreditor etc.) und einem Unterformular (hier stehen Rechnungsdetails, also die einzelnen Rechnungspositionen).

Als ich noch mit der HSQLDB verbunden war, funktionierte alles wunderbar. Unterformular eingefügt, eingestellt über welche Felder die Tabellen verknüpft sind, unter "Navigationsleiste" den Punkt "Übergeordnetes Formular" ausgewählt, fertig. Alles lief wie schon erwähnt ganz ausgezeichnet.

Jetzt läuft Base mit dem SQL Server. Ich habe das Rechnungsformular aus der alten in die neue Base-Datei kopiert, die korrekten Tabellen und die Verknüpfung eingestellt, klicke voller Vorfreude auf den "Entwurfsmodus an/aus"-Schalter, um das Formular zu benutzen und ..... :shock:
SQL-Status: 07009

Ungültiger Descriptor-Index.
Sie haben versucht, an Position '1' einen Parameter einzufügen, es ist/sind aber nur '0' Parameter erlaubt. Eine Ursache könnte sein, dass die Eigenschaft "ParameterNameSubstitution" in der Datenquelle nicht auf WAHR gesetzt ist.
Die Daten des Unterformulares können nicht geladen werden, die des Hauptformulares schon.

Frage:
Was ist denn bitte der Descriptor-Index? Und warum ist er bei mir ungültig? Von welchen Parametern wird hier gesprochen?
Ich versteh leider nur Bahnhof :(

Hab natürlich schon mal über die Suchfunktion gesucht und auch mächtig viel gefunden, aber leider werde ich da nicht schlau draus.

Ich hoffe es hat jemand eine Idee!

Viele Grüße
zachy
RobertG
********
Beiträge: 2033
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Fehlermeldung "Ungültiger Descriptor-Index"

Beitrag von RobertG »

Hallo zachy,

lese ich diese Zeile:
Sie haben versucht, an Position '1' einen Parameter einzufügen, es ist/sind aber nur '0' Parameter erlaubt. Eine Ursache könnte sein, dass die Eigenschaft "ParameterNameSubstitution" in der Datenquelle nicht auf WAHR gesetzt ist.
Anscheinend geht Base davon aus, dass es sich bei "ParameterNameSubstitution" um ein Ja/Nein-Feld handelt. Wie sieht denn das Feld aus, das Du verknüpfen willst? Welche Werte und Feldeigenschaften hat es in der Tabelle zur Rechnungsnummer, welche Feldeigenschaften in den Rechnungsdetails?

Jetzt ist natürlich auch die Frage, wie Base die Anfrage an die externe Datenbank verpackt, damit die Verknüpfung richtig ankommt.

Gruß

Robert
zachy
**
Beiträge: 37
Registriert: So, 13.05.2012 19:31

Re: Fehlermeldung "Ungültiger Descriptor-Index"

Beitrag von zachy »

Hi Robert,

es dreht sich um folgende Felder:

Primärschlüssel
RechnungsID aus der Tabelle "Rechnungen" - int identity
Auto-Wert Ja
Länge 10
Format-Beispiel 0

Fremdschlüssel
RechnungsDetailsRechnungsID aus der Tabelle "Rechnungsdetails" - int
Eingabe erforderlich Nein
Länge 10
Defaultwert (Leer)
Format-Beispiel 0

Es sind also beides keine Ja/Nein-Felder.

Wenn ich "ParameterNameSubstitution" bei Google eingebe, gelange ich auf folgende Seite von OOo:
http://www.openoffice.org/dba/howto/param_subst.html
The Problem
When working with parametrized statements, OpenOffice.org usually uses named parameters such as in "SELECT * FROM <table> WHERE <field> = :param" Here ":param" is a so-called named parameter. However, some databases do not allow such named parameters, but only unnamed ones. The statement then would be "SELECT * FROM <table> WHERE <field> = ?". Such databases usually reject statements with named parameters.
Mir ist immer noch nicht klar, von was für Parametern hier gesprochen wird.

Und dann wird da noch ein Makro angegben, welches man benutzen kann, um das Problem zu beheben. Ich bin auf dem Makro-Gebiet nicht sonderlich bewandert. Kann ich das Makro einfach unter "Meine Makros" speichern und dann ist das Problem behoben?
RobertG
********
Beiträge: 2033
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Fehlermeldung "Ungültiger Descriptor-Index"

Beitrag von RobertG »

Hallo zachy,
zachy hat geschrieben: es dreht sich um folgende Felder:
Primärschlüssel
RechnungsID aus der Tabelle "Rechnungen" - int identity
Auto-Wert Ja
Länge 10
Format-Beispiel 0

Fremdschlüssel
RechnungsDetailsRechnungsID aus der Tabelle "Rechnungsdetails" - int
Eingabe erforderlich Nein
Länge 10
Defaultwert (Leer)
Format-Beispiel 0
Der Primärschlüssel ist der aus dem Formular, richtig? RechnungDetailsRechnungsID steht in dem Subformular und gehört zu der Tabelle Rechnungsdetails. In Ordnung? Wie hast Du die Felder miteinander verbunden? Die GUI von Base ist da etwas lax. Aber sobald Du einen Beziehungsentwurf machst wird das durch die (in meinem Fall interne HSQLDB) ausgebügelt. In RechnungDetailsRechnungsID ist natürlich ein Eintrag erforderlich, denn was sollen Rechnungsdetails ohne eine Rechnung. Und wenn eine Rechnung gelöscht wird, dann sollen bitte auch die Details verschwinden.

Um die Parametereingabe in OpenOffice bzw. LibreOffice brauchst Du Dich nicht zu kümmern. Das hat etwas damit zu tun, dass Base es ermöglicht, Abfragen vorher über einen Dialog mit Werten zu füllen. Prinzipiell kann damit auch eine Verbindung von Hauptformular zu Unterformular erzeugt werden - in der Praxis funktioniert das aber auch bei der internen Variante nur beim Öffnen des Formulars und wird nicht aktualisiert, wenn ich den Datensatz wechsele. Das hast Du sicher nicht benutzt.

Ich würde Dir raten, einmal über den Assistenten für Formulare ein Hauptformular mit der Rechnungstabelle und ein Unterformular mit der Rechnugsdetailtabelle zu erstellen und dann nachzuschauen, wie die Verbindung formuliert wurde. Denn wenn die Verbindung dort klappt, dann sollte sie auch in Deinem eigentlichen Formular erstellt werden können.

Gruß

Robert
zachy
**
Beiträge: 37
Registriert: So, 13.05.2012 19:31

Re: Fehlermeldung "Ungültiger Descriptor-Index"

Beitrag von zachy »

Moin Robert,

habe es, wie du mir geraten hast, über den Formularassistenten versucht. Der Assistent hat zwar die Verbindung zwischen den Tabellen "Rechnungen" und "Rechnungsdetails" erkannt. In dem Moment, in dem ich den Entwurfsmodus aber abschalte und das Formular benutzen will, erhalte ich wieder die o.g. Fehlermeldung über den ungültigen Descriptor-Index.

Vielleicht ist diese Meldung ja hilfreich:
Das SQL-Kommando, welches zu diesem Fehler führte, ist:

SELECT * FROM "tblRechnungsdetails" WHERE ( "RechnDetailsRechnungsID" = :link_from_RechnungsID )
Kann es sein, dass das :link_from_ etwas mit dem Fehler zu tun hat? Diese Art der Join-Bildung kenne ich nämlich gar nicht.
RoberG hat geschrieben:
Der Primärschlüssel ist der aus dem Formular, richtig? RechnungDetailsRechnungsID steht in dem Subformular und gehört zu der Tabelle Rechnungsdetails. In Ordnung? Wie hast Du die Felder miteinander verbunden?
Verbunden habe ich die beiden Tabellen über das Datenbankdiagramm des SQL Servers (1:n-Beziehung). Interessanterweise habe ich gerade festgestellt, dass Base abstürzt, sobald ich mir den Beziehungskatalog über Extras >> Beziehungen aufrufe. Das könnte ein Hinweis darauf sein, dass Base mit der Art, wie SQL Server die Verbindung anlegt, nicht zurecht kommt und umgekehrt.
zachy
**
Beiträge: 37
Registriert: So, 13.05.2012 19:31

Re: Fehlermeldung "Ungültiger Descriptor-Index"

Beitrag von zachy »

Weiterer Test:

OOBase
Ich habe zwei andere Tabellen, welche ich vorher noch nicht miteinander verbunden hatte, über den Beziehungsmanager von Base verknüpft (1:n-Beziehung, wieder über 2 int-Felder).

Dann habe ich über den Formularassistenten ein Formular erstellt, dass diese beiden Tabellen als Haupt- und Unterformular verwendet (der Assistent hat die Beziehung wieder korrekt erkannt): Sobald ich aber den Entwurfsmodus verlasse um das Formular zu benutzen, erhalt ich wieder die bekannte Fehlermeldung.

SQL Server
Der SQL Server erkennt die Beziehung. Das kann ich in den Datenbankdiagrammen erkennen, wenn ich die beiden Tabellen hinzufüge.
RobertG
********
Beiträge: 2033
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Fehlermeldung "Ungültiger Descriptor-Index"

Beitrag von RobertG »

Hallo zachy,

die Botschaft zur Fehlermeldung zeigt, was gemeint ist:
Das SQL-Kommando, welches zu diesem Fehler führte, ist:
SELECT * FROM "tblRechnungsdetails" WHERE ( "RechnDetailsRechnungsID" = :link_from_RechnungsID )
:link_from_RechnungsID ist ein Parameter. Und genau darauf trifft ja anscheinend das Problem zu. Damit weiß eine Datenbank so nichts anzufangen. Sie braucht für die Abfrage einen Wert, z.B. '1' für die RechnungsID.

Das Problem ist also tatsächlich das, was Du über den Link mit dem Makro raus bekommen hast. Nur soll dieses Makro eigentlich längst überholt sein (OOo vor 2.0!). Mit welcher Office-Version arbeitest Du und auf welche Art verbindest Du mit dem Server? Gibt es da Alternativen? (ODBC → JDBC).

Gruß

Robert
zachy
**
Beiträge: 37
Registriert: So, 13.05.2012 19:31

Re: Fehlermeldung "Ungültiger Descriptor-Index"

Beitrag von zachy »

Hallo Robert,

ich arbeite mit der aktuellen OOo-Version 3.4.0.

Die Verbindung zum SQL Server habe ich über eine ODBC realisiert. Ob man den SQL Server auch über JDBC ansprechen weiß ich nicht, lässt sich aber sicher herausfinden/testen. ADO sollte noch eine Alternative sein, da es ja von MS entwickelt wurde.

Ich werde es mal probieren und dann Bericht erstatten.
Big Dady
Beiträge: 5
Registriert: Do, 17.10.2013 15:16

Re: Fehlermeldung "Ungültiger Descriptor-Index"

Beitrag von Big Dady »

Moin,

ich weiß, das Thema is "Asbach Uralt" ... aber da ich nun fast nen ganzen Tag mit diesem Problem zu kämpfen hatte und mir dieser Thread ziemlich schnell in die Finger geraten ist, aber keine wirkliche Lösung präsentiert, will ich hier kurz die Lösung sagen :)

Also prinzipell hatte ich genau den selben Wertegang wie der Threadersteller zachy.
Vorher alles lokal gemacht mit einer HSQLDB und dann auf MySQL umgestiegen und beim Unterformular dann diesen bescheuerten Fehler "Ungültiger Descriptor-Index".

Wie es hier schon angedeutet wurde, kann Base hier irgendwie die Parameter nicht auflösen.
Lösung ist hierbei einfach in die "Erweiterten Einstellungen" der Datenbank zu gehen z.B. in der Tabellenübersicht rechts klicken und dann auf "Datenbank -> Erweiterte Eigenschaften...".
Dort müsst ihr einfach den Hacken bei "Benannte Parameter durch "?" ersetzen" rein machen, Datenbank neu starten und schon gehts.

LG BD
pauliv_de
*
Beiträge: 17
Registriert: Fr, 31.08.2007 08:56

Re: Fehlermeldung "Ungültiger Descriptor-Index"

Beitrag von pauliv_de »

Danke an Big Dady, das hat auch bei mir das Problem gelöst. LibreOffice 4.4.5.2
Gesperrt