Databáze > MySQL

Select a Update v jednom prikazu?

(1/2) > >>

erdt.martin:
Zdravim,

mam dotaz, je mozne provest SELECT a UPDATE v jednom dotazu?

Tedy prochazim DB zaznam po zaznamu a vyhledavam zaznamy, kde je jeden ze 3 sloupcu NULL. Paklize ano, chci z internetu stahnout GPS souradnice a doplnit je do techto sloupecku.

Zkousim to takto:


--- Kód: C++ ---prikaz.CommandText = "SELECT Adresa FROM firma WHERE GPSy IS NULL OR GPSy IS NULL OR Accuracy IS NULL";             prikaz.Connection = pripojeni;            cteni = prikaz.ExecuteReader();             string sAdresa = "";            string[] sStazenaData;             while (cteni.Read())            {                sAdresa = (cteni.GetString(0));                sStazenaData = Geo.StahniSouradniceGPS(sAdresa);                prikaz.CommandText = "UPDATE firma SET GPSx=1, GPSy=2, Accuracy=123";                prikaz.ExecuteReader();            }             cteni.Close();            pripojeni.Close(); 
bohuzel nemohu provadet 2 prikazy v jednom dotazu, nebo vite jak to myslim... Proto to potrebuji dat nejak do jednoho, nebo nejaky jiny napad?

Stanislav Hruška:
Nestačí Ti hodiť podmienku Select-u do Update?

pepak:
Samozřejmě by šlo "provádět dva příkazy v jednom dotazu". Jenže ty nemáš případ pro "dva příkazy v jednom dotazu", ty máš případ pro "dotaz, potom akce mimo DB, a na základě té akce update". Kdybys chtěl dva příkazy v jednom dotazu, tak to uděláš vhodnou sestavou CASE:

--- Kód: SQL ---UPDATE tabulkaSET pole1=CASE WHEN pole1 IS NOT NULL THEN pole1 ELSE vypocethodnotypole1(...) END,    pole2=CASE WHEN pole2 IS NOT NULL THEN pole2 ELSE vypocethodnotypole2(...) ENDWHERE pole1 IS NULL OR POLE2 IS NULL

Mi.Chal.:

--- Citace: erdt.martin  23-07-2012, 00:24:45 ---Zdravim,

mam dotaz, je mozne provest SELECT a UPDATE v jednom dotazu?

Tedy prochazim DB zaznam po zaznamu a vyhledavam zaznamy, kde je jeden ze 3 sloupcu NULL. Paklize ano, chci z internetu stahnout GPS souradnice a doplnit je do techto sloupecku.

Zkousim to takto:


--- Kód: C++ ---prikaz.CommandText = "SELECT Adresa FROM firma WHERE GPSy IS NULL OR GPSy IS NULL OR Accuracy IS NULL";             prikaz.Connection = pripojeni;            cteni = prikaz.ExecuteReader();             string sAdresa = "";            string[] sStazenaData;             while (cteni.Read())            {                sAdresa = (cteni.GetString(0));                sStazenaData = Geo.StahniSouradniceGPS(sAdresa);                prikaz.CommandText = "UPDATE firma SET GPSx=1, GPSy=2, Accuracy=123";                prikaz.ExecuteReader();            }             cteni.Close();            pripojeni.Close(); 
bohuzel nemohu provadet 2 prikazy v jednom dotazu, nebo vite jak to myslim... Proto to potrebuji dat nejak do jednoho, nebo nejaky jiny napad?

--- Konce citace ---

Můžeš, ale tady máš mezitím nějakou akci mimo db. V tomhle bych problém neviděl, prostě ten update dělej v rámci nové connectiony. Taky máš myslím blbě to, že do commandu nastavuješ UPDATE a pak voláš ExecuteReader, měl bys volat spíš něco jako ExecuteNonQuery. Ale stejně to nemůžeš dělat v rámci stejné connection, z které chceš pak dále číst.

mira:
Asi bych to zkusil řešit přes DataAdapter. Načíst si výsledky dotazu nad tabulkou firem do DataTable, provézt potřebné změny a pak to tam všechno najednou poslat pomocí DataAdapter.Update()

Navigace

[0] Seznam témat

[#] Další strana

Přejít na plnou verzi