Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 2
Ir a la página 1, 2  Siguiente
 
Borrar Un Registro
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Borrar Un Registro 
 
Hola.
Estoy trabajando con SQLITE3.
Me conecto a la base de datos mediante.
***********************************
'Funcion conectar la base de datos.
PRIVATE FUNCTION ConectarBase() AS Boolean
  
  IF hConn <> NULL THEN RETURN FALSE
  
  hConn = NEW Connection
  
  hConn.Host = "/home/manuel/Gambas/Libros"
  hConn.Name = "Datos"
  hConn.Type = "sqlite3"
  TRY hConn.Open()
  IF ERROR THEN
    hConn = NULL
    Message.Error("Error al conectar con la base de datos")
    RETURN FALSE
  END IF
  
  RETURN FALSE
  
END
*********************************
Para borrar un registro he puesto el código:
********************************************************
PUBLIC SUB Btn_Borrar_Click()
DIM pregunta AS Integer
DIM respuesta AS String
  respuesta = hResul["Nombre"]
  pregunta = message.Warning("¿Esta seguro de eliminar el registro?", "Si", "No")
      IF pregunta = 1 THEN
          TRY hConn.Exec("DELETE from Editorial where Nombre = respuesta"
          TRY hResul.Update
          message.Info("El registro ha sido eliminado")
          ME.Close
      END IF
END
***************************************
El fallo esta en la sentencia:  TRY hConn.Exec("DELETE from Editorial where Nombre = respuesta"
Ya que sale en mensaje informado que el registro ha sido eliminado, pero el registro no se elimina.
¿Alguna ayuda?
Saludos.
 



 
numero110 - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Borrar Un Registro 
 
Citar:

El fallo esta en la sentencia: TRY hConn.Exec("DELETE from Editorial where Nombre = respuesta"
Ya que sale en mensaje informado que el registro ha sido eliminado, pero el registro no se elimina.


Me parece que no comprendes el código que has puesto:

'La instrucción siguiente ni siquiera compilaría, falta el paréntesis de cierre:
TRY hConn.Exec("DELETE from Editorial where Nombre = respuesta"
'Luego de usar TRY, deberías chequear si se produce un error
TRY hResul.Update
 'El mensaje de que el registro se elimina lo has puesto tú de modo que aparezca aún cuando el borrado falle:
message.Info("El registro ha sido eliminado")
ME.Close '¿Por qué querrías esta instrucción aquí?

'. . .

'Prueba con esto:

TRY hConn.Exec("DELETE from Editorial where Nombre='" & respuesta & "'")

IF Error THEN
  'Hago algo para lidiar con el error aunque más no sea un mensaje al usuario:
  Message.Error(Error.Text)
ELSE
  Message.Info("El registro ha sido eliminado")
  hResul.Update
ENDIF


 

 




===================
Cómo programar con Gambas

Speed Books: informática libre.
 
fabianfv - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Borrar Un Registro 
 
Utilizar exec supone enviar una sentencia sql al motor de base de datos y puede hacer un código dependiente de una base de datos determinada. Puede haber diferentes sql para diferntes bases de datos (de hecho los hay).

Además del método de fabian, gambas aporta otra forma que es común para cualquier base de datos.

En vez de hacer esto
TRY hConn.Exec("DELETE from Editorial where Nombre='" & respuesta & "'")

Hacer esto
try hConn.delete("Editorial","Nombre=&1",respuesta)

Eso borra de la tabla editorial los registros cuyo nombre sea igual a respuesta sea cual sea la base de datos.

La clase connection

 
 



 
soplo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Borrar Un Registro 
 
Adhiero a lo que menciona Soplo. Para que el código SQL no sea dependiente de un DBMS en particular, debe escribirse el código siguiendo los estándares ¿pero cuál de los estándares? Existen diferentes versiones del estándar ISO: SQL86, SQL89, SQL92, SQL03, etc. (también conocidos como SQL1 -86, SQL2 -92-...) y se debe observar qué estándares soporta el DBMS que se vaya a usar. Además el soporte a un estándar en particular por parte del DBMS puede ser incompleto.

Pero este es un problema de portabilidad que generalmente se soluciona escribiendo el código SQL según el estándar más antiguo (en realidad, hoy en día debería escribirse para el estándar SQL2 -SQL92-). Si el DBMS que se usa no soporta SQL estándar es mejor no usarlo.

Ahora bien, si no se necesita escribir código SQL portable, es decir si analizamos que nunca será necesario reemplazar el DBMS actual por otro, se puede usar el dialecto SQL específico del DBMS en uso.

¿Qué aporta entonces gambas con su modelo de objetos de acceso a datos?

  • No es necesario conocer diferentes estándares SQL.
  • No es necesario conocer los dialectos SQL que maneja cada DBMS.
  • Facilita la portabilidad.
  • En la situación en que se necesite resguardar la posibilidad de migrar a otro DBMS, y el DBMS en uso no brinde soporte de SQL estándar o provea un soporte muy pobre, el manejo que propone gambas a través de los objetos de su componente gb.db brindan una solución que sería muy laborioso lograr de otro modo.

 




===================
Cómo programar con Gambas

Speed Books: informática libre.
 
fabianfv - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Borrar Un Registro 
 
Hola.
He probado con las siguientes sentencias para borrar el registro.

 TRY hConn.delete("Editorial", "Nombre=&1", respuesta)  

TRY hConn.Exec("DELETE from Editorial where Nombre='" & respuesta & "'")

TRY hConn.Exec("Delete * from Editorial where Nombre = &1", respuesta)

TRY hConn.Exec("Delete * from Editorial where Nombre = &1", Table.Current.key)

El error que me indica es:  Null Object"

Con el gestor de base de datos he intentado borra un registro y cuando estoy escribiendo la orden, ya sale el mensaje "no es posible ejecuatar la orden.
Lo que escribo es
                Delete * from Editorial where Nombre = Plaza
Plaza es el nombre de una editorial que he grabado en la base de datos.
¿alguna ayuda?
 



 
numero110 - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Borrar Un Registro 
 
Si te tiras a escribir tú la sentencia, procura ser cuidadoso:
Delete * from Editorial where Nombre = Plaza
 


No contiene las comillas necesarias para indicar que Plaza es un literal

"Delete * from Editorial where Nombre = \"Plaza\""


Es una cadena válida para enviar. Debes "escapar" las comillas dobles cuando van dentro de otra cadena.

De todas formas ayudaría a ayudarte si mandas el código completo de la función que has escrito y la definición de la tabla.
Algo estás haciendo mal, que sqlite es algo muy probado y el motor de gambas también. Funcionan. Seguro.
 




===================
No podemos regresar
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Borrar Un Registro 
 
O también usando comita simple
"Delete * from Editorial where Nombre = 'Plaza'"

o si es una variable
"Delete * from Editorial where Nombre = '" & variable & "'"

 



 
soplo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Borrar Un Registro 
 
Citar:

TRY hConn.delete("Editorial", "Nombre=&1", respuesta)


Esta sentencia parece correcta ¿qué error te dio? Puede que el valor proporcionado por la variable respuesta no figurara en el campo Nombre de la tabla Editorial. También es posible que el dato se haya borrado de la tabla Editorial pero no se actualizara tu programa. ¿Estas respetando las mayúsculas y minúsculas en los nombres de tablas y campos? ¿La conexión está establecida?

Citar:

TRY hConn.Exec("DELETE from Editorial where Nombre='" & respuesta & "'")


Idem anterior

Citar:

TRY hConn.Exec("Delete * from Editorial where Nombre = &1", respuesta)


Error 1

Citar:

TRY hConn.Exec("Delete * from Editorial where Nombre = &1", Table.Current.key)


Error 1
Error 2: Parece que no existe en tu programa un control (como ColumnView con los datos de tu tabla cargados) llamado Table (de ahí el error "Null Object").

Citar:

Con el gestor de base de datos he intentado borra un registro y cuando estoy escribiendo la orden, ya sale el mensaje "no es posible ejecuatar la orden.
Lo que escribo es
Delete * from Editorial where Nombre = Plaza


Errores:

1- La sentencia Delete no soporta el uso del asterisco
2- Los valores de tipo cadena llevan comillas: puedes usar comillas simples 'plaza' o dobles "plaza" (si incluyes este valor literal en un string de gambas tienes que "escapar las comillas" como indicó Shordi  \"plaza\")
 




===================
Cómo programar con Gambas

Speed Books: informática libre.
 
fabianfv - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Borrar Un Registro 
 
No había visto el problema al borrar.
Esto es lo que pusiste
TRY hConn.Exec("DELETE from Editorial where Nombre='" & respuesta & "'")

Y eso no se en SQLITE pero en MYSQL está mal. En Mysql sería así:
TRY hConn.Exec("DELETE Editorial where Nombre='" & respuesta & "'")

comprueba que ese enunciado se ajuste al sql de sqllite (que yo no conozco)

La otra forma correcta sería:
TRY hConn.delete("Editorial", "Nombre=&1", respuesta)

Eso debería funcionar sin cambiar nada tanto en sqlite como en mysql. Si no te funciona puede ser poque la tabla editorial no tiene una clave primaria o bien porque la variable respuesta no tiene un valor válido o bien porque hConn no está abierta.

Un saludo
 



 
última edición por soplo el Jueves, 03 Diciembre 2009, 15:58; editado 1 vez 
soplo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Borrar Un Registro 
 
Soplo, una aclaración:

Citar:

Y eso no se en SQLITE pero en MYSQL está mal. En Mysql sería así:
TRY hConn.Exec("DELETE Editorial where Nombre='" & respuesta & "'")
 


comprueba que ese enunciado se ajuste al sql de sqllite (que yo no conozco)


la cláusula from de la sentencia delete es válida (forma parte del estándar ANSI SQL) y MySQL la soporta correctamente (y también SQLite) y es obligatoria.
 




===================
Cómo programar con Gambas

Speed Books: informática libre.
 
última edición por fabianfv el Jueves, 03 Diciembre 2009, 16:43; editado 1 vez 
fabianfv - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
Ocultar¡Este tema fue útil?

 

Elegir valoración:                       

Media de valoración Valoración mínima Valoración máxima Número de valoraciones
0.00 0 0 0
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Borrar Registro En Listview/gridview destroyer Controles/Librerías/Componentes 9 Miercoles, 14 Septiembre 2011, 20:14 Ver último mensaje
ahtonio
No hay nuevos mensajes Sql Borrar Y Editar Un Solo Registro Cua... codificador Bases de Datos 8 Sabado, 22 Junio 2013, 20:21 Ver último mensaje
codificador
No hay nuevos mensajes No Me Puedo Modificar Y Tampoco Borrar El ... metalgearxd General 6 Domingo, 03 Febrero 2013, 00:00 Ver último mensaje
Shell
No hay nuevos mensajes Borrar Recursivamente drjuano Aplicaciones/Fragmentos de Código 14 Viernes, 19 Abril 2013, 21:19 Ver último mensaje
drjuano
 

Publicar nuevo tema  Responder al tema  Página 1 de 2
Ir a la página 1, 2  Siguiente

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
No puede descargar archivos
No puede publicar eventos en el calendario