Announcement

Collapse
No announcement yet.

Kombination von Tabellenfeldern in DBLookupComboBox

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

  • Kombination von Tabellenfeldern in DBLookupComboBox

    Hallo,
    wie kann ich in einer DBLookupComboBox eine Kombination mehrerer Felder einer Tabelle anzeigen und ein anderes Feld dieser Tabelle in einer anderen Tabelle speichern ?
    Ich hoffe die Frage ist einigermaßen verständlich und Ihr könnt mir da schnell helfen

    Gruß Elke

  • #2
    ok, das Tabellenfeld habe ich jetzt mit einem Kombinierten Feld aus einem View gefüllt. Gibt es da vielleicht noch einen besseren Weg ?

    Nun habe ich ein weiteres Problem: Ich will in einer DBComboBox einen Wert anzeigen lassen, zu dem der Anwender in einer anderen DBComboBox einen Wert in einer anderen Spalte ausgewählt hat. Mit DBLookupComboBox kann ich nicht arbeiten, weil das gabze wechselweise geschen soll. Der Anwender soll z.B. die Kundennummer auswählen und in der anderen DBComboBox den Namen angezeigt bekommen oder umgekehrt. Ich hab versucht das ganze über eine select funktion in einer ADODataSet komponente zu lösen. Aber wie bekomme ich die Variable in die Select Anweisung. Ist das überhaupt möglich ?

    Gruß Elk

    Comment


    • #3
      Hallo Elke,

      wie bereits gesagt habe ich keine Erfahrungen mit ADO. Folgendes sollte aber funktionieren:

      SQL-Statement: "select * from table1 where (kundenname = :Name)"
      Query1.ParamByName('Name').asstring := 'Sausy';
      Query1.open;

      Tschüß

      Torste

      Comment


      • #4
        Hallo Torsten,
        Das Problem ist, dass ich den String 'Sausy' ja noch gar nicht kenne. Ich weiß ja nicht was der Anwender auswählt. Deshalb muss ich in dem Query bzw. bei mir ADODataSet eine Variable einbauen und die wird wiederum von SQL nicht erkannt. Ich habs schon so versucht, dass ich in der Tabelle den Filter auf diesen Wert setze und mit einem on Change Ereignis in der DBComboBox alle Items lösche und nur den entsprechend herausgefilterten Datensatz einfüge. Aber egal was ich in der DBComboBox1 auswähle, ich bekomme in DBComboBox immer den gleiche Datensatz angezeigt.

        Vielleicht könntest Du mir sagen, wie ich herausfinde, was gerade in der einen DBComboBox angezeigt wird, etwa so wie die Text Eigenschaft bei normalen edit Komponenten. Diese Funktion brauche ich nämlich auch für andere Anwendungen.

        schon mal Danke Gruß Elk

        Comment


        • #5
          Hallo Elke,

          <b><pre>
          procedure TForm1.DBComboBox1Change(Sender: TObject);
          begin
          Query1.ParamByName('Name').asstring := DBComboBox1.Field.AsString;
          Query1.execsql;
          end;
          </pre></b>

          Tschüß

          Torste

          Comment


          • #6
            Hallo Torsten,

            Die Auswahl in der DBComboBox funktioniert immer noch nicht. Ich bekomme immer die Fehlermeldung: Parameter name expected.

            Was kann das sein ?

            Gruß Elk

            Comment


            • #7
              Hallo Elke,

              wenn ich Dich richtig verstehe, möchtest Du 2 Comboboxen. Davon enthält eine alle Kundenummern und die andere z.B. alle Familiennamen?

              Wenn jetzt eine Kundennummer ausgewählt wird soll in der anderen ComboBox der dazugehörige Name angezeigt werden. Soll jetzt noch eine Datenbeziehung zu einem Grid bestehen?

              Wenn das geklärt ist bastele ich Dir ein komplettes Beispiel zusammen.

              Tschüß

              Torste

              Comment


              • #8
                Hallo Torsten,

                das mit den 2 ComboBoxen ist richtig. Es soll aber keine Verknüpfung zu einer DBGrid hergestellt werden. Das Feld ID wird in einer SQL-Abfrage zur Auswertung von Daten verwendet

                z.B select * from Kundenstamm where id = {gehwählte id}.

                Ich hab gerade übrigens eine neue Diskussion unter "Variable in SQL Abfrage einsetzen" eröffnet, vielleicht segen die Angabe dort Dir mehr.

                Vielen Dank schon mal für Deine Mühe Gruß Elk

                Comment


                • #9
                  Hallo Elke,

                  Du nimmst Dir 2 DBLookupComboboxen und konfigurierst sie nach Deinen Wünschen. Die Syncronisation zwischen beiden DBLookupComboboxen erfolgt über das Ereignis DataChange der DataSourceKomponente.

                  z.B.
                  <pre><b>
                  procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField);
                  begin
                  dblookupcombobox1.KeyValue := datasource1.DataSet.fieldbyname('KundenID').asinte ger;
                  dblookupcombobox2.KeyValue := datasource1.DataSet.fieldbyname('KundenID').asinte ger;
                  end;
                  </pre></b>

                  Die Daten der Spalte KundenID muß eindeutig sein (jeder Wert darf nur einmal in der Tabelle vorkommen).

                  Tschüß

                  Torste

                  Comment


                  • #10
                    Hallo Torsten,

                    das hab ich schon versucht, funktioniert aber nicht, weil ich dann einen zirkularen Datenbezug herstelle, da ListSource und DataSource die gleiche sind. Oder mache ich da was falsch ?

                    Gruß Elk

                    Comment


                    • #11
                      Hallo Elke,

                      wenn in DBLookUpComboBox z.B. alle Kundennummern angezeigt werden sollen, dann benötigst Du den Eintrag DataSource nicht.

                      Tschüß

                      Torste

                      Comment


                      • #12
                        Hallo Torsten,

                        Dein Vorschlag führt bei mir zu einem kompletten Systemabsturz, was aber bistimmt auch an meinem Urzeitlichen Rechner liegt. Ich bekomme immer eine Melding Fehler 'xy' beim Zugriff auf Adresse 'xy'.

                        Trotzdem Danke für den Versuch

                        Gruß Elk

                        Comment

                        Working...
                        X