[ vortex77 @ 27.09.2007. 12:46 ] @
Kako da dinamicki menjam TDataSoure ?

Ideja je da se omoguci unos "proizvoljnih" stringova, koji bi kasnije posluzili za kreiranje i setovanje Query-ja (DBEdit polja) u runtime-u.

Tacnije... imam program koji treba da formira izvestaje vezane za DB i tom prilikom da omoguci korisniku da sam izabere koje polje hoce da prikaze na izvestaju (nesto izmedju worda i DB-a). Pre samog formiranja izvestaja kreira se .ini fajl u kome se setuju sve tabele i njihova polja, dostupna korisniku. Posto kreirani izvestaji, kasnije, treba da se povezu sa konkretnim programom potrebno je navesti i TDataSource za svako polje (sto se takodje postavlja prilikom podesavanja .ini-a).

Znaci, nakon kreiranja u ini fajlu se nalazi spisak tabela, polja i njihovih datasource-va. Ucitavanje u program je putem stringova, sto i jeste problem jer mi Delphi stalno prijavljuje gresku (normalno...) "Incopatibile types TDataSource and String".

Jasno mi je zasto se ova gresaka javlja, ali nikako ne mogu da pronadjem nacin da ovaj problem resim!?

[ priki @ 27.09.2007. 12:58 ] @
heh, ne može to tako jednostavno kao što ti misliš
mogao bi recimo preko record-a

taj record da ima neki član otprilike:
tds: TdataSource
pa onda pointer na taj record, recimo:

Code:

type TMyRecord
  tds: TDataSource
end
PMyRecord=^TMyRecord


onda neku, recimo TStringList-u u koju ćeš učitati sva
tvoja imena tabela i za svako ime tabele u TStringList-i
kreirati instancu TDataSourc-a,
znači jedna tabela, jedna instanca TDataSourc-a

sve to možeš uraditi kroz petlju i sa TStringList.AddObject()

pozdrav

[ savkic @ 27.09.2007. 15:24 ] @
> Tacnije... imam program koji treba da formira izvestaje vezane za DB i tom prilikom da omoguci korisniku da sam izabere koje polje hoce da
> prikaze na izvestaju (nesto izmedju worda i DB-a). Pre samog formiranja izvestaja kreira se .ini fajl u kome se setuju sve tabele i njihova
> polja, dostupna korisniku. Posto kreirani izvestaji, kasnije, treba da se povezu sa konkretnim programom potrebno je navesti i TDataSource za
> svako polje (sto se takodje postavlja prilikom podesavanja .ini-a).

Ako se svi DS nalaze u jednom DataModulu, onda, Field.DataSource := TDataSource(DataModule.FindComponent(NazivDSKomponente));
[ cepak @ 04.10.2007. 23:28 ] @
Uopste nemas potrebu, ako sam te dobro razumeo, da menjas TDataSource. Tebi je TDataSource uvek vezan na konkretan, recimo query, gde dinamicki menjas sql, ili je vezan na neku tabelu gde menjas naziv tabele i polja koja ucitavas, a nemoras uopste da kreiras novu instance komponente.