"konj" wrote:
Citat:
da, ali u tom slucaju cu imati samo jedan dataset i sve ce biti nakaceno
na njega, pa kad se promeni sve ce da se promeni, sto nije pozeljno. a
kad skinem dataset nestaju podaci, tako da mogu imam podatke samo na
jednom mestu, a sta ako mi treba na dva ili nedaj boze 10. ipak imam 50
tabela. trebace mi vise u isto vreme.
Pa nemas nek odrugo resenje, osim eventualno da koristis TSimpleDataSet
(mislim da se tako zove), on ima u sebi i TProvider i TClientDataSet, pa
ces imati manje komponenti.
Ili da nadjes neke "native" komponente za MySQL.
Ja bi nan tvom mestu ipak bazu prebacio u FireBird, i koristio FIBPlus
koje su fantasticne!
Citat:
i drugo
imam tabelu posao i svaki posao i podposao. svaki posao ima nekoliko
podposlova. Koju komponentu da uzmem da mi izlista poslove, pa da ja
kliknem na neki i da ona u drugoj istoj takvoj komponenti izlista
podposlove. pokusao sam sa DBListBox. i ima da izberem datase i koje
polje ocu ali jednostavno ne izbacuje nista. Nemogu da provalim kako se
koristi. ako neko zna da koristi ili neko drugo resenje bicu vecno zahvalan
Napravis proceduru koja puni TComboBox sa rezultatima nekog querija, i
onda na onClick odnekud izvuces sifru za Combo.ItemIndex i sa tom sifrom
(PK) pokrenes drugi upit...
Ja sam napravio varijantu da PK cuva u Items.Object, pa to izgleda ovako:
type
TSifra = class
// clasa koja se kaci za stavku u cboxu
sifra : array[1..3] of string; // moze da ima 3 sifre
end;
procedure PopuniCombo(ACBox: TObject; ASql: string; q1: TpFIBQuery;
AFDesc, AFSif: string;
Asif2: string=&quot;&quot;; ASif3: string=&quot;&quot;; SveNaziv: string=&quot;<SVE>&quot;;
DoOnChange: boolean=true);
var sif :TSifra;
ACB: TComboBox;
// ako je SveNaziv=&quot;&quot; tada nema opcija SVI
begin
ACB:= TComboBox(ACBox); // tumacim prosledjeni objekat kao ComboBox
q1.close;
q1.SQL.Clear;
q1.SQL.Append(ASql);
q1.ExecQuery;
ACB.Clear; //sl_SifsTalas.Clear;
sif:=TSifra.Create; sif.sifra[1]:=&quot;%&quot;; sif.sifra[2]:=&quot;%&quot;;
sif.sifra[3]:=&quot;%&quot;;
if SveNaziv<>&quot;&quot; then
ACB.AddItem(SveNaziv, sif);
while not q1.Eof do
begin
sif:=TSifra.Create;
sif.sifra[1]:=q1.fieldbyname(AFSif).AsString;
if Asif2<>&quot;&quot; then
sif.sifra[2]:=q1.fieldbyname(Asif2).AsString
else
sif.sifra[2]:=&quot;&quot;;
if Asif3<>&quot;&quot; then
sif.sifra[3]:=q1.fieldbyname(Asif3).AsString
else
sif.sifra[3]:=&quot;&quot;;
ACB.AddItem(q1.fieldbyname(AFDesc).AsString, sif);
q1.Next;
end;
if ACB.Items.Count>0 then
begin
ACB.ItemIndex:=0;
if assigned(ACB.OnChange) and (DoOnChange) then
ACB.OnChange(ACB);
end;
//
q1.Close;
end;
procedure DopuniCombo(ACBox: TObject; AFDesc, AFSif: string; Asif2:
string=&quot;&quot;; ASif3: string=&quot;&quot;);
var sif :TSifra;
ACB : TComboBox;
begin
// ova procedura dodaje "rucno" satvku sa sifrom u ComboBox
ACB:= TComboBox(ACBox);
sif:=TSifra.Create;
sif.sifra[1]:=AFSif;
sif.sifra[2]:=ASif2;
sif.sifra[3]:=ASif3;
ACB.AddItem(AFDesc, sif);
end;
procedure BrisiComboObjekte(ACB: TObject);
var i: Integer;
begin
// oslobadjam objekte iz cboxa pri izlasku iz forme
for i:=0 to TComboBox(ACB).Items.Count-1 do
if assigned(TComboBox(ACB).Items.Objects
) then
TComboBox(ACB).Items.Objects.Free;
end;
function GetSifru (ACB: TObject; rb: integer=1): string;
begin
// vraca sifru iz objekta, koristis u CB.OnClick...
if rb>3 then exit; if rb<1 then exit;
result:=
TSifra(TComboBox(ACB).Items.Objects[TComboBox(ACB).ItemIndex]).sifra[rb];
end;
Nadam se da ces se snaci.
Pozdrav