[ godoreba @ 13.09.2016. 16:16 ] @
Pozdrav svima...

potrebno mi je pomoći oko SQL UPDATE komande.

u tabeli postoje polja, između ostalih i naziv, 'količina', 'cena' i 'svega' gde je 'svega = količina * cena' . Ako promenim cenu svega bi trebalo da se promeni. SQL poznajem toliko da mogu da koristim najosnovnije, SELECT, INSERT INTO, UPDATE...


Code:

"UPDATE Sifra SET Sif=" + Str(SifPro) + ", naziv='" & NazPro & "', jm='" & JmPro & "' where ID = " + Str(IDSifre) + " ;"


to mi je jasno ali ne znam kako da u jednom SQL upitu pomnožim dve kolone i upišem u treću kolonu istog recordset-a. Glupo je da ih izlistam SELECTOM pa da svaki ponaosob da editujem.

Ima li pomoći?
[ Shon3i @ 13.09.2016. 20:18 ] @
To bi bio apendujuci SQL

INSERT INTO (Naziv, Kolicina, Cena, Svega)
SELECT (Naziv, Kolicina, Cena, Kolicina * Cena AS neko ime)
WHERE....
[ godoreba @ 14.09.2016. 10:19 ] @
Zar INSERT INTO nije komanda koja će dodati novi recordset?
[ adzo_ @ 14.09.2016. 10:59 ] @
Nema razloga da uopste imas kolonu Svega jer je mozes uvek dobiti sa Kolicina * Cena(u svakom SELECT-u, kad god zatreba)
Ukoliko bas hoces da imas i taj podatak u bazi, mada je nepotreban, onda radis update isto kao i za kolicinu ili cenu:
Update sifra set kolicina = @kolicina, cena = @cena, svega = @kolicina * @cena where ID = ......
[ djoka_l @ 14.09.2016. 11:15 ] @
Uz pretpostavku da se tabela zove neka_tabela i da ima kolone sifra, kolicina, cena, ukupno

UPDATE neka_tabela
set (cena = NOVACENA, ukupno = kolicina * NOVACENA)
where sifra = SIFRA

Dakle, u UPDATE (i u drugim upitima) referenciraš trenutni sadržaj polja sloga nad kojim radiš tako što navedeš ime polja. Znači, kada sam napisao kolicina u update to znači ona vrednost koja se nalazi u polju kolicina sloga kojeg menjam...

Ono SIFRA i NOVACENA su neki konkretni podaci (brojevi) koje treba da ubaciš u upit.
Citat:
SQL poznajem toliko da mogu da koristim najosnovnije

Uzgred, SQL se ne uči "usput". Ili ga nauči kako treba, ili nemoj da pišeš programe koji treba da rade sa relacionom bazom.

[Ovu poruku je menjao djoka_l dana 14.09.2016. u 12:44 GMT+1]
[ Shon3i @ 14.09.2016. 13:00 ] @
Citat:
godoreba: Zar INSERT INTO nije komanda koja će dodati novi recordset?
Ne, ovo je sve jedan upit, znaci u upitu se koriste i INSERT INTO i SELECT istovremeno

Pozdrav
[ godoreba @ 14.09.2016. 13:18 ] @
Hvala na odgovoru, ovo će rešiti moj problem.
Citat:

Uzgred, SQL se ne uči "usput". Ili ga nauči kako treba, ili nemoj da pišeš programe koji treba da rade sa relacionom bazom.

na moju veliku žalost, sve što sam naučio, naučio sam "usput", naiđem na problem, rešim ga i naučim. Nisam završio škole vezane za IT pa sam svestan svojih mogućnosti. Zato sam i postavio pitanje na zadatu temu na odgovarajućem forumu.
[ anon115774 @ 14.09.2016. 14:40 ] @
Ako ja dobro razumem tebi treba da kada neko uradi update kolone "cena" da se "svega" promeni automatski?

To radis sa triggerom. On okida nakon sto se izvrsi izmena a ti uhvatis novi podatak (tabela inserted.* vidljiva samo u triggeru) i pomnozis cenom i upises u "svega".

A inace, takav dizajn baze je katastrofalan ako te neko pita :)

A da... a kod koji si naveo u prvoj poruci je izuzetan... ako hoces da omogucis sql injection :)
[ godoreba @ 14.09.2016. 19:47 ] @
Citat:
Informer: Ako ja dobro razumem tebi treba da kada neko uradi update kolone "cena" da se "svega" promeni automatski?

To radis sa triggerom. On okida nakon sto se izvrsi izmena a ti uhvatis novi podatak (tabela inserted.* vidljiva samo u triggeru) i pomnozis cenom i upises u "svega".

A inace, takav dizajn baze je katastrofalan ako te neko pita :)

A da... a kod koji si naveo u prvoj poruci je izuzetan... ako hoces da omogucis sql injection :)


Program je rađen 2002. u VB6 sa access-ovim bazama i ovo je dorada jer je klijent ubacio normative za pravljenje gotovih proizvoda.

Ah... tada sam shvatio da je baza loše kreirana.

Do skoro je samo prodavao gotove proizvode tako da je ta postavka stvari "pila vodu"... A sada, sa proizvodnjom, kad promeni cenu repromaterijala, treba da se promeni cena u svim normativima koji koriste taj materijal, da bi znao koliko njega košta da napravi proizvod.

Ne želim da menjam strukturu baza jer bih morao previše da menjam kod. Ne isplati se.

tako da...

moram se snaći u zadatim uslovima :)

btw...
aplikacija je offline na kompu u magacinu tako da SQL injection nema smisla, ako neko hoće da napakosti, jednostavno može da obriše same baze.


[Ovu poruku je menjao godoreba dana 14.09.2016. u 23:29 GMT+1]
[ anon115774 @ 15.09.2016. 12:27 ] @
Citat:
godoreba: sa access-ovim bazama


Dobro je da si se bar sad setio da ovo pomenes :)