| Autor |
Beitrag |
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: So 12.01.03 20:39
Hi,
bin dabei zu testen, wie eine DBlookupComboBox genau zu behandeln ist. Hierzu viel mir nichts besseres ein, als mir alle Artikel auf einer Rechnung zeigen zu lassen. Das hier steht bei Buttonclick :
Quelltext 1: 2: 3: 4: 5:
| ... RecDS.SelectSQL.Text := 'SELECT * FROM REC WHERE ID_RECKOPF= 10'; ... ArtDS.SelectSQL.Text := 'SELECT * FROM ART WHERE ID= :ID_ART'; ... |
Hier sollen alle Artikel von Rechnung mit ID = 10 angezeigt werden. Als Listsource habe ich die Artikel-Table definiert, als Listfield die Bez. Datasource ist die Rechnungs-Table, Datafield die ID_ART. Jetzt habe ich folgenden Effekt : Drücke ich den Button, so kommt ein einziger Artikel. Also stimmt mein Select so nicht. Aber ich habe es extra in der IBconsole ausprobiert da ging es. Das :ID_ART gefällt mir irgendwie nicht. In der Rec-Table gibt es ein Feld, das heißt so, aber ist das so wirklich richtig ??? Woher weiß das Programm denn, daß das aus der Rec-Table ist ?
Gruß
Hansa
|
|
LCS
      
Beiträge: 1305
Erhaltene Danke: 1
WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
|
Verfasst: Mo 13.01.03 08:52
Hi
das ist schon richtig so. Du hast ja dein Select für die Artikel so eingeschränkt, dass nur der angezeigt wird, der in der aktuellen Rechnungsposition vorhanden ist. Und das ist logischerweise nur einer.
Gruss Lothar
_________________ Der BH ist für die Brust, der Plan ist für'n Ar...
|
|
hansa 
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Mo 13.01.03 14:35
Hi,
so ein ähnliches Thema hatten wir vor längerer Zeit schon mal:
www.auq.de/viewtopic...=4891&highlight=
Das mußte ich aber zurückstellen, das meiste glaube ich verstanden zu haben. Bei der Umsetzung haperts trotzdem. Wie gesagt will ich alle Artikel sehen, die auf einer bestimmten Rechnung stehen in einr Combobox anzeigen. Nachdem ich obigen Thread gestern abend wieder gefunden habe, hab ich es jetzt so gemacht :
Quelltext 1:
| 'Select R.*,A.* FROM REC8 R JOIN ART8 A ON (A.ID = R.ID_ART) WHERE R.ID_RECKOPF = 4' |
Effekt : In der Combobox stehen alle Artikel drin! So als würde die WHERE-Klausel gar nicht zur Kenntnis genommen. Sieht da jemand einen Fehler ?
Gruß
Hansa
P.S.: Muß mir mal die alten Dinger heute mittag angucken. Da muß bestimmt einiges wiederbelebt werden.
[/code]
|
|
LCS
      
Beiträge: 1305
Erhaltene Danke: 1
WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
|
Verfasst: Mo 13.01.03 14:55
Eigentlich nicht. Wenn das die Datenmenge für ListSource bereitstellt, sollten nur die in der Rechnung vorhandenen Artikel auftauchen. Hast du das mal direkt in der IBConsole ausprobiert?
Gruss Lothar
_________________ Der BH ist für die Brust, der Plan ist für'n Ar...
|
|
hansa 
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Mo 13.01.03 14:58
Hi,
der Join stimmt, habe es gerade in der IBconsole überprüft. Das muß ein Problem mit Delphi sein. Als DB-Komponente habe ich Database, Transaction, Datasource,Dataset und dann noch die KomboBox. DataSet der Datasource ist das was vom JOIN zurückkommt. Wie es richtig ist kann ich als Datafield der Box jedes Feld aus den beiden mit JOIN verknüpften Tabellen wählen. Bis dahin sehe ich keinen Fehler, erst zur Laufzeit.  Versuche ich allerdings das DataSet im OI auf active = true zu setzen, kommt "circular Datalinks are not allowed"
Gruß
Hansa
P.S.: War das hier gerade am Tippen. 
|
|
LCS
      
Beiträge: 1305
Erhaltene Danke: 1
WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
|
Verfasst: Mo 13.01.03 15:04
Wenn ich das richtig verstanden habe, dann willst du die Combo nur zur Anzeige verwenden. Die DataSource wird in der Eigenschaft ListSource der Combo eingetragen, die Eigenschaft DataSource und DataField der Combo bleiben leer.
Gruss Lothar
_________________ Der BH ist für die Brust, der Plan ist für'n Ar...
|
|
hansa 
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Mo 13.01.03 16:05
Hi Lothar,
bist halt der Beste. Hatte wirklich bei List- und Datasource dasselbe drin stehen, das ergab das circular-BlaBla. Jetzt geht es, bis auf eine Kleinigkeit. Klappe ich die Box auf sehe ich eine Zeile. Scrolle ich 3 Zeilen nach unten, so sehe ich 4 Zeilen, nachdem ich die Box zu- und wieder aufgeklappt habe. Und das geht so weiter bis der Wert DropDownRows erreicht wird. Anscheinend muß man dem Satzzeiger der Datenmenge sagen, er solle bitte die Box nicht halb leer lassen, aber wie ?
Gruß
Hansa
|
|
LCS
      
Beiträge: 1305
Erhaltene Danke: 1
WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
|
Verfasst: Di 14.01.03 09:27
Hach das geht runter
Ja, das leidige Problem mit ComboBoxen. Liegt daran, dass die IB-Komponenten nur soviele Daten vom Server abholen wie notwendig. Eine Möglichkeit das zu umgehen wäre eine Prozedur für AfterOpen der Query bereitzustellen:
Quelltext 1: 2: 3: 4: 5:
| procedure TformX.ArtDsAfterOpen(DataSet: TDataSet); begin Dataset.MoveBy(cboArt.DropDownRows); Dataset.First; end; |
Gruss Lothar
_________________ Der BH ist für die Brust, der Plan ist für'n Ar...
|
|
hansa 
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Di 14.01.03 09:38
Hi,
ist das ein bekanntes Problem bei Comboboxen ?  Da es, wie Du erkannt hast, nur für Anzeigezwecke dient habe ich das ganze sowieso umgestellt auf eine Listbox, da ist das nicht so. Aber noch eine Frage : Habe mir überlegt, was wohl wäre wenn in einem Join zwei Tabellen benutzt werden, die ein Feld gleichen Namens haben ? Habe hochgerechnet, daß ich ca. 30-40 Tabellen brauche. Da könnte das schon vorkommen.
Gruß
Hansa
|
|
LCS
      
Beiträge: 1305
Erhaltene Danke: 1
WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
|
Verfasst: Di 14.01.03 09:42
Hi
30 bis 40 Tabellen mit ein Feld mit gleichem Namen auftritt?  Bei mir tritt das schon auf wenn ich zwei Tabellen verbinde  Spielt aber keine Rolle: Tabellenname.Feldname und schon ist die Geschichte eindeutig.
Gruss Lothar
_________________ Der BH ist für die Brust, der Plan ist für'n Ar...
|
|
hansa 
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Di 14.01.03 09:53
Stimmt, die IDs hab ich ja auch überall.  Jetzt aber noch ein Phänomen. Delphi ist anscheinend ein Chamäleon, das sich über Nacht ändert.  In dem ListField der ListBox steht momentan drin :
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| object DBLookupListBox1: TDBLookupListBox Left = 176 Top = 56 Width = 500 Height = 264 KeyField = 'ID' ListField = 'NR;BEZ;INH;MENGE;VKPREIS' ListSource = DataSource1 TabOrder = 0 end |
Gehe ich im OI auf Listfield, dann zeigt er mir als Auswahl nur die Felder der Rechnung an. Nicht die der Join-Datenmenge. Also die Artikel-Felder fehlen ! Wie geht denn das? Das Programm läuft trotzdem ! Gestern war das noch anders.
Gruß
Hansa
|
|