Announcement

Collapse
No announcement yet.

TQuery Parameterübergabe funktioniert nicht richtig

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

  • TQuery Parameterübergabe funktioniert nicht richtig

    Hallo,

    versuche mit Delphi5 über ODBC auf eine Oracle-Datenbank zuzugreifen, funktioniert auch einwandfrei, wenn diese Abfrage mit den Parametern nicht wäre :-(( !!

    Abfrage:
    // QueryBank im Datenmodul DataModuleListen mit SQL-Statment füllen
    with DataModuleListen do begin
    with QueryBank do begin
    Close;
    UnPrepare;
    with SQL do begin
    Clear;
    Add('Select b.ma_str, ');
    Add(' b.name Name_MA, ');
    Add(' b.strasse, ');
    Add(' b.plz_ort, ');
    Add(' b.bank_code1, ');
    Add(' b.bank_code2, ');
    Add(' c.name Name_Bank, ');
    Add(' b.bank_konto, ');
    Add(' a.betrag ');
    Add('from sas_ma_kto1 A, ');
    Add(' sas_ma B, ');
    Add(' sas_bank C ');
    Add('where a.lkz = :lkz and'); //Parameter lkz funzt nicht
    Add(' a.fa_num = :fa_num and'); //geht
    Add(' a.prd_jjjjmm = rd_jjjjmm and'); //geht
    Add(' a.ma_str = b.ma_str and');
    Add(' a.fa_num = b.fa_num and');
    Add(' b.bank_code1 = c.bank_code1(+) and');
    Add(' a.kto_kz = 1 ');
    Add('order by :sort '); //Parameter sort funzt nicht
    end;
    ParamByName('lkz').AsString := cmbLkz.text;
    ParamByName('fa_num').AsInteger := dbComboFa.KeyValue;
    ParamByName('prd_jjjjmm').AsInteger := StrToInt(txtPrd_jjjjmm.text);
    ParamByName('sort').AsInteger := ComboBoxSort.ItemIndex + 1;
    Prepare;
    Open;
    end;

    Abfrage Ende

    Bin schon ganz verzweifelt, auch wenn ich statt den Parametern feste Werte verwende schluckt die Abfrage das nicht, könnte es vielleicht an meiner Formatierung liegen, (die vielen Leerzeichen)!!!

    Hoffe jemand da draussen kann mir helfen! Wäre dann sehr zu dank verpflichtet!!

    Vielen Dank für Eure Mühen

    Tobias

  • #2
    Ist leider nicht mehr so formatiert wie bei mir!!

    Comment


    • #3
      Hallo Tobias,

      der Parameter :lkz funzt nicht weil es ein gleichnamiges Feld in der Tabelle sas_ma_kto1 gibt -> Namenskonflikt. Gib dem Paramter einfach einen anderen Name (z.B. _lkz)<br>
      Der Parameter in der oder by Klausel funktioniert natürlich auch nicht, hinter oder by sind keine Parameter zulässig. Du willst aber sicherlich den Anwender auswählen lassen, nach welchem Feld er sortieren will. Wenn Du mit einer eingeschränckten Anzahl an Felder leben kannst, dann könnte das ganze in Oracle so aussehen: ...order by decode(_Sort, 'Feld1', Feld1, 'Feld2', Feld2, 'Feld3', Feld3..., Standardfeld)... Die Werte in ' ' sind dabei jeweils die Werte die in _Sort stehen können und die Angaben dahinter die zugehörigen Feldnamen. Standardfeld wäre das Feld nach dem sortiert wird wenn in der Liste vorher keine Übereinstimmung gefunden wird.

      Gruß Fal
      Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

      Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

      Comment


      • #4
        Wow, vielen Dank Falk,
        irgendwie ist es jetzt logisch nachdem du es sagtest, wäre aber einfach nicht drauf gekommen, bin noch nicht so erfahren!!
        Also vielen vielen Dank für die prompte Antwort!
        Auch für den Lösungsvorschlag zur Sortierung danke, habe eine feste Anzahl von Spalten, also kann ich Deine Lösung verwenden!
        Also wünsche Euch und Dir Falk noch einen schönen Tag
        Bis zum nächsten mal!!

        CU Tobia

        Comment


        • #5
          Hallo Falk und alle anderen,

          habe mich zu früh gefreut, habe ersten Parameter umbenannt _lkz, restliche Parameter statische Werte, und funktioniert immer noch nicht, leider!! :-((

          Tobia

          Comment


          • #6
            Was funktioniert denn nicht? - gib mal eine etwas genauere Fehlerbeschreibung
            Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

            Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

            Comment


            • #7
              Hallo Falk,<br>
              <p>erst mal danke das Du Dich nochmal rührst!!</p>
              <p>Also habe, wie Du es mir vorschlugst, den Parameter umbenannt,<br>
              <font color#FF0000><b><i>_lkz</i></b></font> siehe oben, die anderen Parameter habe ich zum <br>
              testen weggelassen, also momentan ist nur diese eine Parameter de-<br>
              finiert!! Das mit dem Namenskonflikt kann es übrigens nicht sein,<br>
              Grund:<br><br>
              <font color#FF0000><b><i>...<br>Add('a.fa_num = :fa_num and'); //funktioniert<br>...</b></i></font><br><br>
              Ich verstehe nicht, warum im Prinzip gleiche Parameter, einmal<br>
              funktionieren und einmal nicht!
              <br>Brauchst Du noch weitere Angaben um mir zu helfen!!<br>
              Ich habe schon sämtliche Lektüre zu diesem Thema durchforstet, habe<br>
              aber nichts brauchbares gefunden, kannst Du mir Lektüre in diesem zu-<br>
              sammenhang empfehlen, meine Lektüre (verschiedene Bücher) beschrei-<br>
              ben zwar wie ich Parameter bei Abfragen verwende, jedoch nocht was zu<br>
              beachten ist...<br><br>
              z.B: Anzahl, Art, etc.<br><br>
              Bin wirklich verzweifelt, kann es mir einfach nicht erklären, er-<br>
              halte auch keine Fehlermeldung, funktioniert einfach nicht!!<br></p>

              Danke für Deine Hilfe Falk, du scheinst wirklich ein erfahrener<br>
              Datenbankprogrammiere zu sein -> decode... ist nicht jedermanns erster<br>
              Lösungsansatz ;-)!!<br><br>
              CU Tobia

              Comment


              • #8
                Hallo Falk,<br><br>
                ich habe des Rätsel kuriose Lösung gefunden, ist kein direktes Delphi<br>
                und auch kein direktes SQL Problem, i don't know???<br>
                das Problem ist folgendes, hier handelt es sich um einen String-<br>
                Parameter der in der Datenbank als 3 Zeichen großes Char-Array de-<br>
                finiert wurde, bei der Parameterübergabe reicht es nicht aus ein<br>
                Zeichen 'D' -> lkz -> Länderkennzeichen zu übergeben, sondern es muß<br>
                'D ' übergeben werden, kurios ist, das direkt im SQL, ohne Para-<br>
                metrisierung ein einzelnes schödes Zeichen ausreichend, also 'D',<br>
                ist, deshalb fiel mir die Fehlerlokalisirung so schwer!!!:-)<br><br>
                Dieses Problem kann ich mit dem like-Operator umgehen, nur drauf-<br>
                kommen mußte ich erst einmal... Mannomann :-)))<br><br>
                Also Falk ich danke Dir noch einmal für Deine Bemühungen, dieses<br>
                Problem hat mich 2,5 Tage gekostet, hätte beinahe die Programmierung<br>
                hingeschmissen ;-), hoffe ich kann auch mal jemanden helfen, im <br>
                übrigens <b><i>das beste deutsche Forum das ich zum Thema Programmierung<br>
                neben dem Self-Html Forum je gesehen habe, macht weiter so!!!!<br><br>
                Ganz, Ganz dickes Lob!!!!!!</i></b>

                CU @all Tobia

                Comment

                Working...
                X