[SOLUCIONADO] Forma Correcta En La Conexion De Base De Datos Sqlite3


Ir a la página 1, 2  Siguiente

Objetivo: 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

Perfil MP  
Objetivo: 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.

Perfil MP  
Objetivo: 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

Perfil MP  
Objetivo: 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.

Perfil MP  
Objetivo: 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

Perfil MP  
Objetivo: 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.

Perfil MP  
Objetivo: 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

Perfil MP  
Objetivo: 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

Perfil MP  
Objetivo: 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

Perfil MP  
Objetivo: 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.

Perfil MP  
Ir a la página 1, 2  Siguiente

Página 1 de 2


  
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

   

Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Página generada en:: 0.4897s (PHP: -77% SQL: 177%)
Consultas SQL: 45 - Debug off - GZIP Activado