[ Markanto @ 16.09.2008. 10:46 ] @
|
Imam 5 tabela i 5 ClientDataSet-ova.
Svaki ClientDataSet je vezan za pojedinu tabelu (podaci u dbGridu se prikazuju).
Sada kada napravim šesti ClientDataSet želim pomoću Query-a (ili kako to vec ide?)
dobiti u šestom dbGridu odnosno u šestom ClientDataSetu zapise iz svih 5 tabela pod
poljem sifra (Svaka tabela (od njih 5) ima polje -> sifra)!
Svaka kolona treba biti u odgovarajucem redu! Znaci da u ovom slučaju imam 5 redova!!
Odnosno kako u jednom clientDataSetu dobiti podatke iz 5. clientDataSetova (izvuci samo
po jedno polje (u mom slucaju sifru))? |
[ franjo_tahi @ 16.09.2008. 19:12 ] @
Jesi li probao:
select sifra from tablica1
union
select sifra from tablica2
union
select sifra from tablica 3
... i tako za svih 6
[ Markanto @ 17.09.2008. 07:16 ] @
Netreba mi union za svih 6, nego mi treba u šestom cds-u nalaziti se sve sifre iz preostalih cds-ova!
Probao sam, ali onda u ClientDataSetu (a on mi treba za napraviti report u Rave-u) dobijem
ovakve podatke:
U tablici1 imam: bis001, bis002, bis003, bis004.
U tablici2 imam: mor001, mor002.
U tablici3 imam: dij001.
tablica1 tablica2 tablica3
bis001 mor001 dij001
bis002 mor002 dij001
bis003 mor002 dij001
bis004 mor002 dij001
Ovdje fale jos dvije tablice, ali ovo je dovoljan primjer!
Muce me ova ponavljanaja u tablica2 i tablica3.
Trebala bi pisati 0 (nula), a na ovaj nacin se ponavljaju podaci!
[ franjo_tahi @ 17.09.2008. 07:33 ] @
Možda nisam dobro razumio, ali ako imaš kako si napisao:
U tablici1 imam: bis001, bis002, bis003, bis004.
U tablici2 imam: mor001, mor002.
U tablici3 imam: dij001.
Onda bir rezulat bio:
bis001
bis002
bis003
bis004
mor001
mor002
dij001
bez ponavljanja... ako se u samoj tablici ista šifra ponavlja nekoliko puta:
select distinct sifra from tablica
pošalji svoj sql
[ Markanto @ 17.09.2008. 08:39 ] @
Hvala na brzim odgovorima.
Ne razumijemo se bas najbolje, ali napredujemo! Hvala jos jednom
Da malo pojasnim svoj problem!
Imam 5 tabela (u IBExpert-u)! U svakoj od njih imam polje sifra!
Sada bi trebao napraviti neki report koji to lijepo sve printa!
Radim to pomocu Rave-a!
Da bi to napravio treba jedan clientDataSet koji u sebi sadrzi
sifre iz svih tablica (svaka tablica ima polje sifra)!
Bitan dio je to da nebudu sve sifre u jednom redu nego da se svaka
sifra nalazi u odgovarajucem redu.
select morcicistanje.sifra as morcici from morcicistanje
union
select dijamntninakitstanje.sifra as dijamantni from dijamntninakitstanje
pomocu ovoga sql-a dobio sam dio rijesenja, ali tu dolazi do problema, a to je
da se sve nalazi u jednoj koloni, a ja hocu da se zapisi nalaze u odgovarajucoj koloni.
Znaci, sifre morcica u morcicima, sifre dijamanata u dijamantniama!
Kako doci do toga??
Kako bi ti to dobio u gridu??? Eto, da malo olaksam!!
Jel sam sada mozda sta olaksao???
[Ovu poruku je menjao Markanto dana 17.09.2008. u 09:50 GMT+1]
[Ovu poruku je menjao Markanto dana 17.09.2008. u 10:52 GMT+1]
[ savkic @ 17.09.2008. 14:03 ] @
> da se sve nalazi u jednoj koloni, a ja hocu da se zapisi nalaze u odgovarajucoj koloni.
> Znaci, sifre morcica u morcicima, sifre dijamanata u dijamantniama!
Ako dobro pratim, evo ti ideja kako se to može uraditi za nešto konkretnije treba više podataka:
SELECT
T1.SIFRA, T2.SIFRA...
FROM
TABELA1 T1
INNER JOIN TABELA2 T2
ON T2.POLJE = T1.POLJE
...
ili
SELECT (SELECT SIFRA FROM TABELA1 WHERE USLOV), (SELECT SIFRA FROM TABELA2 WHERE USLOV)...
[ franjo_tahi @ 17.09.2008. 20:01 ] @
ako su šifre vezane, join je ok, a ako nisu imaš dvije mogućnosti:
ako želiš dobiti šifru iz 1. tablice u 1-voj koloni, iz 2. u drugoj itd..
select tablica1.sifra as dijamatni, tablica2.sifra as morcici from tablica1, tablica2
ali... dobiješ
dijamanti morcici
---------------
1 1
1 2
1 3
2 1
2 2
itd.
ako napraviš:
select tablica1. sifra from tablica1
union
select tablica2.sifra from tablica2
dobiješ:
šifra
____
1
2
1
2
3
gdje su prvi 1,2 iz tablice1, a drugih 1,2,3 iz tablice2
[ Miloš Baić @ 18.09.2008. 07:17 ] @
@Markanto
Koliko sam te razumeo, tebi treba ovo:
Citat:
bis001 mor001 dij001
bis002 mor002
bis003 mor003
bis004
Ako koristiš Firebird ili neki drugi DBMS, moje predlog je da napraviš proceduru u bazi koja će za svaku tabelu, kad prođe kroz nju, napraviti brojač i numerisati slogove. Potom, te tri tabele spajaš po tim brojevima i dobiješ ono što si tražio. Naravno, prilikom numerisanja u proceduri napraviš ORDER BY kako ti odgovara.
Ukoliko sam potrefio ono što ti treba, gore citirano, moj predlog je da pitanje prebaciš na forum za Baze ili za Firebird, PostgreSQL, etc. (koji već koristiš), te kreneš i kad zapne tražiš pomoć.
Pozdrav.
[ Markanto @ 18.09.2008. 07:28 ] @
franjo_tahi, Savkić i Miloš Baić hvala Vam na odgovorima!
Probat cu sada da vidim sta je od toga korisno u mom slucaju!
Javim se sa rezultatima!
[ Markanto @ 18.09.2008. 07:42 ] @
SELECT (SELECT SIFRA FROM TABELA1 WHERE USLOV), (SELECT SIFRA FROM TABELA2 WHERE USLOV)...
Ovako nesto bi mi trebalo!!
Ali kako sa time zavrsiti (moze i sa ovim sql-om koji imamo gore)??
Kada ubacim ovo u IBExpert : SELECT (SELECT SIFRA FROM morcicimodel), (SELECT SIFRA FROM unikatninakitmodel)
javlja mi grešku:
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Unexpected end of command.
Kako zavrsiti ovo (end)??
[ franjo_tahi @ 18.09.2008. 10:21 ] @
to ti ne bude radilo...
kako kaže Baić, jedino rješenje je da napišeš store proceduru. Pogledaj po forumima, ima puno prijemjera. sada nemam vremena da ju pišem, ako do naveće ništa ne smisliš, probat čemo ju napisati.
[ savkic @ 18.09.2008. 14:41 ] @
> Ali kako sa time zavrsiti (moze i sa ovim sql-om koji imamo gore)??
> Kada ubacim ovo u IBExpert : SELECT (SELECT SIFRA FROM morcicimodel), (SELECT SIFRA FROM unikatninakitmodel)
U ovakvom kveriju subselecti moraju vratiti tačno jedan slog, zato moraš postaviti i dodatni uslov koji će to uraditi, taj dodatni uslov se uglanom vezuje za glavnu tabelu u SELECT upitu
SELECT
(SELECT FROM ... pomoćna tabela gde se uslov odnosi na neko polje iz glavne)
FROM
TABLELA -- ovo je glavna tabela
Pošalji koja polja su u igri u tim tabelama koje ti trebaju pa ćemo moći više da pomognemo.
[ franjo_tahi @ 18.09.2008. 14:42 ] @
evo ti porcedure za Firebird pa si prilagodi.
Vjerojatno bi se dalo napisati ljepše i bolje, ovako mi je bilo najbrže.
Pozivaš ju iz selecta: "SELECT * FROM PRIMJER"
vraća onoliko redaka koliko ima šifru u najvećoj tablici, ako nema podatka za manju tablicu - vraća null
meni se tablice zovu: KALKULACIJA i ARTILKI, a field-ovi: ID. Ti stavi svoje.
(Kad bih znao kako okačiti file uz poruku...)
SET TERM ^ ;
CREATE OR ALTER PROCEDURE PRIMJER
returns (
pod1 integer,
pod2 integer)
as
declare variable maxpod1 integer;
declare variable maxpod2 integer;
declare variable ppod1 integer;
declare variable ppod2 integer;
begin
PPOD1 = 0;
PPOD2 = 0;
select max(id) from kalkulacija into :MAXPOD1;
SELECT MAX(ID) FROM ARTIKLI INTO :MAXPOD2;
SELECT FIRST 1 ID FROM KALKULACIJA ORDER BY ID INTO :PPOD1;
SELECT FIRST 1 ID FROM ARTIKLI ORDER BY ID INTO :PPOD2;
WHILE ((PPOD1 IS NOT NULL) OR (PPOD2 IS NOT NULL)) do
begin
POD1 = PPOD1;
POD2 = PPOD2;
SUSPEND;
if (POD1 < MAXPOD1) then SELECT FIRST 1 ID FROM KALKULACIJA WHERE ID > :PPOD1 ORDER BY ID INTO :PPOD1; ELSE PPOD1 = NULL;
if (POD2 < MAXPOD2) then SELECT FIRST 1 ID FROM ARTIKLI WHERE ID > :PPOD2 ORDER BY ID INTO :PPOD2; ELSE PPOD2 = NULL;
END
/* Procedure Text */
end^
SET TERM ; ^
GRANT SELECT ON KALKULACIJA TO PROCEDURE PRIMJER;
GRANT SELECT ON ARTIKLI TO PROCEDURE PRIMJER;
GRANT EXECUTE ON PROCEDURE PRIMJER TO SYSDBA;
[ Markanto @ 18.09.2008. 15:25 ] @
Meni trebaju sifre iz morcicimodel i iz unikatninakitmodel tablice!
Ovo je odgovor na Savkicevo pitanje!
Znaci iz dvije tablice mi treabaju sifre u jednoj tablici!
U clientdatasetu (fields -> morcicisifre i unikatni_sifre ).
Trebam napuniti taj cds da bi podatke prikazao u dbGridu!!
Ovo mi treba samo radi Rave report-a!
[ Miloš Baić @ 18.09.2008. 16:40 ] @
@franjo_tahi
Ne bi bilo loše da središ poruku, npr. da kod procedure razdvojiš (izdvojiš kod) od teksta koji si pisao, bilo bi preglednije.
@Markanto
Za izveštaje, možeš koristiti procedure, nekad su stvarno moćna alatka da se reši problem. U suštini ih izbegavam, ali dešava se da rešavaju kompleksnije probleme. Napravi proceduru koja ti je data, pozovi je i dataset koji dobiješ prosledi RAVE - u. Rezultat ćeš dobiti kao da si otvorio neku baznu tabelu (master file).
[ savkic @ 18.09.2008. 17:07 ] @
> Meni trebaju sifre iz morcicimodel i iz unikatninakitmodel tablice!
> Ovo je odgovor na Savkicevo pitanje!
> Znaci iz dvije tablice mi treabaju sifre u jednoj tablici!
Opet nisi ništa rekao, pošalji kompletne definicije tih tabela (takozvani metadata) i objasni kako su te dve tabele vezane (šta im je zajedničko polje).
[ franjo_tahi @ 18.09.2008. 19:59 ] @
Kod nisam sredio, napisao sam proc. na brzaka, copy-paste, pa kako je ispalo.
1. Nazive tabela zamjeni sa svojim nazivima...
2. Naziv Fielda (ID) zamjeni svojim nazivom (sifra ili kako već)
3. Ako imaš više od 2 tabele, dodaj po istom principu kako je napravljeno za dvije
Ovo sam isprobao i radi, kod mene vraća;
POD1 POD2
--------------
1 0
2 1
3 2
7 3
8 <null>
9 <null>
....
što je istina. U tabeli KALKULACIA imam 50-tak zapisa, a u tabeli ATIKLI 4 (testna baza)
Ako i dalje nije jasno, predlažem neku knjigicu za SQL...
[ Markanto @ 19.09.2008. 07:15 ] @
Imao sam problem, a to je dali se moze iz pet tabela
koje imaju izmedju ostaloga i polje sifra, sve sifre iz
tih pet tabela staviti u jednu tabelu.
Preko sql-a to ide malo teze, skoro pa da je nemoguce.
To mi je i u jednu ruku bilo pitanje jer sam se htio uvjeriti dali
se to moze napraviti preko sql-a direktno ili moram to napraviti
rucno preko coda i tako popunjavati clientDataSet.
Eto, hvala Vam svima na odgovorima!
Cujemo se kasnije sa Vec nekom drugom temom!
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|