Como detectar si Ejecuto el UPDATE

2,821 views
Skip to first unread message

Luis Salazar

unread,
Aug 13, 2013, 10:31:45 AM8/13/13
to publice...@googlegroups.com
En FOX realizo un SEEK keyxxx  y verificon con  IF  FOUND()   si encontro el registro..
 
Como hago en MySql  para el UPDATE
 
Ej :  UPDATE socios  socios.nombre = "SANTIESTEBAN DE LA NADAS "
         WHERE socios.cedula = "1234567"
 
como detecto si NO existe la cedula "1234567" en la tabla  socios
 
 
... Gracias de antemano
 

Fernando D. Bozzo

unread,
Aug 13, 2013, 11:36:07 AM8/13/13
to publice...@googlegroups.com
Hola Likiliki:

El UPDATE actualizará todos los que tengan esa cedula, pero si no encuentra ningún registro, probablemente lance un error de "NO HAY DATOS" o similar, cuyo código tendrías que capturar.

Saludos.-

Carlos Miguel FARIAS

unread,
Aug 13, 2013, 11:39:54 AM8/13/13
to Grupo Fox
Cuando se ejecuta un comando sql contra tablas que seleccionan o modifican, se obtiene una variable que indica la cantidad de filas involucradas.
En SQL nativo, la variable es _TALLY, en cada SGBD deberás ver en el manual correspondiente, como se denomina dicha variable (o función).
Saludos: Miguel, La Pampa (RA)

Antonio.xt

unread,
Aug 13, 2013, 11:44:02 AM8/13/13
to publice...@googlegroups.com

Fernando, me parece que asi no funciona el UPDATE. Al ejecutarlo va a actualizar todos los registros que cumplan la condicion del WHERE pero si no encuentra ninguno simplemente no cambiara nada, pero no mostrara ningun mensaje, aunque si es ejecutado en el Management Studio mostrara el mensaje "0 filas afectadas".

En el caso de likiliki, un metodo para saber que en realidad existe el registro a modificar es ejecutar un SELECT antes del UPDATE, aunque creo que de todas maneras para consultar un registro que se va a modificar entonces hubo un SELECT previo.

MALKASOFT ADPI: http://www.developervfp.blogspot.com/

unread,
Aug 13, 2013, 11:52:19 AM8/13/13
to publice...@googlegroups.com
Hola lo que deberías hacer es lo siguientes primero con un Select ver si existen datos y luego si existe aplicar el Update así podrás saber a cuantos registro afecto, efectivamente cuando ejecutas un comando dese VFP o en managament studio de SQL Server no te sale ningun error si el comando esta bien, por ese lado queda descartado.


 Pd.: Descargate mi grilla que tiene multiples funciones como filtrar, multiseleccion, búsqueda, etc del siguiente link http://www.developervfp.blogspot.com/p/gridlibre-v35.html. Ahora también puedes bajarte mi ultima herramienta Busqueda Incremental con un TEXTBOX http://developervfp.blogspot.mx/p/busqueda-incremental-con-un-textbox.html  las herramientas viene con código fuente, ojo no hacer mal uso por favor. 


Saludos; 


Ing. Russvell Jesus Soto Gamarra 
San Juan del Rio - Queretaro - Mexico 
Nextel.: 52*133750*16
rycjesusrj @ hotmail.com
Framework Multi-conexion version 6.0 (nueva)

mpulla

unread,
Aug 13, 2013, 12:25:40 PM8/13/13
to publice...@googlegroups.com
Hola.

Mira la ayuda de SQLEXEC(nStatementHandle [, cSQLCommand [, cCursorName[, aCountInfo]]])

En aCountInfo tiene información de los registros afectado.

En lo personal sería mejor hacer un SP, como dice Miguel, cada SGDB tienes sus propias variables que indican la cantidad de registros afectados, por el último comando.

Tengo algo parecido en Sql Server:

ALTER PROCEDURE [dbo].[MTYSec] @tiYear int, @tiIdMovTip int, @iKeyNext INT OUTPUT AS
SET NOCOUNT ON
UPDATE MTYSec SET @iKeyNext = iSecuencia =iSecuencia + 1 Where iYear = @tiYear And iIdMovTip = @tiIdMovTip
IF @@ROWCOUNT = 0
   Begin
     Insert Into MTYSec (iYear, iIdMovTip, cDescripcion, iSecuencia) Values(@tiYear, @tiIdMovTip, 'Automatico x Años', 1)
     Set @iKeyNext = 1
   end

Saludos.
Mauricio

Felipe Araoz Ramos

unread,
Aug 13, 2013, 12:32:13 PM8/13/13
to publice...@googlegroups.com
Luis

Podria ser asi:

Cresult=SQLEXEC(Tu conexion, "select cedula from SOCIOS WHERE cedula =?cCedula",TuCursor')
select tucursor
if eof()
   wait windows 'No hay cedula´'
endif

Saludos 

Felipe
--
Felipe Araoz Ramos
RPM #941990605 / 941990605
RPC 992760385
NXT  822*9500 / 998229500

Fernando D. Bozzo

unread,
Aug 13, 2013, 12:39:29 PM8/13/13
to publice...@googlegroups.com

Todo depende de como se use. Si el UPDATE se usa desde un procedimiento almacenado sí genera un error, que en Oracle es "NO DATA FOUND" (código 100 y otro código más). Si se hace el UPDATE directamente, entonces no genera error, pero en este caso no sé si haya alguna propiedad o dato de respuesta que devuelva la cantidad de registros actualizados.

Saludos.-

Fernando D. Bozzo

unread,
Aug 13, 2013, 1:32:15 PM8/13/13
to publice...@googlegroups.com
Acabo de hacer una prueba rápida, y al final es como puse desde un principio.

Dejo el ejemplo que hice en Oracle, pero que se puede adaptar a otra BDD cambiando el driver.

* NOTA: lnHandle devolverá >=1 si se conecta y -1 en caso de error
lnHandle = SQLSTRINGCONNECT( 'DRIVER={Microsoft ODBC for Oracle};SERVER=MiBDD;UID=MiUser;PWD=MiPwd' )

SQLEXEC(lnHandle, "UPDATE MiTabla SET UnCampo='UnValor' WHERE OtroCampo = 'UnaClave'", "C_DATOS", aCountInfo )

SQLDISCONNECT(lnHandle)

DISPLAY MEMORY LIKE *

ACOUNTINFO  Pub    A
   (   1,   1)     C  ""
   (   1,   2)     N       (         1,00000000)

Y listo, se crea un array con 2 columnas, una el cursor generado (si hay) y otra con el COUNT de lo afectado.
En resumen, que hay que leer bien los comandos SQL de la ayuda, porque ahí está todo explicado.

Saludos.-

Luis Salazar

unread,
Aug 15, 2013, 11:04:18 AM8/15/13
to publice...@googlegroups.com
Gracias a todos los amigos que me han orientado sobre el UPDATE ...
Voy a probar las recomendaciones realizadas ..
 
bye bye ..

Fernando D. Bozzo

unread,
Aug 15, 2013, 12:49:33 PM8/15/13
to publice...@googlegroups.com
Jesus, tu recomendación no es óptima porque requiere 2 accesos al servidor para cada cliente.

Teniendo una forma de que se devuelva en el mismo UPDATE, un select no tiene ningún sentido.

Saludos.-

PD: No me quiero descargar tu grilla múltiple.
Reply all
Reply to author
Forward
0 new messages