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
 
[SOLUCIONADO] Forma Correcta En La Conexion De Base De Datos Sqlite3
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Forma Correcta En La Conexion De Base De Datos Sqlite3 
 
Hola. Quería preguntar si la forma en que me conecto a sqlite 3 es la correcta y si no lo es cual es la forma apropiada en que me debo conectar.

Código para la conexión:
Public ConexionBD As New Connection
Public ResultadoBD As Result

Public Sub Conectar()
  'Datos para la conexion de la base de datos
  ConexionBD = New Connection
  ConexionBD.Type = "sqlite3"
  ConexionBD.Host = "Direcorio de La Base de Datos"
  ConexionBD.Name = "Nombre de Base de Datos"
  
  'Aviso si hay algun fallo en la conexion
  Try ConexionBD.Open()
  If Error Then
  Message.Error("Error al conectar a la base de datos.")
  ConexionBD = Null
Endif

End

Public Sub Form_Open()

Conectar()
  
End
 

 



 
Lykan - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Forma Correcta En La Conexion De Base De Datos Sqlite3 
 
Sí, es correcta. Sólo te falta parametrizar los datos (con la clase settings, por ejemplo) para no tener que tocar al código si cambias de carpeta o de base de datos.

Saludos.
 



 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Forma Correcta En La Conexion De Base De Datos Sqlite3 
 
Hola

En mi opinión, no hace falta instanciar dos veces la conexión con New, puesto que consumirás memoria innecesariamente.

Tampoco es necesario declarar las variables de clase como públicas, porque entiendo que sólo se van a usar (o se deberían de usar) dentro de la clase actual, ya que la función conectarBD ya es pública y es la que vas a usar.

Yo usaba estas funciones dentro de un módulo, lo cual tampoco sigue el concepto de POO.


Public conn As Connection

Public Function connDB(path As String) As Boolean

    Dim myHost, myDBName As String

    myHost = File.Dir(path)
    myDBName = File.Name(path)

    If conn <> Null Then Return False

    conn = New Connection

    conn.Host = myHost
    conn.Name = myDBName
    conn.Type = "sqlite3"
    
    Try conn.Open()

    If Error Then
        conn = Null
        Message.Error(Subst("Error connecting to database: &1\n&2", myDBName, Error.Text))
        Return True
    Endif

    Return False

End

Public Sub CloseDB()

    If conn = Null Then Return
    conn.Close()
    conn = Null

End


Espero que te sirva,

Saludos
 




===================
Jesús Guardón

Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".

"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
 
jguardon - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Forma Correcta En La Conexion De Base De Datos Sqlite3 
 
Citar:
Tampoco es necesario declarar las variables de clase como públicas, porque entiendo que sólo se van a usar (o se deberían de usar) dentro de la clase actual, ya que la función conectarBD ya es pública y es la que vas a usar.

Jesús lleva razón. No me había fijado, sólo leí lo relativo a la conexión.
 
 



 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Forma Correcta En La Conexion De Base De Datos Sqlite3 
 
Gracias por tomarse la molestia de contestarme. Cual es la diferencia de usar Public Function y por clase publica te refieres a
Public Sub Form_Open()

Conectar()
  
End

 



 
Lykan - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Forma Correcta En La Conexion De Base De Datos Sqlite3 
 
Citar:
te refieres a


No se refiere a que en tu código original declaras publica la clase conexionBD y la clase ResultadoBD
Public ConexionBD As New Connection
Public ResultadoBD As Result
 

Lo que te interesa es que ConexionBD sea accesible en todo momento, debe ser público. Por el contrario ResultadoBD sólo debería ser utilizada dentro de procedimientos Concretos, si es que vamos a respetar las normas de la programación estructurada o de la POO, por lo que es un desperdicio de memoria, y fuente de errores, declararla pública.

Por otra parte si declaras una instancia de una clase, por ejemplo:

Public ConexionBD as Connection

no estás ocupando memoria hasta que la dotes de contenido, pero si añades New
 
Public ConexionBD as New Connection

Esa instancia ya tendrá todas sus propiedades disponible, y por tanto ocupa sitio en la memoria. Si luego vuelves a asignarle un

ConexionBD = New Connection

Estás volviendo a recrear la instancia, lo cual es innecesario, pues ya estaba creada.
 



 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Forma Correcta En La Conexion De Base De Datos Sqlite3 
 
Gracias por ayudarme y disculpen la molestia estoy comenzando en gambas y me siento algo perdido, me ha quedado claro esa parte de que resultadobd es un consumo innecesario y que solo debe de declararlo en la función que me sea necesaria, a demás de una instar dos veces a la base de datos, me ha quedado una duda path es el directorio de la base de datos

Public Function connDB(path As String) As Boolean

    Dim myHost, myDBName As String

    myHost = File.Dir(path)
    myDBName = File.Name(path)


y que es lo que realiza



Disculpen mi ignorancia  
 



 
Lykan - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Forma Correcta En La Conexion De Base De Datos Sqlite3 
 
En la función que te ha pasado Jesús, sólo se recibe un parámetro, que es el path y el nombre de la base de datos todo junto.

File.Dir(path) devuelve el directorio

File.Name(path) devuelve el nombre del archivo



Esto evita que intentes crear y abrir una conexión ya creada. Ahorra tiempo y errores.

Saludos
 



 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Forma Correcta En La Conexion De Base De Datos Sqlite3 
 
Inserté este asunto en la área del foro gambas-it.org dedicada a este foro. Un miembro del foro italiano tiene una sugerencia:

 http://www.gambas-it.org/smf/index....g35675#msg35675
 



 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Forma Correcta En La Conexion De Base De Datos Sqlite3 
 
Hay muchas formas de ponerse el sombrero, que se dice por mi tierra.
Tu colega del foro italiano alega como "defecto" de la función de Jesús (si no lo he entendido mal) eso, que sea una función "y haya que repetirla en cada fichero". Bien tiene razón, habrá que hacer la llamada cuando sea necesario, pero no creo que eso sea un defecto en según y qué situaciones.
Me parece más correcto según los estándares de la POO su solución, que una función pública es más de otro paradigma, pero ambas son igual de válidas.

Por otra parte, lo que cuenta de intentar cerrar la conexión antes de abrirla y usar la excepción del error como signo de que está abierta, me parece bien, es como yo lo hago... pero al revés. Me explico: hasta hace muy poco (y aún no estoy del todo seguro de que se haya solucionado definitivamente) las conexiones MySQL de gambas planteaban problemas. El servidor suele tener unos time-outs, a veces muy estrictos, y te corta la conexión cuando quiere, perdiendo, al reabrirla toda la configuración de idioma y demás. Eso parece estar arreglado ya, repito, pero como profilaxis yo me acostumbré a hacer

try miconexion.close()
miconexión.open()

en la función que usaba para abrir la conexión. Así me aseguraba que se volviera a "refrescar" todo el tema de las locales. Para SQLite sí me parece buena práctica la de tu colega.

En esta questión (abrir conexiones) yo suelo ser más enrevesado... algún día os pondré cómo lo hago.

Saludos.
 



 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Conexion Base De Datos MYSQL Con Gambas2 kbza Bases de Datos 12 Sabado, 10 Octobre 2009, 10:39 Ver último mensaje
CanihoJR
No hay nuevos mensajes Conexion A Base De Datos Oracle Juangg1977 Bases de Datos 1 Jueves, 03 Abril 2014, 12:14 Ver último mensaje
germinal
No hay nuevos mensajes ¿ Qué Forma Os Parece Más Correcta Para... Shell General 4 Viernes, 20 Febrero 2015, 13:51 Ver último mensaje
Shell
No hay nuevos mensajes Leer Error Que Devuelve El Driver De La Co... tincho Aplicaciones/Fragmentos de Código 3 Viernes, 08 Noviembre 2019, 19:51 Ver último mensaje
gambafeliz
 

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
Puede descargar archivos
No puede publicar eventos en el calendario



  

 

cron