Announcement

Collapse
No announcement yet.

Numerische Werte in der DB, angezeigt werden Strings

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

  • Numerische Werte in der DB, angezeigt werden Strings

    Hallo,

    Man hat eine Tabelle mit einem Feld vom Datentyp SMALLINT oder INTEGER.
    Jeder dieser Werte hat in seiner Bedeutung ein String-Äquivalent,<br>
    z.B.<br>
    0 (in der DB) steht für "Hund"<br>
    1 (in der DB) steht für "Katze"<br>
    2 (in der DB) steht für "Maus"<br>
    usw.

    Wie kann ich es einrichten, dass in einer Delphi-Anwendung der String-Wert angezeigt wird, ausgewählt werden kann, aber der entsprechende numerische Wert in der DB gespeichert wird?

    Interessant ist genaugenommen die Möglichkeit, in einem DBGrid ein Spalte mit einer entsprechenden PickList zu versehen, um dieses Verhalten zu implementieren.

    Erlaubt DBComboBox standardgemäß ein solches "Mapping" a la DBRadioGroup?

    Ich könnte auch eine einfache ComboBox verwenden und durch entsprechende Umwandlungen die Werte aus der DB lesen bzw. in die DB schreiben. Diese Möglichkeit interessiert mich (noch) nicht, mich interessiert vielmehr die von Delphi's DB-Komponenten standardgemäß zur Verfügung gestellte Funktionalität (bezogen auf diese oben beschriebene Problematik).

    Gruß<br>
    Stephan

  • #2
    Hi Stephan !

    Eine gute Funktionalität bietet die Delphi-Komponente 'DBLookupComboBox'. Zu ihrer Verwendung müßtest du allerdings eine Naschschlage-Tabelle erstellen, die in zwei Spalten den numerischen Wert und den dazugehörigen String-Wert speichert. In den Eigenschaften der Komponente gibst du dann die Orginal-Tabelle (bzw. DataSource), Original-Spalte usw. an. Die Nachschlage-Tabelle braucht eventuell noch einen Primär-Index auf der numerischen Spalte.

    Ich verwende diese Komponente sehr häufig und habe noch nie Probleme damit gehabt.

    Um diese Funktionalität in einem DBGrid zu implementieren, mußt du allerdings noch etwas weiter gehen.

    Du erstellst eine Datenmodul das sowohl die Orginal-Tabelle wie auch die Nachschlage-Tabelle enthält, wie auch zwei Datasources für die Tabellen. Weiter übernimmst du die Felder der Tabellen. Dann erstellst du für die Orginal-Tabelle ein neues Nachschlage-Feld. Wie die Eigenschaften des Nachschlagefeldes dann noch zu setzen sind erklärt sich von alleine.

    Im DBGrid kannst du durch ein Doppelklick die Felder auswählen, die du angezeigt haben möchstest, u.a. auch das Naschlagefeld

    Comment


    • #3
      Hallo,

      ein berechnetes Feld hilft hier weiter:

      Neues Feld erstellen, als String deklarieren und "Berechnetes Feld" auswählen. Dann braucht man nur noch in OnCalcFields der Tabelle zu schreiben (AnimalString ist das neue Feld):
      <pre>
      case tblMyTableAnimal.value of
      1 : tblMyTableAnimalString.value := 'Hund';
      2 : tblMyTableAnimalString.value := 'Katze';
      3 : tblMyTableAnimalString.value := 'Maus';
      end;
      </pre>

      Oder eleganter: du legst ein Array an: Tiere[1..3] und schreibst dann nur noch:
      <pre>
      tblMyTableAnimalString.value := Tiere[tblMyTableAnimal.value];
      </pre>
      Gruß Ul

      Comment

      Working...
      X