Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Pomoc oko DBGrid-a

[es] :: Pascal / Delphi / Kylix :: Pomoc oko DBGrid-a

Strane: 1 2

[ Pregleda: 6831 | Odgovora: 25 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

reiser

Član broj: 7895
Poruke: 2314



+102 Profil

icon Pomoc oko DBGrid-a22.01.2005. u 13:28 - pre 233 meseci
Imam nekoliko pitanja oko DBGrid-a i baza uopste, napisite ovde kako vi to radite plz.
Korisnik treba da unosi podatke u jedan DBGrid i da se posle ti podaci snime u bazu.

- Prva kolona u DBGrid-u treba da bude redni broj unosa, tj. treba da se povecava od 1 pa nadalje, zavisi koliko ima unosa. Kako ovo napraviti ?
- U drugoj koloni korisnik treba da ima jedan combobox koji ce sadrzati imena svih artikala recimo. Artikli se cuvaju u posebnoj bazi. Btw, ako artikal ne postoji u bazi, korisnik ce samo ukucati novi naziv u combobox i artikal ce se automatski dodati u bazu, tako da ce prilikom sledeceg unosa postojati u combobox-u. Kako ovo napraviti (tj. kako ucitati artikle iz artikli.db baze u combobox koji se nalazi u dbgrid-u koji je povezan sa bazom baza1.db recimo) ?

Hvala i poz
 
Odgovor na temu

matory
Blazin Srdjan

Član broj: 44660
Poruke: 43
*.stcable.co.yu.



Profil

icon Re: Pomoc oko DBGrid-a23.01.2005. u 02:53 - pre 233 meseci

Mozes postaviti ovakav dogadjaj na samu tablu:
Object Inspector-Events-AfterInsert.


procedure TForm1.Table1AfterInsert(DataSet: TDataSet);
begin
Table1.FieldByName('RedniBrojKnjizenja').AsInteger:=Table1.RecordCount+1;
end;


Ovo bi treebalo da radi, probaj.

Sto se tice boksova u samom gridu negde na ovom forumu sam procitao da je to neko vec uradio. Pregledaj ga malo. U svakom slucaju komponente DBLookUp ti omogucuju citanje iz jedne i upis u drugu tabelu.
 
Odgovor na temu

sasas
Saša Slavnić
radim za neke švabe

Član broj: 35478
Poruke: 617
*.zaslon-telecom.si.



Profil

icon Re: Pomoc oko DBGrid-a24.01.2005. u 09:05 - pre 233 meseci
Citat:
matory: Mozes postaviti ovakav dogadjaj na samu tablu:
Object Inspector-Events-AfterInsert.


procedure TForm1.Table1AfterInsert(DataSet: TDataSet);
begin
Table1.FieldByName('RedniBrojKnjizenja').AsInteger:=Table1.RecordCount+1;
end;


Ovo bi treebalo da radi, probaj.


Ovo ovako napisano je loshe - sta ako obrises 1 rekord? Brojevi ce se duplirati. Ako nije bas neophodno brojanje od 1...x koristi AutoNumber polja u bazi. Em sto nema dodatnog kooda, em sto su brojevi garantovano jedinstveni.

Za ovo lookup, mozes pogledati PickList property kolone u DBGridu. A ako koristis JVCL mozes uzeti komponentu UltimDBGrid, koja za svako polje u Gridu moze imati poseban editor (npr. lookup combo box) pa ces tako bez ijedne linije kooda postici to sto zelis.

ss.
When something is hard to do, then it's not worth doing.
 
Odgovor na temu

matory
Blazin Srdjan

Član broj: 44660
Poruke: 43
*.stcable.co.yu.



Profil

icon Re: Pomoc oko DBGrid-a24.01.2005. u 16:02 - pre 233 meseci
Citat:
sasas: Ovo ovako napisano je loshe - sta ako obrises 1 rekord? Brojevi ce se duplirati. Ako nije bas neophodno brojanje od 1...x


E pa neophodno je. Posto u knjigovodstvu nema brisanja sloga. U zakonu stoji da je dozvoljeno storniranje ali ne i brisanje nekog zapisa.

Tacno, ako neko obrise neki slog, pri novom unosu desice se KEY VIOLATION i program necedalje raditi. Vrati obrisani slog i program ce raditi.

Zamisli neko poslovanje sa oko 3000 faktura godisnje i neko obrise bilo koju fakturu, a tvoja baza sa AutoNumber poljima sve to preslozi napravi nove kljuceve i radi, a na toj fakturi je satjala vrednost recimo od par stotina hiljada dinara ??? Robija brate.
 
Odgovor na temu

sasas
Saša Slavnić
radim za neke švabe

Član broj: 35478
Poruke: 617
*.zaslon-telecom.si.



Profil

icon Re: Pomoc oko DBGrid-a25.01.2005. u 09:19 - pre 233 meseci
Citat:

Tacno, ako neko obrise neki slog, pri novom unosu desice se KEY VIOLATION i program necedalje raditi. Vrati obrisani slog i program ce raditi.


Jel ima neko bolje resenje od ovoga? Meni se pre nekog vremena javila takva potreba za takvim brojanjem recorda, i nisam smislio pametno resenje.

ss.
When something is hard to do, then it's not worth doing.
 
Odgovor na temu

_v!rus_
BGD

Član broj: 40451
Poruke: 313
*.verat.net.



+1 Profil

icon Re: Pomoc oko DBGrid-a26.01.2005. u 01:44 - pre 233 meseci
Evo dva moguca resenja
1. Globalna promenljva koja cuva broj poslednjeg unetog sloga i OnNewRecord upisuje broj u odgovarajuce polje(nema dupliranja ali mogu se pojavirti rupe posle brisanja recorda - 1 2 4 6 8 9 10) RecNum je zeznut jer ne reaguje na filtere;

2. procedura Renumber koja ce prenumerisati stavke od prve do zadnje posle svakog novog recorda ili brisanja tako sto pre numeracije pamti RecNo trenutnog, prenumerise, i opet postavi aktivnim zapamceni record (sigurno nema rupa, ali mali overhead sa vecim brojem recorda).

U stvari moze kombinacija ova dva, prvi posle unosa, drugi posle brisanja.

Koliko sam ja shvatio ovde su u pitanju redni brojevi stavki faktura, a ne brojevi samih faktura tako da nema problema sa robijom, ne narusavaju se same fakture, moze da samo lezi za utaju jedne stavke :)

I ko kaze da su redni brojevi artikala Keyed? Jedino ako se svaka faktura pamti u svojoj tabeli, generalno takve stvari se rade sa 2 tabele - 1. tabela svih faktura sa brojem, datumom, kupcem, ukuonim iznosom, itd., i 2. tabela sa svim stavkama svake fakture gde je prvo polje broj fakture, a drugo redni br. stavke, trece sifra artikla (npr.), itd... Kad se otvara faktura iz tabele faktura se cita broj, datum itd., a na tabelu stavki se postavlja filter (npr. [BrojFakture = '001/2005']).

Ako je i potreban Key onda bi to bio neki jedinstveni broj nevezan za broj fakture ili rbr. stavke.
 
Odgovor na temu

reiser

Član broj: 7895
Poruke: 2314



+102 Profil

icon Re: Pomoc oko DBGrid-a26.01.2005. u 06:34 - pre 233 meseci
Hvala momci, samo nastavite ako imate jos nesto da dodate
Jos jedno pitanje - imam u bazi artikli.db polje 'JedMere', i ono je tipa Integer. U drugoj bazi se skladisti naziv Jedinice Mere i svaka ima svoj redni broj. Kako da, ako mi se u artikli.db nalazi recimo 'JedMere' = 4, kako da iscitam naziv iz druge baze sa rednim brojem 4 ?
 
Odgovor na temu

sasas
Saša Slavnić
radim za neke švabe

Član broj: 35478
Poruke: 617
*.zaslon-telecom.si.



Profil

icon Re: Pomoc oko DBGrid-a26.01.2005. u 08:01 - pre 233 meseci
Imas par mogucnosti za to:

1. Ako koristis query objekat za pristup podacima mozes da uradis inner join.

2. Mozes da hendlujes evente OnGetText i OnSetText za polje JedMere

3. Mozes da napravis novo lookup polje u tabeli/upitu - ovo ti je najjednostavnije, nema dodatnog kooda, i performanse su sasvim pristojne.

ako ti treba neka konkretnija pomoc oko ovoga, reci.

ss.
When something is hard to do, then it's not worth doing.
 
Odgovor na temu

Riste Pejov
Team Leader/Senior Software Developer @
Ein-Sof ltd Skopje
Skopje, Macedonia

Član broj: 128
Poruke: 571
217.16.77.*

Jabber: richie@bagra.net.mk
ICQ: 154236769
Sajt: riste.softver.org.mk


Profil

icon Re: Pomoc oko DBGrid-a26.01.2005. u 08:53 - pre 233 meseci
Ako neko zeli apsolutno uzastopne vrednosti, onda kao prvo treba zabraniti brisanje slogova u toj tabeli, samo postavis jedno polje status koje kaze jeli slog validan ili ne. Kao drugo broj fakture ne mora biti PK, vec PK moze biti autonum a da se broj faktura presmeta drugacije. Posto paradox (koliko se ja secam) moze da radi sa pessimistic locking i kada jedan user zakljuca tabelu onda moze ladno da uradi:

SELECT MAX(FACT_NO) FROM TABLE;
INSERT INTO TABLE VALUES (max_val+1, bla, bla);

Kada imas pessimistic locking u PDX onda nista te ne sprecava da imas uzastopne vrednosti.

Ali ako se radi o fakturama i sl, ja to ne bi radio na paradox-u. PDX sam ostavio davne 1998 jer je pucao kao lud sa vise od 300K slogova, a da ne govorim sta se moze desiti paradoxu kad nestane struju ili neko izcupa power cable. Sreca sto se radilo o nekim glupim podacima i da su ljudi cuvali bekap.


People who think they know everything tend to irritate those of us who do.
 
Odgovor na temu

_v!rus_
BGD

Član broj: 40451
Poruke: 313
*.verat.net.



+1 Profil

icon Re: Pomoc oko DBGrid-a26.01.2005. u 11:07 - pre 233 meseci
Citat:
Marko Paunovic: Hvala momci, samo nastavite ako imate jos nesto da dodate
Jos jedno pitanje - imam u bazi artikli.db polje 'JedMere', i ono je tipa Integer. U drugoj bazi se skladisti naziv Jedinice Mere i svaka ima svoj redni broj. Kako da, ako mi se u artikli.db nalazi recimo 'JedMere' = 4, kako da iscitam naziv iz druge baze sa rednim brojem 4 ?


Mislim da bi (ako koristis lookup polja) trebalo da postavis ref. integrity izmedju JedinicaMere i Artikala(pod uslovom da u tabeli artikala imas string polje [JM], a tabela JediniceMere da ima polja RBr i JM): postavis primary key na tabelu [JediniceMere] na polje Rbr, i onda dodas da ti je
[Artikli->JM = JediniceMere->JM]
Postavku radis u DatabaseDesktopu ili sl. Kao UpdateRule izaberes Cascade (sve promene na tebeli JediniceMere automatski menjaju odgovarajuce recorde u tabeli Artikli) ili Prohibit (zabrana izmene tabele JediniceMere ukoliko se recordi za izmenu "koriste" u nekim stavkama tabele Artikli). Prednost ref. integrity-a je sto ti ne treba nikakav dodatni kod (sve BDE radi pod haubom).
Pazi ako koristis Cascade da zabranis brisanje iz tabele JM jer brisanje jedinice mere ce obrisati sve referencirane recorde u tabeli Artikli, ali zato svaka izmena ce se odraziti na iste (Npr. prepravis 'komad' u 'KOMAD' i automatski si izmenio sve ref. artikle). Jos mozes i na tabelu artikala da postavis PrimaryKey na polje sifra pa onda isto lookup + ref.integr. primenis na fakture...
 
Odgovor na temu

matory
Blazin Srdjan

Član broj: 44660
Poruke: 43
*.stcable.co.yu.



Profil

icon Re: Pomoc oko DBGrid-a26.01.2005. u 16:23 - pre 233 meseci
Citat:
Riste Pejov
Ali ako se radi o fakturama i sl, ja to ne bi radio na paradox-u. PDX sam ostavio davne 1998 jer je pucao kao lud sa vise od 300K slogova, a da ne govorim sta se moze desiti paradoxu kad nestane struju ili neko izcupa power cable. Sreca sto se radilo o nekim glupim podacima i da su ljudi cuvali bekap.


Moj PDX ima 3000 pacijenata (glavna tabla) 11000 izvestaja (detaljna tabla), 17000 i vise dijagnoza itd itd i sve radi vec dve godine kako treba. Jedino sto nisam koristio DBTable (delphi 6) nego MBTable. Problem je bio sto je DBTabla pamtila u memoriji do gasenja programa, a ako bi u tom trenutku racunar iz nekog razloga bio prisilno iskljucen knjizenja bi bila bespovratno izgubljena. MBTabla je upisivala stavarno u bazu: MBTable.Post;

Ova komponenta je izvedena:
unit MBTable;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Db, DBTables, dbiProcs;
type
TMBTable = class(TTable)
private
{ Private declarations }
protected
{ Protected declarations }
procedure DoAfterPost; override;
public
{ Public declarations }
published
{ Published declarations }
end;
procedure Register;
implementation
Procedure TMBTable.DoAfterPost;
begin
inherited DoAfterPost;
dbiSaveChanges(Self.Handle);
end;
procedure Register;
begin
RegisterComponents('CSA', [TMBTable]);
end;
end.
Gde se uopste postavlja polju da bude AutoNum???
 
Odgovor na temu

_v!rus_
BGD

Član broj: 40451
Poruke: 313
*.verat.net.



+1 Profil

icon Re: Pomoc oko DBGrid-a26.01.2005. u 19:29 - pre 233 meseci
@matory:
1.Nije tacno da pdx ne upisuje u tabelu stvarne podatke, samo treba da stavis TTable.Active := False ili TTable.Close. Trebalo mi je 2 godine da to provalim... ;-).
Ta izvedena komponenta MBTable je u stvari cracker, komponenta koja sluzi samo da bi se pristupilo zasticenom metodu dbiSaveChanges koji je dostupan samo descendatima klase TTable. dbiSaveChanges se standardno u TTable-u poziva pri zatvaranju tabele (TTable.Close).
A i kada bi posle SVAKOG post-a tabela praznila kes, bilo koja jaca operacija na malo vecoj bazi bi trajala vekovima. Nego gledam malo postove to db temama, izgleda da cu da batalim pdx kompletno i da se prebacim na Firebird... ;-)

2. Autonum se u stvari zove autoincrement (bar u pdx-u). Postavlje se u DatabaseDesktopu prilikom design-a tabele.
 
Odgovor na temu

matory
Blazin Srdjan

Član broj: 44660
Poruke: 43
*.stcable.co.yu.



Profil

icon Re: Pomoc oko DBGrid-a27.01.2005. u 17:53 - pre 233 meseci
OK!
Citat:
_v!rus_:Nego gledam malo postove to db temama, izgleda da cu da batalim pdx kompletno i da se prebacim na Firebird... ;-)

Slazem se sa tobom. Vrati se ponekad na PARADOX da pomognes nas obicne smrtnike.

Moze to sa DBTablama ali me nervira sto svaki put pre upisa treba da je aktiviras pa da je zatvoris da bi ona stvarno nesto upislala. Nisu bas uvek jednostavni upisi. Cesto sam morao nesto da upisujem u toku rada programa (Znaci ne ono samo ukucaj u DBGrid i potvrdi). Ovu komponentu mi je neko preporucio bas sa ovog Foruma, i do sada je sve radilo OK.


 
Odgovor na temu

reiser

Član broj: 7895
Poruke: 2314



+102 Profil

icon Re: Pomoc oko DBGrid-a28.01.2005. u 17:38 - pre 233 meseci
Da ne otvaram novu temu, jedno brzo pitanjce :

Kako da sortiram pomocu SQL-a neke podatke iz baze, ali da je case-insensitive ?
SELECT blabla ORDER BY Name... i sta ovde ide ?
 
Odgovor na temu

reiser

Član broj: 7895
Poruke: 2314



+102 Profil

icon Re: Pomoc oko DBGrid-a29.01.2005. u 00:47 - pre 233 meseci
@sasas
Kazes da UltimDBGrid ima mogucnost dodavanja lookupcombobox-a za bilo koje polje u gridu... Ali kako, ne vidim nista specificno osim PickList property-a ?
 
Odgovor na temu

sasas
Saša Slavnić
radim za neke švabe

Član broj: 35478
Poruke: 617
195.246.3.*



Profil

icon Re: Pomoc oko DBGrid-a29.01.2005. u 10:13 - pre 233 meseci
Ima property 'Edit controls' gde za svaku kolonu biras kontrolu koja ce biti editor.

Ili jos bolje, pogledaj primer u <JVCL root>\examples\JvUltimDBGrid\ADO, u kom imas to i jos nekih zanimljivih featurea.

Mada, nisam siguran koliko je pametno dozvoliti korisnicima da kuckaju po gridu. Mislim da je pametnije praviti posebne forme (sa edit-ima, combobox-ovima...) koje ce ti sluziti za unos i edtovanje, a eventualno grid koristiti za pregled. Komplikovan je za korisnike unos u grid.

ss.
When something is hard to do, then it's not worth doing.
 
Odgovor na temu

reiser

Član broj: 7895
Poruke: 2314



+102 Profil

icon Re: Pomoc oko DBGrid-a29.01.2005. u 12:33 - pre 233 meseci
Hvala, sad cu da probam

Citat:
Kako da sortiram pomocu SQL-a neke podatke iz baze, ali da je case-insensitive ?
SELECT blabla ORDER BY Name... i sta ovde ide ?
 
Odgovor na temu

reiser

Član broj: 7895
Poruke: 2314



+102 Profil

icon Re: Pomoc oko DBGrid-a29.01.2005. u 18:13 - pre 233 meseci
OK, DBSearchComboBox radi perfektno.
Samo... kad ja unesem neki text u njega i predjem u sledecu kolonu, kako da napravim da mi se text iz combobox-a prenese u njemu odgovarajuce polje u dbgrid-u i da se posle toga sa ostalim unosima postuje u bazu ? Mislim, nesto ne stima, kad predjem u novi red, onaj unos iz combobox-a se izgubi....
Poslacu primer ako hocete

Hvala unapred
 
Odgovor na temu

sasas
Saša Slavnić
radim za neke švabe

Član broj: 35478
Poruke: 617
195.246.3.*



Profil

icon Re: Pomoc oko DBGrid-a29.01.2005. u 18:53 - pre 233 meseci
Citat:
OK, DBSearchComboBox radi perfektno.


Zar tu ne bi trebao ici koliko te ja razumem DBLookupComboBox?

Inace, upisace se 'samo od sebe' :) Samo treba da postavis DataSource i DataField DBLookupComboBox-a na odgovarajuce vrednosti.

ss.
When something is hard to do, then it's not worth doing.
 
Odgovor na temu

reiser

Član broj: 7895
Poruke: 2314



+102 Profil

icon Re: Pomoc oko DBGrid-a30.01.2005. u 00:20 - pre 233 meseci
DBLookupComboBox mi ne odgovara nikako... :(
Zato sto ne mogu da u njemu ukucam neki proizvoljan string vec mogu samo da izaberem iz vec postojece liste....
DBSearchComboBox radi super, medjutim nema DataSource i DataField property-e...
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Pomoc oko DBGrid-a

Strane: 1 2

[ Pregleda: 6831 | Odgovora: 25 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.