Delphi-Firebird/DBLookupComboBox

Delphi-Firebird/DBLookupComboBox
2005-09-21T13:30:09+02:00
2005-09-23T17:28:54+02:00
2022-10-27T04:30:38+02:00
j5j5
Delphi7-et használok IBX komponensekkel, a jelenség az alábbi: van egy DBLookupComboBox komponensem, aminek a listsoure-ja egy queryből jön a query megnyitása a DBLookupComboBox megnyitásakor a legördülő listában csak az első elem látszik, tudom lefelé görgetni, akkor látható a többi is, és ezután újbóli legörgetéskor már látható a lista ameddig utoljára le volt görgetve. Ha a query afteropen eseményébe berakok egy DataSet.Last-ot akkor minden ok. Nekem bből az következne hogy a query fetchel, és csak akkor olvassa be a következő rekordot ha szükséges. Gridnél pedig ha meghívok egy query-t olyan ami jó sok rekordot ad vissza akkor várnom kell míg lefut teljesen nem csak annyi ami látható a gridben? Lehet ezt valahogy szabályozni? Mi lehet a jelenség oka?
Mutasd a teljes hozzászólást!
Hát én spec a Query.FetchAll-t használom és eddig semmi bajom nem volt vele...
Mutasd a teljes hozzászólást!

  • Mert van olyan okos, hogy nem rángatja át a gép memoriájábla a tábla x tartalmát,
    AfterOpen:

    DataSet.next;
    DataSet.next;
    DataSet.next;
    DataSet.next;
    DataSet.next;
    DataSet.next;
    DataSet.next;
    DataSet.next;
    DataSet.next;
    DataSet.next;
    DataSet.next;
    DataSet.First;

    //persze erre van szem megoldás is...
    // pl. DataSet.MoveBy(10); DataSet.First; // de nem teszteltem...
    Mutasd a teljes hozzászólást!
  • De a grid esetén meg mégsem olyan okos?
    A combobox-nál kb 5-6 rekord van, és azt nem olvassa be a gridnél meg kipróbálam 200000-el, és ott sokáig tartott tehát beolvassa?
    Mutasd a teljes hozzászólást!
  • Na lebuktam... nem olvastam végig... mert -mint a második leveled is- fogalmazhatnál egyértelműben is...

    milyen 5-6, milyen 200000-el...

    a grid is csak annyik kérdez le amennyi látszik benn...

    Dataset.last; a legrosszabb megoldás...
    Mutasd a teljes hozzászólást!
  • Hát én spec a Query.FetchAll-t használom és eddig semmi bajom nem volt vele...
    Mutasd a teljes hozzászólást!
  • Arra gondolok, hogy a lookupcombobox-okat valami tulajdonság kiválaszt's'ra használom, ezekben a táblákban max 10-20 rekord van. A gridhez tartozó táblában van sok rekord. Engem az zavar, hogy nem tűnik konzekvensnek. mert ha nem olvassa be a comboboxnál az összes rekordot akkor a gridnél sem kellene. de az is lehet én nem vagyok tisztában valamivel.
    Mutasd a teljes hozzászólást!
  • A FetchAll a legrosszabb megoldás... arra késztetted az adatbázismotort, a hálózatott, a helyi gépet, hogy N darab byte-al biztosan le legyen terhelve. amikor neked csak N/X darab recordra lenne szőkséges... erőforrás kezelésről nem olvastatok még semmit?

    mindkét komponensnél úgyan az az adatforrás, tehát biztos vagyok benne, hogy nem itt van a bibi... de 200000 recordos táblát nem engedünk a felhasználonak megnyitni... szürni kell! Vagy csak akkor ha nagyon akarja... de nem alap program funkciónalításból... a TDbLookupcombobax felejtendő komponens... tényleg csak 10-20 rekordos adatforrás esetében szabad használni. Idézem önmagam: 'erőforrás kezelés' !
    Mutasd a teljes hozzászólást!
  • Értem amit mondassz pontosan azért tettem fel a kérdést, dblookupcombobox-ot csak akkor használok amikor 5-6 rekord van, és kipróbálva a fetchall-t kizárólag erre használva jól működik. A gridbe a sok rekordot azért raktam, hogy megnézzem, hogy ilyenkor beolvassa-e az egészet, és arra számítottam, hogy nem fogja, közben mégis.
    nem soktam teljes táblákat átrángatni én sem. Pont ezért szerettem volna megérteni a működését, de lehet, hogy tényleg valamit félreértek.
    Mutasd a teljes hozzászólást!
  • Próbáld ki a TDBLookupComboPlus komponenst:
    http://www.o2a.com/
    Free forrásal!

    Ha van kedved, akkor piszkáld meg olymódon, hogy ne követelje meg a lookup dataset folyamatos nyitot állapotát (ciki tud lenni, ha a program futása során - csak a lokkup datasetek miatt - sok tucat querynek nyitottnak kell lennie, nem is beszélve az frissülésekről).
    Mutasd a teljes hozzászólást!
  • Abban igazad van, hogy DBLookupComboba nem szabad sok rekordot betölteni, ez teljesen helyén való, de ha nem fetch-eled, az az 5-10 rekord sem lesz benne aminek pedig illene ott lennie. Ha tudsz más módszert hogy a combo feltöltse a listáját légyszi oszd meg velünk!
    Mutasd a teljes hozzászólást!
  • Ne kergessetek má' örületbe!
    Ezért írtam, '2005.09.21. 14:19'-s levelemet...
    Mutasd a teljes hozzászólást!
  • Aha.... szóval

    DataSet.MoveBy(10); DataSet.First;

    És ha nekem abba a nyavajás comboba 15 rekordom van akkor az utolsó ötröl le kell hogy mondjak? Kipróbálom, de úgy emléxem scrollozás közben más nem kéri le a hiányzó rekordokat.
    Megcsekkolom.... még mielőtt kárt tennél magadban
    Mutasd a teljes hozzászólást!
  • Szerintem a RecordCount a ludas. Az adatvezérlők arra alapoznak, ha az elemszámra kíváncsiak. Van olyan komponens, aminek meg lehet adni, hogy egy lekérdezés megnyitásokar kérdezze-e azt meg az adatbázistól. A rácsok csúszkája például látványosan máshogy viselkedik, mikor tudja a DataSet a RecordCount-ot és amikor nem.

    Ha a komponens olyan, hogy még nem tudja megnyitáskor, hogy hány rekord lesz, akkor szerintem azt mondja, hogy egy, ezért a lista csak egyet mutat.

    A rácsnak persze az adatok is kellenek, tehát ő előreolvas, így a darabszám is növekszik. Nem hiszem, hogy mindig végigolvasná a teljes halmazt, viszont.
    Mutasd a teljes hozzászólást!
  • Ezek szerint 10-20 rekordos táblákhoz amik combobox-ban jelennek meg nyugodtan használhatom a FetchAll-t, ott pontosan az a cél, hogy az összes rekordot áthozza azonnal. A többi esetben pedig nem használom amúgy sem, Ezek szerint a datasource-hoz kapcsolódó komponensek határozzák meg mennyit olvasson be, ez szabályoíható pl egy gridnél?
    Mutasd a teljes hozzászólást!
  • Hmm, hmm.

    Én azt hiszem, igen. Van a TDataSetnek egy puffere, és a hozzá kapcsolódó komponensek mind megmondhatják, hogy mekkora puffert szeretnének, ő pedig a maximumot tölti be. Úgy láttam, a grid például annyit kér, ahány sora látható.

    Természetesen a viselkedés egy kicsit függhet a konkrét adathalmaztól, és a konkrét vezérlőtől.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd