Borrar un Registro de una tabla de SQL Server 2019

152 views
Skip to first unread message

integral

unread,
May 6, 2024, 1:08:27 AM5/6/24
to Comunidad de Visual Foxpro en Español
Que tal Amigos

Tengo un formulario que controla el tiempo de consumo de varios productos.

Cuando un producto se termina el sistema genera un nuevo registro en la tabla de productos terminados. Hasta aquí todo bien.

MI problema radica en borrar dicho registro de la tabla de Perecibles (Productos)

Aquí el cosido que estoy utilizando pero no borra el registro.

SELECT Cursor_Total_Perecible
DELETE FROM dbo.Perecible ;
       WHERE Cursor_Total_Perecible.estado = "Terminado" 

Agradezco sus comentarios y sugerencias.

Saludos.,

Integral

Zarlu

unread,
May 6, 2024, 9:17:53 AM5/6/24
to Comunidad de Visual Foxpro en Español
Buenos días Integral!

La tabla es "perecible" del contenedor de datos "dbo"??
entonces creo que:
Delete From dbo.perecible Where estado="Terminado"

Ahora bien ...si pretendes recorrer el cursor " Cursor_Total_Perecible" para de ahí determinar que borrar entonces creo que deberías referenciar por el ID
SELECT Cursor_Total_Perecible
Scan For estado="Terminado"
lcID=estado
Delete From dbo.perecible Where Id=lcID
EndScan
*borrar en el cursor
Delete From  Cursor_Total_Perecible Where estado="Terminado"

(Si estás trabajando con buffering deberas aplicar los UpDate() correspondientes)

Suerte
zarlu
Chetumal, Quintana Roo, México

RS “Ricardo de Stgo”

unread,
May 6, 2024, 6:48:33 PM5/6/24
to Comunidad de Visual Foxpro en Español
Cerciórate de que el estado es "Terminado" o "TERMINADO"  eso es lo malo de utilizar campos varchar en lugar de campos Int (ID) quizas debas incluso ejecutar DELETE FROM dbi.perecible where UPPER(ALLTRIM(estado) = "TERMINADO"
Otra cosa que debes ver es que en las instrucciones que publicas 
dices que debes borrar haciendo referencia a un campo de la tabla y en ese caso dbo.perecible no es lo mismo que   Cursor_Total_Perecible

integral

unread,
May 7, 2024, 1:12:25 AM5/7/24
to Comunidad de Visual Foxpro en Español
Que tal Amigos

Aun no logro borrar desde el formulario creado en VFP 9.0 un registro contenido en la Base de Datos de SQl SErver 2019

Pero desde Sql Server con el siguiente codigo si borra el registro
 
DELETE FROM [dbo].[perecible]
    WHERE estado = 'Terminado'

Aqui muestra una imagen del error...

CORRREGIR.jpg

Agradezco sus comentarios.

Atte.,

Integral

Wagner Cevallos

unread,
May 7, 2024, 6:47:44 AM5/7/24
to publice...@googlegroups.com
Revisa el ambiente en el que estás trabajando, si es en ambiente de SQL no deberías utilizar alltrim , sino rtrim o ltrim

--
Blog de la Comunidad Visual FoxPro en Español http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/publicesvfoxpro/9220f322-2505-432c-bf4f-2e5d62a48814n%40googlegroups.com.

martin bonansea

unread,
May 7, 2024, 7:32:12 AM5/7/24
to publice...@googlegroups.com
Hola integral, como dice el colega Wagner Cevallos, el motor no te reconoce la funcion ALLTRIM() del zorro. En su lugar debes reemplazarla concatenando por las propias funciones del motor que son RTRIM() y LTRIM(), que también existen en el zorro.
En lugar de utilizar ALLTRIM(nombre_de_campo) = 'valor_deseado' reemplazalo por RTRIM(LTRIM(nombre_de_campo)) = 'valor_deseado'

Saludos cordiales.


--

integral

unread,
May 8, 2024, 8:03:52 AM5/8/24
to Comunidad de Visual Foxpro en Español
Que tal Amigos :

Gracias por sus comentarios y sugerencias

Resolví mi problema que esta pendiente de solución.

Aquí copio el código utilizado, que quizás mas adelante le sirva a otro colega.

SQLEXEC(cn, "DELETE FROM perecible WHERE RTRIM(estado) = 'Terminado'", "micursor1")

Tan solo faltaría agregarle al código una pequeña validación que confirme si se borro el registro deseado.

Pero ello lo dejo como tarea, luego pienso mejor el código.

Saludos

Integral

martin bonansea

unread,
May 8, 2024, 8:20:42 AM5/8/24
to publice...@googlegroups.com
Hola Integral, podes evaluar el resultado devuelto por sqlexec() asignando a una variable, por ejemplo:
lnOk = SQLEXEC(cn, "DELETE FROM perecible WHERE RTRIM(estado) = 'Terminado'")
IF lnOK < 0
   ? "No borro nadita"
ELSE
   ? "Si te lo eliminé "
ENDIF

Saludos cordiales.

Antonio Meza

unread,
May 8, 2024, 11:02:53 AM5/8/24
to Comunidad de Visual Foxpro en Español
Hola Integral

El único detalle que veo a esa instrucción es que no indicas un ID y por lo tanto va a borrar todos los registros de la tabla que tengan el estado "Terminado".

saludos

Reply all
Reply to author
Forward
0 new messages