Autor Beitrag
hansa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: 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 :

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1305
Erhaltene Danke: 1

WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: 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 :

ausblenden 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. 8)
[/code]
LCS
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1305
Erhaltene Danke: 1

WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: 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. :nixweiss: 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. :lol:
LCS
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1305
Erhaltene Danke: 1

WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1305
Erhaltene Danke: 1

WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
BeitragVerfasst: Di 14.01.03 09:27 
Hach das geht runter :mrgreen:
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:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Di 14.01.03 09:38 
Hi,

ist das ein bekanntes Problem bei Comboboxen ? :shock: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1305
Erhaltene Danke: 1

WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
BeitragVerfasst: Di 14.01.03 09:42 
Hi
30 bis 40 Tabellen mit ein Feld mit gleichem Namen auftritt? :shock: Bei mir tritt das schon auf wenn ich zwei Tabellen verbinde :mrgreen: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Di 14.01.03 09:53 
Stimmt, die IDs hab ich ja auch überall. 8) Jetzt aber noch ein Phänomen. Delphi ist anscheinend ein Chamäleon, das sich über Nacht ändert. :hair: In dem ListField der ListBox steht momentan drin :

ausblenden 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