Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Master-Detail-Verknüpfung (https://www.delphipraxis.net/8382-master-detail-verknuepfung.html)

barnti 3. Sep 2003 16:20

Re: Master-Detail-Verknüpfung
 
Hallo,

Generalissimo: da haben wir uns falsch verstanden. Sorry. Das klappt natürlich mit einer DBCombo. Ich hatte anfangs eine DBLookupC. benutzt.

Der Doppelpunkt ist in dem Statement vorhanden...

Ich muss erst mal eine Pause einlegen. Ich melde mich spätestens morgen noch einmal.

Danke für eure Anteilnahme bis hier,

Gruß,

Barnti

Leuselator 3. Sep 2003 17:38

Re: Master-Detail-Verknüpfung
 
Also für Zukunft:
Mach Dir das Leben nicht unnötig schwer! Programmierer (meint man) sind faul und gehen immer den Weg des geringsten Widerstandes (bzw. der geringstnötigen Gedächtnisleistung:))

Daher hier meine 10 Gebote für den faulen Datenbankmenschen:

1. Benenne Deine Tabellen nach ihrem Hauptinhalt
2. verwende den Plural (Kunden nicht: Kunde) - macht später die Querys leichter lesbar
3. Benenne Zwischentabellen (auch Verknüpfungstabellen genannt) nach den Tabellen, auf die sie verweisen und verwende einen Unterstrich zur Trennung z.B. Tabellen: Kunden,Standorte Zwischentabelle: Kunden_Standorte
4. Benenne das Schlüsselfeld des Primärschlüssels genauso wie die Tabelle, nur setze ein 'Id' davor also: 'IdKunden'
5. denke Dir einen 1-Stelligen Code für den DatenTyp aus und stelle diesen jedem Feldnamen voran, es sei denn es ist ein Id-Feld z.B.
iFarbe (Integer),
cNummer (char oder Varchar)
lAktiv (Logisch/Boolean/Bit)
tBeschreibung (Text) - das erleichtert Dir in Delphi die korrekte Ansprache der Felder (AsInteger,AsString etc)
6. verwende immer wieder die gleichen FeldNamen für die gleichartige Dinge (zb. Tabelle: Funktionen / Felder: IdFunktionen,cBezeichnung | Tabelle: Taetigkeiten / Felder: IdTaetigkeiten,cBezeichnung)
7. Wenn eine Eigenschaft eines Dinges, das Du in eine Tabelle stopfen möchtest mehr Werte annehmen kann, als Deine MausHand an freien Fingern hat, wenn alle Tasten gedrückt sind, dann pack es in eine Detailtabelle (Z.B. Tabelle: Rufnummern Feld: idRufnummernTyp / Tabelle: RufnummernTyp Felder: idRufnummernTyp,cBezeichnung Werte: 'Festnetz privat','Festnetz Büro','Funk privat','Funk dienstlich','Fax privat','Fax Büro','Pager privat','Pager dienstlich')
8. verwende Aliasse in Selects, die sich auf mehr als eine Tabelle beziehen, nutze für Haupttabellen wenn's geht 1 Buchstaben, für ZwischenTabellen 2 z.B. Tabellen: Kunden, Adressen,Kunden_Adressen dann :
SQL-Code:
         select K.cVorname,
                K.cName,
                A.cStrasse,
                A.cNummer,
                A.cPlz,
                A.cOrt
           from Kunden K
left outer join Kunden_Adressen KA
             on KA.idKunden = K.idKunden
left outer join Adressen A
             on A.idAdressen = KA.idAdressen
          where K.iGenus = 0
mit Aliassen sind 'K', 'A' und 'KA' gemeint
9. Nutze wenn immer möglich joins statt Unterabfragen. Unterabfragen (Subselects) sind zwar oft schneller vom Programmierer zu formulieren, meist jedoch deutlich weniger performant und nicht in allen db-Systemen verfügbar (MySQL bis dato soviel ich weis z.B. unterstützt keine Subselects).
10. Wenn Du kannst bleibe so ANS-SQL-konform wie möglich - erleichtert ungemein den Wechsel des Datenbanksystems. (Die einzige Versuchung der ich beim MS-SQL-Server meist nicht widerstehen kann sind die dort möglichen case-STatements in Selectanweisungen - sau-bequem :oops:)

Ende der Gebote:)

Also, Dein select von 16:26 Uhr "verstößt" gegen Faulheitsregel Nummer 8
ausserdem machst Du einen Cross-join (verknüpfe alle Datensätze aus Tabelle Kunde mit allen aus Tabelle Standorte) um ihn anschließend mit Distinct wieder einzugrenzen = ZuHause>Sydney>Tokio>NewYork>Tokio>Sydney>KneipeAn DerEcke
Wenn Delphi (nicht BDE oder DatenbankSystem) diese Meldung bringt, dann hast Du wahrscheinlich doppelt auf Deine TQuery-Komponente geklickt, im daraufhin erscheinenden Dialog Felder hinzugefügt (möglicherweise auch alle), anschließend die Tabellenstruktur in Datenbank geändert (Feld hinzugefügt) und vergessen in Feldliste der TQuery dieses Feld hinzuzufügen. dann findet die TDatasSource das Feld nicht und meckert.
So. Genug jetzt.

barnti 4. Sep 2003 08:09

Re: Master-Detail-Verknüpfung
 
Hallo ihr!

Das Problem hat sich folgendermassen gelöst:
Die DBLookUpCombobox hatte in ihren Properties "ReadOnly" eingestellt.
Dann kann das nicht funktionieren! Dort geändert - schwups - jetzt funktioniert es.

Zitat:

Daher hier meine 10 Gebote für den faulen Datenbankmenschen
Amen!(Einige dieser 'Regeln' sind sicherlich hilfreich, aber nicht im Interesse der OOP und widersprechen auch dem DB -Design) :wink:

Das Problem bei Ansi-SQL ist, das mysql es nicht überall unterstützt. Damit ist die Frage des DB -Wechsels überflüssig.

ES GEHT! Nach einem Tag wurde das auch Zeit. Ich denke hier ist noch eine wichtige Regel, die der beherzte Programmierer zu achten hat (was sich grad wieder bestätigt):

11. Mach mal ne Pause!

Danke für eure Unterstützung, auch wenn nicht immer die direkte Problemlösung in diesem Forum gewährt ist, ist es absolut erfreulich sich mal mit "Gleichgesinnten" auszutauschen! 8)

Vielen Dank für das Interesse,

Barnti


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:55 Uhr.
Seite 2 von 2     12   

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