Hola a todos,
Existe alguna manera para que si realizo un UPDATE, si éste no puede realizarse por no existir el registro a actualizar, se proceda de manera 'automática' a realizar un INSERT?
Gracias,
if oServer:Query("select * from tutabla where tucondicion"):nRecCount > 0
oServer:Execute("UPDATE ...")
else
oServer:Execute("INSERT ...")
endif
INSERT INTO t1 (a,b,c) VALUES (1,2,3)
ON DUPLICATE KEY UPDATE c=3;
INSERT INTO t1 (a,b,c) VALUES (4,5,6)
ON DUPLICATE KEY UPDATE c=9;
SELECT count( * ) FTROM tutabla WHERE tucondicion
try
oServer:Execute("UPDATE ...")
catch
oServer:Execute("INSERT ...")
end
xmanuel wrote:Espero que le valga a Carlos también!!!
xmanuel wrote:Cesar la solucion que propones no es la mejor en sistemas modernos o que usaan el paradigma cliente/servidor sobre todo si es un sistema con una red lenta. Pero si hubiera que usar ese sistema es mejor la sentencia
- Code: Select all Expand view RUN
SELECT count( * ) FTROM tutabla WHERE tucondicion
La propuesta moderna es usar TRY/CATCH asi
- Code: Select all Expand view RUN
try
oServer:Execute("UPDATE ...")
catch
oServer:Execute("INSERT ...")
end
Se intenta el UPDATE y si no es posible el INSERT eso es compatible con cualquier base de datos.
Pero la más optima es la que propongo más arriba... (Solo compatible con MySQL y MariaDB)
En la medida de lo posible hay que evitar peticiones al servidor sobre todo si es lento.
Francisco Valério wrote:xmanuel wrote:Cesar la solucion que propones no es la mejor en sistemas modernos o que usaan el paradigma cliente/servidor sobre todo si es un sistema con una red lenta. Pero si hubiera que usar ese sistema es mejor la sentencia
- Code: Select all Expand view RUN
SELECT count( * ) FTROM tutabla WHERE tucondicion
La propuesta moderna es usar TRY/CATCH asi
- Code: Select all Expand view RUN
try
oServer:Execute("UPDATE ...")
catch
oServer:Execute("INSERT ...")
end
Se intenta el UPDATE y si no es posible el INSERT eso es compatible con cualquier base de datos.
Pero la más optima es la que propongo más arriba... (Solo compatible con MySQL y MariaDB)
En la medida de lo posible hay que evitar peticiones al servidor sobre todo si es lento.
Una pregunta en esta sugerencia, si el error devuelto en la UPDATE TRY no se refiere a no tener el registro, sino a un error en la QUERY en sí, ¿insertará el registro que no estaba destinado a ser insertado o me equivoco?
INSERT INTO t1 (a,b,c) VALUES (1,2,3)
ON DUPLICATE KEY UPDATE c=3;
INSERT INTO t1 (a,b,c) VALUES (4,5,6)
ON DUPLICATE KEY UPDATE c=9;
Cesar la solucion que propones no es la mejor en sistemas modernos o que usaan el paradigma cliente/servidor sobre todo si es un sistema con una red lenta.
Return to FiveWin para Harbour/xHarbour
Users browsing this forum: No registered users and 105 guests