| Autor |
Beitrag |
NoEon
      
Beiträge: 138
win9x, win 2000, win xp, linux 8.0
|
Verfasst: Mo 05.05.03 13:19
Hallo, ich habe ein verständnis Problem was eine, glaube ich, simple Sache angeht!
eine kleine Datenbank
ich habe jetzt einen Datensatz, bestehent aus einem String. Das ist eine Tabelle die da heisst device_db.db. Diese Tabelle beeinhaltet device_id und device_name. Ich habe schon ein Paar Namen eingegeben, das funktionier auch alles ganz gut und schön, mt dem Navigator, alles auch nicht das Ding, aber ich will diesen Device Namen der redundant ist durch die fortlaufende Nummer mehreren Tabellen zuordnen. Nämlich denen die aktuelle auf dem Datenbank Feld zu sehn sind! Ich habe da noch eine weiter Tabelle duch die ich Navigiere. und diese Device_db soll verbunden werden mit der anderen..
Ich muss also in einer gesonderten Tabelle die ich mal zuordnung_device.db genannt habe ein eintrag erfolgen.(n:m) und zwar aus der Tabelle sw_db.db hier brauche ich die aktuell angezeigte sw_id und ebenso auch die aktuelle device_id aus der Tabelle device_db.db, die sollen wir schon erwähnt in die Tabelle zuordnung_device.db eingetragen werden. Soweit so gut. Das soll dann einfach auf ButtonClickEreignis passieren, aber wie mach ich das den nun?????
Ich hab da auch mal was gebastelt, sorry aber anderes kann ich das noch nicht nennen, weil ich ganz am anfang stehe mit meinen Problemen
Dann soll, damit das auch sichtbar wird, folgendes sein. Wenn ich die Tabelle sw_db.db durchblätter soll in einer Grind angezeigt werden was dazu aus der Device_db.db in die Tabelle zuordnung_device.db eingetragen wurde, das muss ja irgendwie gehn.. nur wie. Lothar hat mir das mal gezeigt aber ich beiss mir daran einfach die Zähne aus... ich sitz nun schon 4 Tage dran.. (auch nach Feieraben..*grummel*, frust macht sich breit)
Vielleicht kann jemand rat geben!! das wäre super klasse!!!
Danke bis hier erstmal..
Gruss
Lars
|
|
MrSpock
      
Beiträge: 262
|
Verfasst: Di 06.05.03 21:30
Hallo NoEon,
fangen wir mal mit den ersten Teil an:
| Zitat: | | Das soll dann einfach auf ButtonClickEreignis passieren, aber wie mach ich das den nun????? |
Das geht so:
Delphi-Quelltext 1: 2: 3: 4:
| zuordnung_device.Append; zuordnung_devicesw_id.Value := sw_dbID.Value; zuordnung_devicedevice_id.Value := device_dbID.Value; zuordnung_device.Post |
So hast du jetzt eine "Verbindung" zwischen den beiden aktuellen Datensätze von device_db und sw_db erstellt.
Wenn du soweit bist, sag Bescheid, dann zeige ich dir, wie man beim Scrollen in sw_db alle zugehörigen Einträge von device_db anzeigen kann.
_________________ Live long and prosper
MrSpock \\//
|
|
NoEon 
      
Beiträge: 138
win9x, win 2000, win xp, linux 8.0
|
Verfasst: Fr 09.05.03 08:33
Hier schau mal, das habe ich an einer anderen Stelle gefunden, da kann ich aber nicht alles draus interpretieren!
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| procedure TForm1.Button2Click(Sender: TObject); begin with DM.tbl_kdde do begin Active := True; Insert; Fields[1].Value := DM.tbl_sw.Fields[0].AsInteger; FieldByName('Fa_id').Value := DM.tblKunden.FieldByName ('Fa_id').AsInteger; try Post; except Cancel; end; Active := False; end; end; |
das habe ich so wei ich meinte auch umgeschrieben für meine Belange!.. das Original sieht so aus...
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| procedure TForm1.Button1Click(Sender: TObject); begin with DM.tblSwKd do begin Active := True; Insert; Fields[1].Value := DM.tbl_sw.Fields[0].AsInteger; FieldByName('Fa_id').Value := DM.tblKunden.FieldByName('Fa_id').AsInteger; try Post; except Cancel; end; Active := False; end;
end; |
aber was ich da nun nicht gerallt habe, das weiss ich nicht vielleicht weisst Du das?!
Gruss Lars
|
|
MrSpock
      
Beiträge: 262
|
Verfasst: Fr 09.05.03 19:50
Hallo NoEon,
ich würde nicht mit dem Fields-Array arbeiten.
Was funktioniert denn nicht, mit dem Code, den ich oben gepostet habe?
Inzwischen will ich hier ein paar Tips zu der Frage nach Anzeige aller "devices" für die ausgewählte "sw".
Ziehe alle 3 Tabellen auf ein Formular und ordne ihnen je eine DataSource Komponente zu. Setze zwei DBGrids auf das Formular und verbinde das erste mit der Mastertabelle (also sw_db). Bei der 2. Tabelle (zuordnung_db) setze MasterSource auf die DataSorce, die auf die 1. Tabelle zeigt. Du solltest der Tabelle zuordnung_db neben dem Primärindex noch 2 Sekundärindices gönnen, wobei der eine idx_sw und der andere idx_dev heißt und jeweils das enbtsprechende Feld indizieren. (Achtung: diese Indices nicht als EINDEUTIG markieren!). Als IndexFieldNames wählst du jetzt die sw_id der Tabelle zuordnung_db und verknüpfst durch anklicken von Masterfields die sw_id Spalte der zuordnung_db mit der ID Spalte der Tabelle sw_db.
Das 2. DB Grid verbindest du jetzt mit der Tabell zuordnung_db.
Wenn du alles hast, sag Bescheid, dann kommt der entscheidende Schritt 
_________________ Live long and prosper
MrSpock \\//
|
|
NoEon 
      
Beiträge: 138
win9x, win 2000, win xp, linux 8.0
|
Verfasst: Mo 12.05.03 09:40
|
|
MrSpock
      
Beiträge: 262
|
Verfasst: Di 13.05.03 20:56
Die Bahn... Ist die Bahn schon weg?
Mal im Ernst, was verstehst du nicht?
Wenn noch nicht geschehen, wähle 3 TTable Komonenten und füge sie deinem Formular (oder einem Datenmodul) hinzu. Wähle für die Eigenschaft DataBaseName den Alias deiner Datenbank und als TableName jeweils eine der 3 Tabellen, so dass alle 3 Tabellen in deinem Formular ansprechbar sind.
Dann wähle von der Datenzugriff - Seite zu jeder Tabelle eine Komponente TDataSource und verbinde diese mit je einer Tabelle, in dem du die Eigenschaft DataSet entsprechend setzt.
Soweit klar?
_________________ Live long and prosper
MrSpock \\//
|
|
NoEon 
      
Beiträge: 138
win9x, win 2000, win xp, linux 8.0
|
Verfasst: Mi 14.05.03 11:23
ja das geht schoen eher...!!! Das war ein bischen ungklücklich formuliert fand ich, aber ok.. Das letzte war eindeutiger!
Soweit klar ja!!!
|
|
MrSpock
      
Beiträge: 262
|
Verfasst: Mi 14.05.03 16:20
Hallo NoEon,
muss gerade los auf Dienstreise, versuche mich am Freitag zu melden.
_________________ Live long and prosper
MrSpock \\//
|
|
NoEon 
      
Beiträge: 138
win9x, win 2000, win xp, linux 8.0
|
Verfasst: Do 15.05.03 10:27
|
|
MrSpock
      
Beiträge: 262
|
Verfasst: Do 15.05.03 20:22
Hallo NoEON,
bin wieder da.
Füge jetzt noch 2 DBGrid Komponenten in das Formular ein (von der Datensteuerungsseite).
Das weiter oben angeordnete DBGrid verbindest du mit DataSource1, dabei sollte DataSource1 mit Table1 verbunden sein und Table1 mit der Tabelle sw_db.db verknüpft sein. Verbinden heißt hier als Eigenschaft DataSource von DBGrid1 DataSource1 wählen.
Die untere DBGrid Komponente verbindest du mit DataSource2, dabei soll DataSource2 auf Table2 zeigen und Table2 die Tabelle zuordnung_db.db repräsentieren.
Mache anschließend einen Doppelklick auf Table2 und füge (über die rechte Maustaste und anschließend "alle Felder hinzufügen) die Felder der Tabelle in deine Anwendung ein.
Sag Bescheid, wenn du diese 3 Sachen hast.
_________________ Live long and prosper
MrSpock \\//
|
|
NoEon 
      
Beiträge: 138
win9x, win 2000, win xp, linux 8.0
|
Verfasst: Fr 16.05.03 07:07
Hi Morgen,
jo das hab ich auch gemacht, das war klar und eindeutig!!!
Doch halt, das mit dem Hinzufügen der Spalten will nicht klappen... zuordnung_device.db heisst die Tabelle aber ich kann dir mich nicht anzeigen lassen??? Warum das nicht?? Das ist ja doof!
Doch jtzt geht es doch..die scr war nicht aktive. Aber jetzt ist sie das und ich kann mir alles anzeigen lassen!
|
|
MrSpock
      
Beiträge: 262
|
Verfasst: Fr 16.05.03 09:48
Hallo NoEON,
das mit dem Hinzufügen ist wichtig, weil später noch ein neues Feld hinzugefügt wird.
Wenn du ein Doppelklick auf das entsprechende TTable Objekt machst, sollte ein kleines Fenster aufgehen. Dort kannst du mit der rechten Maustaste klicken und in dem Popup Menü "alle Felder hinzufügen" auswählen. In dem kleinen Fenster (Feldeditor) sollten dann alle Felder erscheinen. Wo genau funktioniert der Vorgang nicht?
_________________ Live long and prosper
MrSpock \\//
|
|
NoEon 
      
Beiträge: 138
win9x, win 2000, win xp, linux 8.0
|
Verfasst: Fr 16.05.03 11:34
|
|
MrSpock
      
Beiträge: 262
|
Verfasst: Mo 19.05.03 12:00
Hallo NoEon,
jetzt kommt die Festlegung des Masters und der Detail Tabelle:
Die Tabelle2 (zuordnung_device.db) hat eine Eigenschaft MasterSource. Dort kannst du aus einer Dropdownliste eine der DataSource Komponenten auswählen. Wähle DataSource1, sofern DataSource1 auf die Tabelle sw_db zeigt.
Die Tabelle zuordnung_db sollte einen Primärindex haben, der beide Felder der Tabelle umfasst. Zusätzlich solltest du für die Tabelle zwei Sekundärindizes anlegen, einen nennst du z.B. idx_sw und wählst das Feld sw_id aus (also das Feld, in dem du die ID des zugehörigen Eintrages aus der sw-db speicherst). Den zweiten Index nennst du z.B. idx_dev und dieser soll nur das zweite Feld der Tabelle auswählen.
(Achtung: diese Indices nicht als EINDEUTIG markieren!).
Als Eigenschaft IndexFieldNames der Tabelle zuordnung_devices.db wählst du jetzt den Index idx_sw aus. Anschließend klickst du die Eigenschaft Masterfields an (...) und verbindest dort die sw_id Spalte (siehe oben) der zuordnung_devices Tabelle mit dem ID Feld der Tabelle sw_db.
_________________ Live long and prosper
MrSpock \\//
|
|
|