Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem delphi -DBGrid aktualizace dat spojených tabulek

Dobrý den, nenašel by se tu zkušený programátor, který by mi mohl poradit?
Mám takový problém...mám dvě tabulky - OBJEDNAVKY, VYROBKY, propojené přes vyrobky_id = id_vyrobky. Chci zobrazit v DBGridu, místo vyrobky_id, název výrobku z tabulky VYROBKY, což vytvořím pomocí SQL dotazu. Následně naplním pickList sloupce nazev_vyrobku obsahem tabulky VYROBKY. Vše je OK do doby, než se změní název výrobku, což je pochopitelné. Potřeboval bych nějakým způsobem aktualizovat záznam. Nevíte někdo prosím jak na to? Moc díky za odpověď.

Předmět Autor Datum
Pochopil jsem to dobre, ze v DB gridu mas vysledny select ze 2 tabulek a chces primo v gridu data ed…
Jan Fiala 21.06.2012 22:56
Jan Fiala
Ano, je tam něco takového Select * from OBJEDNAVKY o left join VYROBKY v on (v.id_vyrobky=z.vyrobky…
Cobol 21.06.2012 23:11
Cobol
Oprava selectu Select * from OBJEDNAVKY o left join VYROBKY v on (v.id_vyrobky=o.vyrobky_id ) WHERE…
Cobol 21.06.2012 23:12
Cobol
A jakou technologii používáš na připojení k databázi? Pro BDE se podívej na kompoenntu UpdateSQL Pok… poslední
Jan Fiala 22.06.2012 05:55
Jan Fiala

Ano, je tam něco takového

Select * from OBJEDNAVKY o left join VYROBKY v on (v.id_vyrobky=z.vyrobky_id ) WHERE objednavka_id='+IntToStr(id)+' order by poradi_zakazky ASC;

Potřebuji v podstatě vykonat update pouze tabulku OBJEDNAVKY, neboť ty VYROBKY jsou tam právě jen kvůli tomu nahrazení názvu výrobku místo id_výrobku.

Vytvořil jsem něco jako toto (dole). Příkazy se spouští u adoquery, který vykoná ten select. Myslel jsem, že bych toto spustil BeforePost(), a samotné post nějak zakázal. Vím, není to úplně nejlepší řešení, ale nic jiného mě nenapadá...

//funkce vrátí id výrobku, z tabulky VYROBKY podle vybraného názvu výrobku v DBgridu z PickListu.

idv:=getIdOfValue(DataModule2.ADOConnection1,'Vyrobky','Select id_vyrobky from Vyrobky where nazev="'+(!!tady nevim, co dát!!)+'"');

//tady vytvorim update vybraneho zaznamu. Uloží se do pole vyrobky_id právě to nalezené id.

dataset.CommandText:='update Zakazky set vyrobky_id ='+intToStr(idv)+' where id_objednavky='+(tady bych dal id_objednavky, což je právě upravovaný řádek)+'';

A jakou technologii používáš na připojení k databázi? Pro BDE se podívej na kompoenntu UpdateSQL
Pokud pouzivas ADO, tak se podivej treba na udalost OnRecordChangeComplete. Tam si budes muset napriklad napsat obsluhu pro vlozeni/opravu/mazani a dalsim SQL prikazem to opravit v datech.

Dalsi moznost je neopravovat to primo v gridu, ale vyvolat dalsi okno, kde si uzivatel opravi, co potrebuje a na zaklade zmeny ty provedes zmenu v tabulce.

Zpět do poradny Odpovědět na původní otázku Nahoru