Announcement

Collapse
No announcement yet.

XSQLDA-Index-Fehler ! Was mache ich falsch ?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • XSQLDA-Index-Fehler ! Was mache ich falsch ?

    Hallo<br>
    Mein Problem tritt innerhalb einer Schleife nach einer festen Anzahl von Durchläufen auf, in welcher ich immer wieder eine INSERT-SQL Anweisung ausführen lasse. Die SQL-Anweisung besteht eigentlich aus nur 4 Werten. Die Fehlermeldung lautet genau:<br>
    XSQLDA-Index ausserhalb des gültigen Bereichs<br>
    Ich arbeite mit der Interbaseversion 5.6.<br>
    Im voraus für jede Hilfe schon mal danke !<br>
    MfG Frank

  • #2
    Hallo,

    wie sieht die Schleife aus? Wird dort eine <b>Stored Procedure</b> aufgerufen oder ist mit "INSERT SQL" eine TQuery gemeint, die nur über ExecSQL ausgeführt wird? Und zu prüfen, ob es sich um einen bekannten Bug handelt, sollte zum Test in (!) der Schleife vor jedem Ausführen der Stored Procedure/TQuery <b>Prepare</b> und unmittelbar nach dem Ausführen <b>UnPrepare</b> aufgerufen werden. Verschwindet dann der Fehler? Wenn nicht, wurden alle Parameter (Typen) korrekt im Objektinspektor definiert

    Comment


    • #3
      Hallo Herr Kosch,<br>
      danke erst mal für die Antwort. Mittlerweile habe ich den Fehler genauer identifizieren können, jedoch bin ich noch ratloser als vorher.<br>
      Das Problem tritt auf, wenn ich im Code einer Stringvariablen die SQL-Anweisung zuweise. Wird dieser String dann durch ADD der TQuery-Komponente angehängt, so wird der String verändert und die Abfrage falsch interpretiert. Zum besseren Verständnis habe ich mal den entsprechenden Codeabschnitt kopiert:<br>
      <br>
      SQLAnweisung:='test "bla bla<b>:</b> bla bla"' //hier ist der String noch korrekt<br>
      IBQuery.SQL.Add(SQLAnweisung); //hier nicht mehr - 'test "bla bla<b>?</b> bla bla"'<br>
      Das wichtige ist hierbei, daß der Fehler nur auftritt, wenn im String innerhalb von Anführungszeichen ein Doppelpunkt steht (siehe obiges Beispiel). Statt des Doppelpunktes erscheint ein Fragezeichen, was folgerichtig zu einem EIBClientError führt.<br>
      Warum allerdings der String vor dem ADD normal und danach im String ein Doppelpunkt zu einem Fragezeichen umgewandelt wird, ist mir nicht klar. Es wäre schön, wenn Sie eine Lösung des Problems hätten. Ich bin schon froh, überhaupt den Fehler soweit eingegrenzt zu haben.<br>
      <br>
      MfG<br>
      Frank Ul

      Comment


      • #4
        Hallo,

        ein <b>Doppelpunkt</b> im SQL-Text wird in den BDE-Komponenenten verwendet, um einen Parameter zu kennzeichen. Im SQL-Standard ist jedoch ein <b>Fragezeichen</b> der Platzhalter für Parameter, alle VCL-Komponenten (BDE und IBX) tauschen alle Parameter durch ein Fragezeichen aus (das kann im SQL-Monitor jederzeit nachgeprüft werden). Das Problem besteht jetzt darin, das der Doppelpunkt in der SQL-Anweisung als Parameterdeklaration interpretiert wird. Damit wird auch die Fehlermeldung <i>XSQLDA-Index ausserhalb des gültigen Bereichs</i> plausibel.

        Wie sieht denn eine SQL-Anweisung aus, in der ein Doppelpunkt vorkommt? Anstelle den SQL-Text über ADD zuzuweisen, würde ich eine parametisierte SQL-Anweisung fest zuweisen, im Objektinspektor die Parametertypen exakt konfigurieren und dann den einzufügenden Text als Parameter übergeben. In diesem Fall sollten die Probleme nicht mehr auftreten, da ein Prepare <b>vor</b> dem Einsetzen der übergebenen Parameterinhalte durchgeführt wird.

        Alternativ kann man auch versuchen, ob die Zuweisung <b>ParamCheck</b> = FALSE das Problem beseitigt

        Comment


        • #5
          Hallo Andreas,<br>
          das Problem hat sich inzwischen durch die Verwendung von Parametern gelöst. Allerdings ist mir etwaa anderes aufgefallen. Die Komponente TQuery aus der Interbase -Palette ist beim Einfügen deutlich langsamer als die TSQL-Komponente. Woran liegt das ?<br>
          Mfg<br>
          Fran

          Comment


          • #6
            Hallo,

            die Frage ist "wie" der Datensatz eingefügt wird. Wenn immer nur eine INSERT-Anweisung ausgeführt wird (die TQuery also keine lebende Datenmenge enthält), sollte TQuery nur um den Faktor 5..10 Mal langsamer sein als TSQL (irgendwie muss sich der direkte Zugriff auf das InterBase-API ja bemerkbar machen). Die Gründe für diese Unterschiede werden sichtbar, wenn man sich die abgeschickten Anweisungen einmal im SQL-Monitor anschaut

            Comment

            Working...
            X