[Delphi6] Probleem met lookupcombo

Pagina: 1
Acties:

  • Pino
  • Registratie: Oktober 2001
  • Laatst online: 30-04 11:12
Ik zal wel iets over het hoofd zien en mischien is dit wel een feature, maar ik begin de moed op te geven.

Alle datacomponenten zij via Interbase componenten verbonden met een Firebird 1.51 database.

Voor dit voorbeeld heb ik twee tabellen, een tabel huurder en een tabel legitimatie. legitimatie is een foreign key van huuurder.

Ik heb een DBlookupcombobox, de listsource is de legitimatietabel en de datavelden zijn van de huurdertabel.

Nu is het probleem als volgt, de combobox bevat de correcte waarden, alleen klapt de combobox de eerste keer niet goed uit.

Afbeeldingslocatie: http://martin.vrijbuiters.com/combo.gif

als ik dan aan de rechterkant eerst naar beneden scroll, de combo sluit en dan opnieuw open, dan is hij wel correct weergegeven:

Afbeeldingslocatie: http://martin.vrijbuiters.com/combo2.gif

Iemand een idee waar dit aan kan liggen?

"If you don't know where you are going, any road will take you there"


  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 28-04 18:15

Tomatoman

Fulltime prutser

Heb je de FieldSource/FieldName wel goed ingevuld? De ListSource/ListName geeft aan welke waarden er allemaal in het lijstje voorkomen, de FieldName is de waarde die het veld in de huidige record heeft.

[Edit]
Het kan zijn dat het veld FieldName net een beetje anders heet, ik heb hier geen Delphi bij de hand.

[ Voor 30% gewijzigd door Tomatoman op 16-08-2005 13:35 ]

Een goede grap mag vrienden kosten.


  • Pino
  • Registratie: Oktober 2001
  • Laatst online: 30-04 11:12
tomatoman schreef op dinsdag 16 augustus 2005 @ 13:33:
Heb je de FieldSource wel goed ingevuld? De ListSource geeft aan welke waarden er allemaal in het lijstje voorkomen, de FieldSource is de waarde die het veld in de huidige record heeft.
Je bedoelt KeyField en ListField? Die staan allebei goed, dat is hetzelfde veld.

hier de property editor:

Afbeeldingslocatie: http://martin.vrijbuiters.com/combo3.gif

"If you don't know where you are going, any road will take you there"


  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 28-04 18:15

Tomatoman

Fulltime prutser

Pino schreef op dinsdag 16 augustus 2005 @ 13:37:
[...]


Je bedoelt KeyField en ListField? Die staan allebei goed, dat is hetzelfde veld.

hier de property editor:

[afbeelding]
Lees in de helpfiles eens goed wat DataField, KeyField en ListField doen. Het DataField (ik had het over FieldName) is het veld waaruit de geselecteerde waarde wordt gelezen en waarin hij ook weer wordt opgeslagen. KeyField is het veld om de link te leggen tussen de tabel met alle mogelijke waarden voor de dropdown list en de record die op dit moment wordt weergegeven in de combo box.

Waar het om gaat is dat de in de tabel weergegeven tekst niet noodzakelijk hoeft overeen te komen met de waarde in de tabel.

Stel dat je een tabel hebt die er zo uitziet:

code:
1
2
3
4
OpzoekID   Opzoekwaarde
  1          Hoog
  2          Middel
  3          Laag


De gebruiker kan nu een opzoekwaarde (KeyField) zien in de combobox, terwijl in je database de OpzoekID (DataField) wordt opgeslagen.

[ Voor 24% gewijzigd door Tomatoman op 16-08-2005 13:51 ]

Een goede grap mag vrienden kosten.


  • Pino
  • Registratie: Oktober 2001
  • Laatst online: 30-04 11:12
tomatoman schreef op dinsdag 16 augustus 2005 @ 13:45:
[...]

Lees in de helpfiles eens goed wat DataField, KeyField en ListField doen. Het DataField (ik had het over FieldName) is het veld waaruit de geselecteerde waarde wordt gelezen en waarin hij ook weer wordt opgeslagen. KeyField is het veld om de link te leggen tussen de tabel met alle mogelijke waarden voor de dropdown list en de record die op dit moment wordt weergegeven in de combo box.
Dat is het probleem niet, hij werkt prima, alleen klapt ie niet volledig uit maar zit er een irritante up/down button. Technisch functioneert alles al jaren perfect.

En ja, ik zal je wel in verwarring brengen, maar mijn keyfield is ook listfield. de tabel is als volgt opgezet:

code:
1
2
3
4
5
6
7
8
9
10
CREATE TABLE "IDKAARTSOORT" 
(
  "OMSCHRIJVING_NL"  VARCHAR(50)  NOT NULL,
  "OMSCHRIJVING_EN"  VARCHAR(50)  NOT NULL,
  "INVOERMEDEWERKER"     VARCHAR(20),
  "WIJZIGINGSMEDEWERKER"     VARCHAR(20),
  "INVOERTIJD"   TIMESTAMP,
  "WIJZIGINGSTIJD"   TIMESTAMP,
 PRIMARY KEY ("OMSCHRIJVING_NL")
);


Het heeft ergens te maken met de recordcount van het IBTable object denk ik, als ik het volgende doe:

code:
1
2
3
4
  tbl_Legitimatie.First;
  repeat
    tbl_Legitimatie.Next;
  until tbl_Legitimatie.Eof;


dan toont hij wel de volledig uitgeklapte combo. :(

[ Voor 46% gewijzigd door Pino op 16-08-2005 14:02 ]

"If you don't know where you are going, any road will take you there"


  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 28-04 18:15

Tomatoman

Fulltime prutser

Pino schreef op dinsdag 16 augustus 2005 @ 13:49:
[...]


Dat is het probleem niet, hij werkt prima, alleen klapt ie niet volledig uit maar zit er een irritante up/down button. Technisch functioneert alles al jaren perfect.
Oh, ik zie dat ik je verkeerd had begrepen. :o

Het lijkt erop dat de tabel/query waar ds_Legitimatie aan gekoppeld is, zijn records batchgewijs ophaalt en in een cache bewaart. Dat is erg handig (want snel) als je een grote tabel hebt, maar niet in dit geval. Heb je hiervoor misschien iets ingesteld bij je tabel/query of gebruik je misschien een TClientDataSet?

Een goede grap mag vrienden kosten.


  • Pino
  • Registratie: Oktober 2001
  • Laatst online: 30-04 11:12
tomatoman schreef op dinsdag 16 augustus 2005 @ 14:00:
[...]
Oh, ik zie dat ik je verkeerd had begrepen. :o

Het lijkt erop dat de tabel/query waar ds_Legitimatie aan gekoppeld is, zijn records batchgewijs ophaalt en in een cache bewaart. Dat is erg handig (want snel) als je een grote tabel hebt, maar niet in dit geval. Heb je hiervoor misschien iets ingesteld bij je tabel/query of gebruik je misschien een TClientDataSet?
Dat zou kunnen kloppen met het doorlopen van de tabel wat ik in mijn edit aangeef, even zoeken...

Hmm, dan zou het aan de IBTable moeten liggen, maar daar zie ik niets 'vreemds' aan, grids worden wel netjes gevuld door dezelfde componenten...

Afbeeldingslocatie: http://martin.vrijbuiters.com/combo4.gif

[ Voor 15% gewijzigd door Pino op 16-08-2005 14:06 ]

"If you don't know where you are going, any road will take you there"


  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 28-04 18:15

Tomatoman

Fulltime prutser

Een aardige indicatie of dit ook echt het probleem is, is om voordat je het lijstje opent eerst via een paar regels code van de eerste naar de laatste record gaan, zodat alle records ook echt worden ingelezen. Krijg je dan bij de eerste keer openen de complete lijst te zien, dan is dat waarschijnlijk het probleem. Andere indicatie: na een refresh is je lijstje bij de eerste keer openen waarschijnlijk weer incompleet.

Een goede grap mag vrienden kosten.


  • Pino
  • Registratie: Oktober 2001
  • Laatst online: 30-04 11:12
tomatoman schreef op dinsdag 16 augustus 2005 @ 14:06:
Een aardige indicatie of dit ook echt het probleem is, is om voordat je het lijstje opent eerst via een paar regels code van de eerste naar de laatste record gaan, zodat alle records ook echt worden ingelezen. Krijg je dan bij de eerste keer openen de complete lijst te zien, dan is dat waarschijnlijk het probleem. Andere indicatie: na een refresh is je lijstje bij de eerste keer openen waarschijnlijk weer incompleet.
Klopt, na refresh is ie weer terug bij af.

Maar, waardoor komt dit nou, ik kan in een IBTable object weinig instellen wat hij met cache moet regelen. Ik vind de hele tabel doorfietsen niet echt elegant...

[ Voor 13% gewijzigd door Pino op 16-08-2005 14:13 ]

"If you don't know where you are going, any road will take you there"


  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 28-04 18:15

Tomatoman

Fulltime prutser

De property BufferChunks ken ik niet, maar klinkt verdacht. Misschien eens mee experimenteren? Het zou ook nog een instelling van de databaseconnectie kunnen zijn. Lastig te zeggen, het zal wel trial and error worden.

Als workaround zou je altijd nog kunnen proberen om in de OnDropDown de hele dataset in te lezen door alle records langs te lopen. Ik weet echter niet zeker of dat werkt, omdat ik niet weet of OnDropDown wordt getriggerd vóórdat of juist nádat de records in de dropdown list zijn ingelezen. Elegant is het niet, maar waarschijnlijk wel effectief.

Een goede grap mag vrienden kosten.


  • Pino
  • Registratie: Oktober 2001
  • Laatst online: 30-04 11:12
tomatoman schreef op dinsdag 16 augustus 2005 @ 14:16:
De property BufferChunks ken ik niet, maar klinkt verdacht.
Juist, zo klonk ie bij mij ook, maar heeft geen resultaat :)
Als workaround zou je altijd nog kunnen proberen om in de OnDropDown de hele dataset in te lezen door alle records langs te lopen. Ik weet echter niet zeker of dat werkt, omdat ik niet weet of OnDropDown wordt getriggerd vóórdat of juist nádat de records in de dropdown list zijn ingelezen. Elegant is het niet, maar waarschijnlijk wel effectief.
Dat gaat prima na de Table.open. Ik vind het alleen niet leuk, dit is ook nog eens niet de enige dropdown die zo werkt.... Naja. dan ga ik nog maar wat klooien, ik heb iig wat meer zoektermen nu.

Ok, of ik nou een table of een query gebruik maakt geen verschil iig.

[ Voor 7% gewijzigd door Pino op 16-08-2005 14:29 ]

"If you don't know where you are going, any road will take you there"


  • Pino
  • Registratie: Oktober 2001
  • Laatst online: 30-04 11:12
Ik heb het nu uiteindelijk opgelost door een clientdataset te gebruiken, mischien ook wel net zo netjes, die data heb ik toch maar eenmalig nodig.

"If you don't know where you are going, any road will take you there"

Pagina: 1