Autor Téma: chyba v sql príkaze  (Přečteno 2537 krát)

Offline nevedko01

  • Nováček
  • *
  • Příspěvků: 7
  • Karma: 0
    • Verze Delphi: 7
chyba v sql príkaze
« kdy: 02-06-2016, 17:02:48 »
zdravím...
mám dve dbf (paradox7)
sklp.db
-Kod,Kusov,Datum,cc,Popis
prx7.db
-Kod, Vyrobca, Nazov, Skl, Min, cc, cc2

môj SQL :
01:
Query1.Sql.clear;
Query1.Sql.Add('SELECT  sklp.Kod,prx7.Vyrobca,prx7.Nazov,sklp.Kusov,sklp.Datum,sklp.Popis
 ');
Query1.Sql.Add('FROM sklp,prx7 ');
Query1.Sql.Add('WHERE sklp.Kod=prx7.Kod '); 


02
Query1.Sql.clear;
Query1.Sql.Add('SELECT  sklp.Kod,prx7.Vyrobca,prx7.Nazov,sklp.Kusov,sklp.Datum,sklp.Popis
 ');
Query1.Sql.Add('FROM sklp ');
Query1.Sql.Add('LEFT JOIN prx7 ON sklp.Kod=prx7.Kod'); 


ani jedna varianta nerobí čo by  som potreboval...
potreboval by som výstupný table sklp s pridanými "strlpcami" z prx7
nejaké rady ?
Ďakujem

Offline pepak

  • Guru
  • *****
  • Příspěvků: 1297
  • Karma: 28
    • Pepak.net
Re:chyba v sql príkaze
« Odpověď #1 kdy: 02-06-2016, 17:31:50 »
Oba tvoje kódy jsou v pořádku a funkční. Co konkrétně se ti na jejich výstupu nezdá?

Offline nevedko01

  • Nováček
  • *
  • Příspěvků: 7
  • Karma: 0
    • Verze Delphi: 7
Re:chyba v sql príkaze
« Odpověď #2 kdy: 03-06-2016, 17:53:07 »
nezdá sa mi to,
sklp má 3 riadky (záznam)
prx7 má 17 záznamov
ale v dbgide je ich 36...
malo by ich byť iba 3 nie ?
miesto LEFT JOIN som skúsil aj INNER JOIN

Online Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 2964
  • Karma: 29
    • Verze Delphi: XE7 professional
Re:chyba v sql príkaze
« Odpověď #3 kdy: 03-06-2016, 18:31:41 »
Skutočné údaje nevidíme, takže len tak od boka:
Citace
malo by ich byť iba 3 nie ?
Nie! Ak zoberieme do úvahy O1, tak si musíš spočítať koľko zhôd ID v oboch tabuľkách máš.
Ak použiješ LEFT JOIN, tak sa objavia všetky záznamy z tabuľky na ľavej strane (sklp). Bez ohľadu na to, či majú zodpovedajúci záznam v tabuľke prx7.
Akurát, že vo výsledku budeš mať aj hodnoty null.
To číslo 36 je nejaké divné, ale neviem čo všetko tam robíš. Napríklad či DBGrid nenaplníš viackrát.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline nevedko01

  • Nováček
  • *
  • Příspěvků: 7
  • Karma: 0
    • Verze Delphi: 7
Re:chyba v sql príkaze
« Odpověď #4 kdy: 03-06-2016, 21:08:26 »
a ako urobiť SQL dotaz tak aby som dosiahol nasledovné ?
kedže v sklp má len 3 x záznam, tak chcem výslednú databázu  s 3 záznamami, ale doplnenými hodnotami z prx7 podľa "Kod"-u
p.s.: dbgrid má len datasource1 a query1, mením len SQL príkaz a prepínam Active v query1
« Poslední změna: 03-06-2016, 21:12:02 od nevedko01 »

Online Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 2964
  • Karma: 29
    • Verze Delphi: XE7 professional
Re:chyba v sql príkaze
« Odpověď #5 kdy: 03-06-2016, 21:15:13 »
A to si si staršiu (1995 = 21 rokov stará) DB nevedel vybrať? Ja Ti v prvom rade odporúčam prejsť na normálnu DB. Ak sa to len trochu dá!
Tak sem hoď údaje zadané v tabuľkách. Len tak sa budem vedieť vyjadriť.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline nevedko01

  • Nováček
  • *
  • Příspěvků: 7
  • Karma: 0
    • Verze Delphi: 7
Re:chyba v sql príkaze
« Odpověď #6 kdy: 03-06-2016, 21:45:47 »

http://postimg.org/image/4xulua84b/

p.s.: asi by to aj šlo prejsť na inú DB ale viem len pár príkazov SQL, prg bo robený strasne davno, len nejake nove veci sa dorabaju a nejak casu vela nieje a zvyknem hovoriť, ked to funguje - nerieš/nehas, vyskočia daľšie veci...
« Poslední změna: 03-06-2016, 21:50:35 od nevedko01 »

Online Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 2964
  • Karma: 29
    • Verze Delphi: XE7 professional
Re:chyba v sql príkaze
« Odpověď #7 kdy: 03-06-2016, 21:53:57 »
Joj, chlape môj zlatý. Veď Ty nevieš čo chceš >:(
Takže Ty chceš len doplniť tabuľku sklp o nejaké jedinečné údaje z tabuľky prx7. Použi za SELECT čarovné slovíčko Distinct. A použi obyčajný INNER JOIN.
Tým jedinečné chcem povedať, že pre daný kód tam v tabuľke prx7 nemôžu byť dve rôzne hodnoty!!!!!!!!!!!!!!!!!!!!!!!!!

Som zvedavý prečo ideš na paradoxe.
« Poslední změna: 03-06-2016, 21:55:29 od Stanislav Hruška »
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline vandrovnik

  • Hrdina
  • ****
  • Příspěvků: 277
  • Karma: 14
    • Verze Delphi: 10.2
Re:chyba v sql príkaze
« Odpověď #8 kdy: 03-06-2016, 22:11:39 »
Ahoj, podle toho obrázku v tabulce prx7 není políčko "Kod" jednoznačné. Např. jak to má poznat, který řádek by to mělo vrátit pro Kod=NR75421?

Online Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 2964
  • Karma: 29
    • Verze Delphi: XE7 professional
Re:chyba v sql príkaze
« Odpověď #9 kdy: 03-06-2016, 22:16:24 »
Citace
podle toho obrázku v tabulce prx7 není políčko "Kod" jednoznačné.
Ale Ty ho ani neťaháš do výsledku! Ten kód ťaháš iba z tabuľky sklp. Ale údaje ktoré ťaháš z tabuľky prx7 musia byť jednoznačné. Treba poriadne čítať odpovede, vyskúšať si to a snažiť sa tomu porozumieť.

Ale nedostal som odpoveď na svoju zvedavú otázku.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline nevedko01

  • Nováček
  • *
  • Příspěvků: 7
  • Karma: 0
    • Verze Delphi: 7
Re:chyba v sql príkaze
« Odpověď #10 kdy: 03-06-2016, 22:17:24 »
ked sa prg robil, nebol paradox až taký deduško.
keby som sa rozhodol pre zmenu BDE + paradox, čo odporúčaš ?
čo spolupráca s QReport ? dakujem.
p.s.: INNER JOIN je v poho ale Distinct sa mi zda že počujem prvý raz :o (ale príkaz si už dám dokopy ked je vodítko.. dík)

Offline nevedko01

  • Nováček
  • *
  • Příspěvků: 7
  • Karma: 0
    • Verze Delphi: 7
Re:chyba v sql príkaze
« Odpověď #11 kdy: 03-06-2016, 22:21:05 »
Ahoj, podle toho obrázku v tabulce prx7 není políčko "Kod" jednoznačné. Např. jak to má poznat, který řádek by to mělo vrátit pro Kod=NR75421?
myslím že v pohode prvý záznam... (aj ked su tri) z prx7 sa doťahuje iba vyrobca a nazov a je pravda že kod tam može byť aj 20x, ale výrobca a nazov by mal byť vždy totožný

Offline vandrovnik

  • Hrdina
  • ****
  • Příspěvků: 277
  • Karma: 14
    • Verze Delphi: 10.2
Re:chyba v sql príkaze
« Odpověď #12 kdy: 03-06-2016, 22:22:39 »
Já vím, v tomhle případě opravdu SELECT DISTINCT... bude fungovat. Do té doby, než někdo časem přidá mezi vybíraná pole další pole z té tabulky prx7. Ona by měla trochu jinak vypadat struktura té databáze - mj. by ten výrobce a název měly být v jiné tabulce (zvlášť), aby se neopakovaly, protože takhle se může stát, že někdo např. v tabulce prx7 změní název výrobkuna řádku 7, ale ne na řádku 1... a hned to zase bude fungovat špatně...

Online Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 2964
  • Karma: 29
    • Verze Delphi: XE7 professional
Re:chyba v sql príkaze
« Odpověď #13 kdy: 03-06-2016, 22:28:04 »
To vandrovnik: to som si nechával na neskôr. Aby som ho dorazil, keby si myslel, že to má v suchu ;D  Teraz vážne. Stačí ak by tam pri písaní nechal na konci medzeru a nestačil by sa diviť.
To nevedko1: a akú máš verziu delphi? Aha, už viem. D7. Záleží na tom
  - či chceš mať všetko zadarmo, alebo si ochotný aj niečo investovať. Myslím tým manažér DB. Nie na všetky DB sa dá zohnať zadarmo.
  - aké požiadavky budú na DB. Okrem iného počet záznamov.
  - generátor zostáv si môžeš vybrať podľa svojej chuti. Ja osobne som prešiel na FastReport. Ale D7 ho nemá. Musel by si si ho kúpiť. QReport pôjde.

Trochu sa pozri v histórii. Už sa tu výber DB viackrát preberal. A ako napísal vandrovník
  - povinne prerobiť štruktúru DB. Takto to nesmie byť.
  - a ako by si napríklad zaistil, aby sa Ti nemiešali dajme tomu výrobcovia?
« Poslední změna: 03-06-2016, 22:39:35 od Stanislav Hruška »
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline nevedko01

  • Nováček
  • *
  • Příspěvků: 7
  • Karma: 0
    • Verze Delphi: 7
Re:chyba v sql príkaze
« Odpověď #14 kdy: 03-06-2016, 23:04:48 »
neživým sa programovaním a ani nebudem... takže jediná možnosť je free
požiadavky na DB... myslím že v žiadnej db nebude viac ako 30.000 záznamov. (dúfam)
ps štruktúra db je v poho... Ak sa nahodou niekto preklepne v položke Výrobca a nazov, je to jedno...
pokiaľ prg vždy vezme v uvahu prvý záznam zhodný v "Kod"
ale mimochodom stačí napísať kod a pokial je daný kod v databaze (tEdit-OnChange -query1.SQL.Append('WHERE Kod LIKE "%'+kod.Text+'%"')) po kliknutí na riadok sa vyrobca a nazov doplnia...
struktura prx7 má veľa rokov a je to tak kvôli jednému formu kde sa zadava všetko čím menej DB otvorených, tým lepšie (tak to bolo v roku XY, kedy mať 128MB ram bol mega luxus)
ps rozbehal som BDE aj na W7 aj na W10
p.s.: prekopať tak stary prg, meniť štrukturu databaz .. to by bolo jednoduchšie urobiť všetko nanovo... (aj ked zvažoval som to) najmä keď jeden z nápadov bol funkčnosť aj na androide a dbf na nete... ale to je za padíka blbosť...

 

S rychlou odpovědí můžete používat BB kódy a emotikony jako v běžném okně pro odpověď, ale daleko rychleji.

Upozornění: do tohoto tématu bylo naposledy přispěno před 120 dny.
Zvažte prosím založení nového tématu.

Jméno: E-mail:
Ověření:
Datový typ v Delphi, který má True a False: