Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Smallint (https://www.delphipraxis.net/35650-smallint.html)

LOMBI 10. Dez 2004 09:52


Smallint
 
Delphi3-Prof.+Paradox7-Tabellen
Anfänger



Hallo,

wer kann mir bitte helfen, für eine Adressen.db ein SmallInt herzustellen?

I= Interessent
IA=Interessent m. Angebot
NK=Neukunde (1xgekauft)
SK=Stammkunde
AK=Altkunde (über ein Jahr nichts mehr gekauft)

Gruß
Lombi

jim_raynor 10. Dez 2004 09:56

Re: Smallint
 
:wiejetzt:
Sollen wir dir jetzt sagen, dass du I mit 0, IA mit 1, NK mit 2, SK mit 3 und AK mit definieren sollst.

MrSpock 10. Dez 2004 12:20

Re: Smallint
 
Hallo LOMBI,

wenn du die Tabelle mit der Datenbankoberfläche erstellst, wählst du als Feldtyp S (=kleiner Integer).

Die Interprätation der Werte ist Aufgabe deines Programmes. Du kannst dir zur Übersichtlichkeit entsprechende Konstanten definieren:

Delphi-Quellcode:
Const
   knd_I = 0; // Interessent
   knd_IA = 1; // Interessent m. Angebot
   knd_NK = 2; // Neukunde (1xgekauft)
   knd_SK = 3; // Stammkunde
   knd_AK = 4; // Altkunde (über ein Jahr nichts mehr gekauft)

   // oder sogar
   knd_Interessent = 0;
   knd_Interessent_m_Angebot = 1;
   knd_Neukunde = 2;
   knd_Stammkunde = 3;
   knd_Altkunde = 4;

Oxmyx 10. Dez 2004 12:35

Re: Smallint
 
Oder eine Aufzählung:

Delphi-Quellcode:
type
  EKundentyp = (
    INTERESSENT,
    INTERESSENTANGEBOT,
    NEUKUNDE,
    STAMMKUNDE,
    ALTKUNDE
  );

LOMBI 13. Dez 2004 17:50

Re: Smallint
 
Besten Dank für die Antworten.

ich möchte mit diesen Smallints ein automatisches Status-System in die Adressen.db integrieren. Der Nutzer gibt eine neue Adresse ein und das
erste Kürzel "I" erscheint automatisch im DBEdit-Feld für Status. Sobald
für diese Adresse ein Angebot geschrieben wurde, "IA" usw.

Wie wird bitte diese Automatik erzeugt?

Gruß
Lombi

MrSpock 14. Dez 2004 12:16

Re: Smallint
 
Hallo Lombi,

mit Automatik ist da nix :mrgreen: . Du solltest das AfterPost Event der Auftragstabelle benutzen, um den Status des Kunden zu prüfen und ggf. neu zu setzen.

Oxmyx 14. Dez 2004 12:38

Re: Smallint
 
Was hat das ganze eigentlich mit Smallints zu tun?

MrSpock 14. Dez 2004 13:52

Re: Smallint
 
Hallo LOMBI,

zur Frage nach einem guten Buch zur Datenbankprogrammierung, könnte ich folgendes Buch vom ADDISON-WESLEY Verlag empfehlen. Es gibt sogar eine Leseprobe, so dass du prüfen kannst, was du davon hälst.

MaBuSE 14. Dez 2004 13:59

Re: Smallint
 
Zitat:

Zitat von LOMBI
wer kann mir bitte helfen, für eine Adressen.db ein SmallInt herzustellen?

Ich glaube Du hast das was verwechselt:

Ein SmalInt ist ein "kleiner" Integer. Also eine Ganzezahl ohne Kommastellen.

http://de.wikipedia.org/wiki/Integer

In der Delphi 7 Onlinehilfe steht
Ein Integer-Typ repräsentiert eine Untermenge der ganzen Zahlen. Es gibt zwei generische Integer-Typen: Integer und Cardinal. Diese Typen sollten, wenn möglich, immer verwendet werden, da sie die optimale Ausführungsgeschwindigkeit für die zugrundeliegende CPU und das Betriebssystem gewährleisten. Die nachfolgende Tabelle enthält die Bereiche und Speicherformate der generischen Integer-Typen für den aktuellen 32-Bit-Compiler von Delphi.

Generische Integer-Typen für 32-Bit-Implementationen von Delphi
Code:
Typ               Bereich          Format
Integer  -2147483648..2147483647    32 Bit, mit Vorzeichen
Cardinal           0..4294967295    32 Bit, ohne Vorzeichen
Zu den fundamentalen Integer-Typen gehören Shortint, Smallint, Longint, Int64, Byte, Word und Longword.

Fundamentale Integer-Typen
Code:
Typ               Bereich          Format
Shortint         -128..127          8 Bit, mit Vorzeichen
Smallint       -32768..32767        16 Bit, mit Vorzeichen
Longint   -2147483648..2147483647   32 Bit, mit Vorzeichen
Int64            -2^63..2^63-1       64 Bit, mit Vorzeichen
Byte                0..255          8 Bit, ohne Vorzeichen
Word                0..65535        16 Bit, ohne Vorzeichen
Longword            0..4294967295   32 Bit, ohne Vorzeichen

MaBuSE 14. Dez 2004 14:41

Re: Smallint
 
Zitat:

Zitat von LOMBI
wer kann mir bitte helfen, für eine Adressen.db ein SmallInt herzustellen?
I= Interessent
IA=Interessent m. Angebot
NK=Neukunde (1xgekauft)
SK=Stammkunde
AK=Altkunde (über ein Jahr nichts mehr gekauft)

Nach langem Nachdenken, glaube ich zu wissen was Du haben willst.

Kann es sein, dass Du eine Nachschlage Tabelle (Lookup Table) möchtest.

Du hast eine Haupttabelle (Master) mit z.B. folgenden Feldern:

Adressen.db

Adr_ID: Integer
Name: string(40)
Vorname: string(40)
Status_ID: Integer
Adresse: string(200)
...


Nun gibt es eine Nachschlagetabelle (Slave) mit folgenden Feldern:

Status.db

Status_ID: Integer
Status: string(2)
Status_Text: string(20)


In der Status Tabelle steht folgendes drin:
Code:
Status_ID Status  Status_Text
1          I       Interessent
2          IA      Interessent m. Angebot
3          NK      Neukunde (1xgekauft)
4          SK      Stammkunde
5          AK      Altkunde (über ein Jahr nichts mehr gekauft)
Es gibt nun die Möglichkeit in Delphi 2 Tabellen (TTable) so miteinander zu verknüpfen, dass automatisch der Status und der Status_Text statt der Status_ID (also des Integers) angezeigt wird.

Es gibt unzählige Möglichkeiten solch eine Verknüpfung herzustellen.

Eine Möglichkeit zur Anzeige in Grids (z.B. TDBGrid) ist:
  • 2 TTable auf das Formular
  • ein TDataSource auf das Formular
  • ein TDBGrid auf das Formular
  • die 2 Tables mit den Tabellen verbinden z.B.:
    Table1.Database := 'DBDEMOS'; Table1.TableName := 'Orders.db'; Table1.Active := True;
    Table2.Database := 'DBDEMOS'; Table1.TableName := 'Customers.db'; Table2.Active := True;
  • TDataSource mit Table1 verbinden z.B.:
    DataSource1.DataSet := Table1;
  • TDBGrid mit TDataSource verbinden z.B.:
    DBGrid1.DataSource := DataSource1;
  • Table1 (TTable) doppelklicken -> FeldEditor geht auf
  • Rechtsklick in Feldeditor und "Felder hinzufügen" auswählen
  • Anzuzeigende Felder auswählen z.B.:
    OrderNo, CustNo und SaleDate
  • nun wieder Rechtsklick in den FeldEditor und "Neues Feld" auswählen
  • Im "Neues Feld" Dialog das anzuzeigende Feld definieren z.B.:
    Feldeigenschaften.Name := Kunde; // Komponente wird automatisch zu Table1Kunde
    Feldeigenschaften.Typ := string;
    Feldeigenschaften.Größe := 20;
    Feldtyp := Nachschlagen;
    Nachschlage Definition.Schlüsselfelder := CustNo; // Index der Mastertabelle auf nachzuschlagendes Feld
    Nachschlage Definition.Datenmenge := Table2; // die Nachschlagetabelle
    Nachschlage Definition.Schlüssel := CustNo; // das Feld der Nachschlagetabelle was dem Schlüsselfeld in Table1 entspricht
    Nachschlage Definition.Ergebnis := Company; // Das Feld was Angezeigt werden soll
  • Fertig -> Im Grid werden nun die Felder OrderNo, CustNo, SaleDate und Kunde angezeigt.
    Das Feld Kunde entspricht dem Kunden der unter CustNo in Tabelle Customers.db abgelegt ist.

Das bringt aber nur etwas bei der Anzeige.

Zum Eingeben verwenden Sie am besten die TDBLookupComboBox.
Das ist eine ComboBox, die in die mit DataSource verbundene Tabelle einen Integer abspeichert.
Aber aus der mit ListSource verbundenen Tabelle das unter ListField anzeigt.
Einfach mal F1 drücken und die Hilfe zu der Komponente lesen ;-)

Ich hoffe dieser Artikel hilft weiter
Viel Spaß
Dr. MaBuSE


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:53 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz