Datenbankproblem mit TQuery!



  • Es handelt sich um zwei, oder mehr TQueries?
    Dann Du mußt eine Master-Detail Beziehung einrichten. Unter DataSource des abhängigen Queries trägst Du die DataSource der führenden Query eintragen (die auf die Tabelle Person) und den SQL-Code entsprechend anpassen:

    SELECT Ort
    FROM Plz
    WHERE (Plz = :Plz)
    

    Oder eben, wie Linnea schon gesagt hat, die zweite Query manuell aktualisieren.

    Die von Dir gezeigte SQL-Anweisung ist dazu allerdings ungeeignet, da Du keinen Parameter verwendest, um vorzugeben, welche Postleitzahl ausgewählt ist. Das kann so nicht funktionieren.

    Grüße Joe_M.



  • Also erstmal Danke für die schnellen Antworten!

    Zu Linnea:
    Nein, der Navigator ist nicht über ein DataSource mit dem Query verbunden. Wenn dies so wäre, dann könnte ich ja nur die Einträge der Plz-Tabelle durchblättern.
    Mit dem OnClick-Ereignis des Navigators habe ich es auch nicht hinbekommen das Query nochmals auszuführen.

    Zu zulaufzumeinloggen:
    Vielen Dank, mit dem von dir gezeigten SQL-Code hat es geklappt!! 🙂 👍

    Aber was genau bedeutet dieser Doppelpunkt vor Plz bei

    WHERE (Plz = :Plz);
    

    ????

    Achja, ich habe nur ein Query, bei dem die DataSource der PersonenTabelle eingetragen ist. Aber funktioniert ja jetzt!



  • Hallo

    Der Doppelpunkt bedeutet das das dahinterstehende Plz ein Parameter ist, an den bei der Ausführung noch ein konkreter Wert übergeben wird. Siehe TQuery::Params.

    bis bald
    akari



  • Ja, das das Plz hinter dem : ein Parameter ist, dachte ich mir schon fast.
    Aber wie kommt es jetzt dazu, dass als Wert die Plz des aktuellen Eintrags der Personen-Tabelle übertragen wird??



  • Hallo

    akari schrieb:

    Siehe TQuery::Params

    bis bald
    akari



  • Wenn ich in der BCB-Hilfe nach TQuery::Params nachschaue hilft mir das allerdings aber auch nicht weiter (hab die Hilfe auch nur auf Englisch 😉 )



  • Hallo

    schau dir einfach das Beispiel zu TQuery::Params in der Builder-Hilfe an, das ist doch aussagekräftig genug.
    Und Englisch solltest du beim Programmieren halbwegs beherschen.

    bis bald
    akari



  • Natürlich beherrsche ich Englisch.

    In der Hilfe steht als Beispiel:

    Query2->SQL->Clear();
    
    Query2->SQL->Add("INSERT INTO COUNTRY (NAME, CAPITAL, POPULATION) ");
    Query2->SQL->Add("VALUES (:Name, :Capital, :Population) ");
    
    Query2->Params->Items[0]->AsString = "Liechtenstein";
    Query2->Params->Items[1]->AsString = "Vaduz";
    Query2->Params->Items[2]->AsInteger = 420000;
    Query2->ExecSQL();
    

    Aber das erklärt mir jetzt immer noch nicht woher mein Programm nun durch die SQL-Anweisung

    WHERE (Plz = :Plz);
    

    die Plz des aktuellen Eintrags der Personen-Tabelle bekommt!?!? Ich sag dem Programm ja nirgends das der Wert für :Plz z.B. aus dem DBEdit-Feld, dass die aktuelle Plz anzeigt, genommen werden soll!?



  • zufaulzumeinloggen schrieb:

    Unter DataSource des abhängigen Queries trägst Du die DataSource der führenden Query eintragen.

    Wenn Du die obige Zuseisung durchgeführt hast, wird der Wert für den Parameter dorther genommen. Wenn nicht, hast Du irgendwo einen Fehler und es funktioniert bestimmt nicht wie gewünscht.



  • Hallo

    Ich sag dem Programm ja nirgends das der Wert für :Plz z.B. aus dem DBEdit-Feld, dass die aktuelle Plz anzeigt, genommen werden soll!?

    Query2->Params->Items[0]->AsString = "Liechtenstein";
    

    Was glaubst du passiert hier?

    Du könntest also auch das so schreiben

    Query2->Params->Items[0]->AsString = DBEdit->Text;
    

    bis bald
    akari



  • zu akari:
    Das ist mir schon klar, aber genau das habe ich ja NICHT(!!!) gemacht und es funktioniert!!!!

    zu Joe_M.:
    Ja, die Zuweisung habe ich durchgeführt. Ich weiß jetzt auch das der Parameterwert über die DataSource, die über ein Table mit der Personen-Tabelle verbunden ist, herkommt. 😉

    Alles klar 🙂

    Danke nochmal an alle!! 👍


Anmelden zum Antworten