[ prginfo @ 14.03.2009. 10:51 ] @
| Koristim D2007 i FB bazu.
Da li postoji mogucnost da se prilikom pokretanja maske iscita struktura neke tabele iz baze i na osnovu toga da se odredjuju odredjena svojstva objekata.
NPR. Ako je u tabeli polje NOT NULL, da TDBEdit koji je vezan za to polje ima sledece svojstvo DBEdit1.Color:=clRed;
Ako postoji mogucnost, kako to da uradim i da li postoje neke restrikcije.
Hvala. |
[ captPicard @ 14.03.2009. 12:15 ] @
Naravno :-)
select r.rdb$field_name,
t.rdb$type_name,
f.rdb$field_length,
r.rdb$null_flag,
f.rdb$validation_source
from rdb$relation_fields r, rdb$types t, rdb$fields f
where r.rdb$relation_name='EMPLOYEE' and
f.rdb$field_name=r.rdb$field_source and
t.rdb$field_name='RDB$FIELD_TYPE' and
f.rdb$field_type=t.rdb$type;
if SQL.FieldByName('RDB$NULL_FLAG').IsNull then
DBEdit1.Color := clRed;
[ prginfo @ 14.03.2009. 12:24 ] @
A u koji deo koda ovo da stavim. Da li da postavim neku komponentu Query ili slicno. Kako da mi ovaj deo radi prilikom iscrtavanje maske (OnShow ili OnCreate npr.)?
Hvala
[ prginfo @ 14.03.2009. 12:29 ] @
I jos nesto. Kako da kazem sledece:
Izaberi sve Edite na nekom panelu, i za sve koji su u bazi NULL stavi color Red, pa onda else color White.
Verovatno nekom petljom
for I:=0 to Panel1.Edit - 1 do
begin
end;
Hvala jos jednom.
[ captPicard @ 15.03.2009. 17:54 ] @
Da, stavi jedan Query na formu i stavi mu taj upit.
A za sve edite u panelu napravi ovako nešto:
iz querya izvuci pomoću onog upita sve nazive polja koja imaju null vrijednost (stavi u where dio uvjet da je null) i onda ovako nekako:
query.First;
while not query.eof do
begin
for i := 0 to ComponentCount - 1 do
begin
if Components*i* is TDBEdit then
begin
if TDBEdit(Components*i*).DataField = FieldByName('Naziv_polja').AsString then
TDBEdit(Components*i*).Color := clRed else
TDBEdit(Components*i*).Color := clWhite;
end;
end;
Next;
end;
Može i "pametnije", ali i ovako će ti biti ok :-)
Nadam se da si skužio, ako ne, viči :-)
p.s. kada sam objavio post, vidim da mi ne prikazuje uglate zagrade, ali mislim da ćeš skužiti di dođu (staviti ću *)... :-)
[ prginfo @ 16.03.2009. 09:19 ] @
Napravi mi break na delu
FieldByName
greska je undeclared identifier.
U SQL-u sam naravno promenio ime baze sa EMPLOYEE na MOJABAZA, kako se i zove baza na kojoj ovo isprobavam.
F1
[ captPicard @ 16.03.2009. 09:36 ] @
Query.FieldByName('POLJE').AsString;
Mislio sam da ćeš znati da treba Query prije :-)
[ prginfo @ 16.03.2009. 09:48 ] @
Izvini, moja greska. Ubacio sam i sada mi kompajlira i pokrece normalno, samo sto se nista ne desava, tj. da bih isprobao, stavio sam sve TDBEdite u sivu boju.
Kada pokrenem program, ostaje mi siva boja.
?
[ captPicard @ 16.03.2009. 11:09 ] @
Napiši ovdje kod.
I tamo di je NExt isto napiši Query.Next
[ prginfo @ 16.03.2009. 11:43 ] @
Hvala jos jednom, ali i dalje se nista ne menja.
Stavio sam:
if TDBEdit (Components).DataField = qBOJAPOLJA.FieldByName('RDB$NULL_FLAG').IsNull then
TDBEdit(Components).Color := clRed else
TDBEdit(Components).Color := clWhite;
Javlja mi Incompatible types 'WideString' and 'Boolean'
Probao sa da dodam i =True iza .IsNull ali i dalje prijavljuje gresku.
?
[ captPicard @ 16.03.2009. 11:53 ] @
Ma krivo si napravio. U select query-a stavi samo select r.rdb$field_name
a u where dio dodaj where r.rdb$null_flag is null
kužiš?
tebaš izvaditi NAZIVE POLJA di je null_flag
i onda u petlju stavi
:= Query.FieldByName('NAZIV_POLJA').AsString
[ prginfo @ 16.03.2009. 12:23 ] @
Ja sam kod queryja u SQL stavio sledece:
Code:
select r.rdb$field_name,
t.rdb$type_name,
f.rdb$field_length,
r.rdb$null_flag,
f.rdb$validation_source
from rdb$relation_fields r, rdb$types t, rdb$fields f
where r.rdb$relation_name='MOJA BAZA' and
f.rdb$field_name=r.rdb$field_source and
t.rdb$field_name='RDB$FIELD_TYPE' and
f.rdb$field_type=t.rdb$type;
a onda OnFormShow sledece:
var
i:Integer;
begin
qBOJAPOLJA.Close;
qBOJAPOLJA.Prepare;
qBOJAPOLJA.Open;
while not qBOJAPOLJA.Eof do
begin
for i := 0 to ComponentCount - 1 do
begin
if Components[i] is TDBEdit then
begin
if TDBEdit (Components[i]).DataField = qBOJAPOLJA.FieldByName('NAZIV_POLJA').IsNull then
TDBEdit(Components[i]).Color := clRed else
TDBEdit(Components[i]).Color := clWhite;
end;
end;
qBOJAPOLJA.Next;
end;
Da li u where deo da dodam i
r.rdb$null_flag=NULL
?
EDIT - savkic: Koristi code tagove za ispisivanje koda, lakše je pratiti.
[Ovu poruku je menjao savkic dana 16.03.2009. u 13:49 GMT+1]
[ captPicard @ 16.03.2009. 12:39 ] @
Skoro pa ti je ok :-)
da, u where dio sql upita dodaj where r.rdb$null_flag IS NULL
i pazi, u petlji promijeni ovo:
qBOJAPOLJA.FieldByName('NAZIV_POLJA').IsNull then
u ovo:
qBOJAPOLJA.FieldByName('NAZIV_POLJA').AsString then
Moraš paziti kako radiš provjere, jer u izrazu
if TDBEdit (Components).DataField = qBOJAPOLJA.FieldByName('NAZIV_POLJA').IsNull then
moraš za .DataField dati naziv polja, a ti mu tu stavljaš .IsNull.
Ispravi to i moralo bi raditi.
Ako ne, javi.
[ rambo @ 16.03.2009. 12:53 ] @
Svo vreme grešiš kod dela koda koji prolazi kroz tvoje komponente na formi.
Zameni deo koda
Code:
if Components is TDBEdit then
sa
Code:
if Components[i] is TDBEdit then
i posle toga svugde gde ti se pominje Components zameni sa Components[ i ].
Inače, metod koji ti je izložio captPicard je jedan od više mogućih i nije baš najsrećnije rešenje. Moja preporuka ti je da iskoristiš ugrađene osobine DataSeta i Field objekata u njemu da bi postigao isti efekat na predviđeni način.
P.S.: Trudi se da programski kod stavljaš pod code tagove (imaš sa leve strane) radi boljeg formatiranja.
[Edit] Uh, sad videh da se ove uglaste zagrade nisu videle zbog toga što ti kod nije bio u code tagovima.
[ captPicard @ 16.03.2009. 13:06 ] @
Znam da je to samo jedno od rješenja, ali rekao sam mu da ima i "pametnijih" :-)
Hvala za savjet, nisam vidio ovo sa lijeve strane :-)
[ prginfo @ 16.03.2009. 14:02 ] @
Problem mi je izgleda sledeci:
select r.rdb$field_name,
t.rdb$type_name,
f.rdb$field_length,
r.rdb$null_flag,
f.rdb$validation_source
from rdb$relation_fields r, rdb$types t, rdb$fields f
where r.rdb$relation_name='MOJA_BAZA' and
f.rdb$field_name=r.rdb$field_source and
t.rdb$field_name='RDB$FIELD_TYPE' and
r.rdb$null_flag is NULL and
f.rdb$field_type=t.rdb$type;
mi ne vraca ni jedan rezultat.
?
[ captPicard @ 16.03.2009. 14:21 ] @
Probaj napraviti ovako:
where r.rdb$relation_name='NAZIV_TABLICE' and
i
r.rdb$null_flag = 1 and
[ prginfo @ 16.03.2009. 14:41 ] @
To sam isprobao sam pre nego sto sam video post i SQL mi vraca rezultate, ali sada imam problem da mi ne vidi koja polja su null (tj. =1), vec mi sva polja oboji u belo.
Da li moram nekako posebno da definisem nazive TDBEdit polja ili je nesto drugo posredi?
[ captPicard @ 16.03.2009. 14:56 ] @
select r.rdb$field_name naziv_polja,
t.rdb$type_name,
f.rdb$field_length,
r.rdb$null_flag,
f.rdb$validation_source
Si promjenio ovo
if TDBEdit (Components).DataField = qBOJAPOLJA.FieldByName('NAZIV_POLJA').IsNull
u
if TDBEdit (Components).DataField = qBOJAPOLJA.FieldByName('naziv_polja').AsString
[ prginfo @ 16.03.2009. 15:01 ] @
Napravio sam izmenu. U SQL editoru mi lepo vraca vrednosti. Problem je da te vrednosti upari sa delo IF NAZIV...
Tako da mi sva polja i dalje boji u belo.
?
[ captPicard @ 16.03.2009. 16:45 ] @
Evo, napravi točno kako sam ti napisao:
Code:
procedure TFTest.Button1Click(Sender: TObject);
var
i: integer;
begin
Test.Open;
with Boja do
begin
Close;
SelectSQL.Text := 'select r.rdb$field_name NAZIV_POLJA, ' +
't.rdb$type_name, ' +
'f.rdb$field_length, ' +
'r.rdb$null_flag, ' +
'f.rdb$validation_source ' +
'from rdb$relation_fields r, rdb$types t, rdb$fields f ' +
'where r.rdb$relation_name=''KUMULATIV'' and ' +
'f.rdb$field_name=r.rdb$field_source and ' +
't.rdb$field_name=''RDB$FIELD_TYPE'' and ' +
'r.rdb$null_flag = 1 and ' +
'f.rdb$field_type=t.rdb$type ';
Open;
First;
end;
while not Boja.eof do
begin
for i := 0 to ComponentCount - 1 do
begin
if Components[i] is TDBEdit then
begin
if (Components[i] as TDBEdit).DataField = Trim(Boja.FieldByName('NAZIV_POLJA').AsString) then
(Components[i] as TDBEdit).Color := clRed;
end;
end;
Boja.Next;
end;
end;
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|