|
Página 1 de 1
|
Crear Base De Datos SQLITE Por Codigo
Autor |
Mensaje |
destroyer
Aprendiz
Registrado: Noviembre 2009
Mensajes: 65
Edad: 54 Ubicación:
|
Crear Base De Datos SQLITE Por Codigo
Se que en mysql es posible crear una base datos directamente desde codigo, con gambas. ¿es posible hacerlo tambien para sqlite3? necesito crear una bbdd (archivo sqlite) cuando el usuario pulse un determinado boton.
|
#1 Miercoles, 02 Diciembre 2009, 19:37 |
|
|
soplo
Analista Programador
Registrado: Septiembre 2009
Mensajes: 843
Edad: 44
|
Re: Crear Base De Datos SQLITE Por Codigo
El procedimiento para crear bases de datos no depende del motor de la base de datos. gambas tiene unos procedimientos propios para crear bases de datos, tablas, campos e índices. En la versión que yo manejo no puede hacer triggers ni constrains pero lo demás si.
Así que entiendo que si gambas soporta sqlite 3 pues podrás crearla como cualquier otra.
La clase connection
En cualquier caso siempre podrías hacer un exec y que lo creara el motor de base de datos.
|
#2 Miercoles, 02 Diciembre 2009, 19:43 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
Re: Crear Base De Datos SQLITE Por Codigo
Prueba esto:
public sub creabasesqlite()
DIM hcon AS NEW Connection
DIM laTabla AS Table
DIM dbName AS String
DBName = "mibase"
' Abre la conexion sólo al servidor de datos, sin abrir tablas
hcon.Type = "sqlite3"
hcon.Host = User.Home
hcon.Name = ""
hcon.Login = ""
hcon.Password = ""
hcon.Port = ""
TRY hcon.Open()
' Comprueba si existe la base de datos /user/home/importada_csv, y si no existe la crea
IF NOT hcon.Databases.Exist(DBName) THEN
hcon.Databases.Add(DBName)
' Esta espera es necesaria con bases SQLite , aunque no con Mysql
WAIT 0.5
END IF
' Se cierra la conexión al servidor
hcon.Close()
' Se abre la conexión a la base de datos
hcon.Host = User.Home
hcon.Name = DBName
TRY hcon.Open()
IF ERROR THEN
Message.Error("No se pudo abrir la base de datos")
RETURN FALSE
END IF
latabla = hcon.Tables.Add("nueva_tabla") 'creamos una tabla
latabla.Fields.Add("ih_indice", db.Serial) ' Añadimos una clave primaria autoincremental
latabla.Fields.Add("un_campo",db.string) ' Añadimos los campos que necesitemos
latabla.PrimaryKey = ["ih_indice"]
latabla.Update()
hcon.Close
CATCH
Message.Error(Error.Text)
RETURN FALSE
END
=================== No podemos regresar
|
#3 Jueves, 03 Diciembre 2009, 02:27 |
|
|
fabianfv
Analista Programador
Registrado: Octobre 2009
Mensajes: 495
Edad: 50 Ubicación:
|
Re: Crear Base De Datos SQLITE Por Codigo
Detroyer:
Sí que es posible escribir un script sql para trabajar con SQLite.
Te aconsejo que escribas el script en un editor que resalte la sintaxis SQL y lo lances desde el editor de BD de gambas, para probar que funciona. Así luego puedes colocar ese código sql en una variable string (ya sea copiando y pegando, o leyéndolo de un archivo) y lanzar su ejecución desde gambas.
PUBLIC SUB Button1_Click()
DIM sql AS String
MiConexionSQLite.Databases.Add('Alexandria')
sql = "CREATE TABLE 'Autores' ( 'idAutor' INT4 NOT NULL , 'NombresAutor' TEXT, 'ApellidosAutor' TEXT, PRIMARY KEY (idAutor) );"
MiConexionSQLite.Exec(sql)
END
Verifica la sintaxis: Sintaxis SQLite, ya que no se ajusta exactamente a los estándares.
No obstante, usar las clases de gb.db para hacer esto es una mejor idea.
=================== Cómo programar con Gambas
Speed Books: informática libre.
última edición por fabianfv el Jueves, 03 Diciembre 2009, 17:19; editado 1 vez
|
#4 Jueves, 03 Diciembre 2009, 17:01 |
|
|
ahtonio
Programador
Registrado: Octobre 2009
Mensajes: 144
Edad: 58 Ubicación: Zaragoza
|
Re: Crear Base De Datos SQLITE Por Codigo
Supongo que tarde, pero me gustaria aportar un diseño de BD de pruebas que empleo para dar juego a alguna aventura que me propongo con el lenguaje y no se si va a funcionar.
Tengo un modulo que crea la base de datos y desde la funcion que la crea, llama a los creadores de las tablas - Asi:
' gambas module file
PUBLIC hCon AS Connection 'Conexion que usaremos en toda la aplicacion
CONST sDBname AS String = "mybooks.db" 'Todos los usuarios leeran en su Home
'la base de datos mybooks.db (sqlite3)
PUBLIC SUB openDB()
'hCon.Close 'Podemos intentar cerrar la conexion si hay alguna activa y no dara error
hCon = NEW Connection 'Instanciamos conexion
WITH hCon
.Type = "sqlite3"
.Host = User.Home 'En el directorio Home (para todos los usuarios)
.Name = ""
END WITH
hCon.Open
IF NOT mData.hCon.Databases.Exist("mybooks.db") THEN 'Si no existe la B.D. la creamos
hCon.Databases.Add("mybooks.db")
WAIT 0.3 'Esperamos para dar tiempo a que sea creada si hay algun lapso
hCon.Close
hCon.Name = "mybooks.db"
hCon.Open
' Como la hemos creado nueva, creamos las tablas
newlibro
newautor
newcoleccion
newgenero
neweditorial
ENDIF
mData.hCon.Close
mData.hCon.Name = sDBname
mData.hCon.Open
END
PUBLIC FUNCTION newlibro() AS Boolean
' Tabla de la ficha de registro de libros
DIM hTable AS Table
IF NOT hCon.Tables.Exist("libro") THEN
hTable = hCon.Tables.Add("libro")
WITH hTable.Fields
.Add("idlib", db.Serial) ' Identificador - Id
.Add("titlib", db.String, 40) ' Titulo
.Add("sublib", db.String, 40) ' Subtitulo
.Add("autlib", db.Integer,, 1) ' R -> Autor
.Add("collib", db.Integer,, 1) ' R -> Coleccion
.Add("edilib", db.Integer,, 1) ' R -> Editorial
.Add("genlib", db.Integer,, 1) ' R -> Genero
.Add("paglib", db.Integer) ' Numero de paginas
.Add("siplib", db.String) ' Sipnosis argumental
.Add("isbnlib", db.String, 14) ' ISBN - Numero de identificacion
.Add("stdlib", db.Boolean,, TRUE)
END WITH
hTable.PrimaryKey = ["idlib"]
hTable.Update
ENDIF
END
PRIVATE FUNCTION newcoleccion() AS Boolean
' Agrupación de libros en colecciones
' Si no pertenece a ninguna coleccion sera la 1 - INDEPENDIENTE
DIM hTable AS Table
DIM rsTable AS Result
IF NOT hCon.Tables.Exist("coleccion") THEN
hTable = hCon.Tables.Add("coleccion")
WITH hTable.Fields
.Add("idcol", db.Serial)
.Add("nomcol", db.String, 30)
END WITH
hTable.PrimaryKey = ["idcol"]
hTable.Update
ENDIF
rsTable = hCon.Create("coleccion") 'Creamos registro
rsTable!nomcol = "INDEPENDIENTE" 'Dato que tomara el campo
rsTable.Update 'Hacemos efectivos los cambios (grabamos)
END
PRIVATE FUNCTION newgenero() AS Boolean
' Categoria de libros por su genero
' Si no conocemos el genero sera el 1 - INDEFINIDO
DIM hTable AS Table
DIM rsTable AS Result
IF NOT hCon.Tables.Exist("genero") THEN
hTable = hCon.Tables.Add("genero")
WITH hTable.Fields
.Add("idgen", db.Serial)
.Add("nomgen", db.String, 30)
END WITH
hTable.PrimaryKey = ["idgen"]
hTable.Update
ENDIF
rsTable = hCon.Create("genero") 'Creamos registro
rsTable!nomgen = "INDEFINIDO" 'Dato que tomara el campo
rsTable.Update 'Hacemos efectivos los cambios (grabamos)
END
PUBLIC FUNCTION neweditorial() AS Boolean
' Tabla de datos de la editorial
DIM hTable AS Table
IF NOT hCon.Tables.Exist("editorial") THEN
hTable = hCon.Tables.Add("editorial")
WITH hTable.Fields
.Add("idedi", db.Serial)
.Add("nomedi", db.String, 40)
.Add("diredi", db.String, 40)
.Add("disedi", db.String, 5)
.Add("pobedi", db.String, 20)
.Add("prvedi", db.String, 20)
.Add("tlfedi", db.String, 9)
.Add("webedi", db.String, 40) 'Direccion web
.Add("maiedi", db.String, 40) 'Correo electronico
END WITH
hTable.PrimaryKey = ["idedi"]
hTable.Update
ENDIF
END
PUBLIC FUNCTION newautor() AS Boolean
' Tabla de datos de autor
DIM hTable AS Table
IF NOT hCon.Tables.Exist("autor") THEN
hTable = hCon.Tables.Add("autor")
WITH hTable.Fields
.Add("idaut", db.Serial)
.Add("nomaut", db.String, 40)
.Add("obsaut", db.String)
END WITH
hTable.PrimaryKey = ["idaut"]
hTable.Update
ENDIF
END
Solo es un ejemplo, pero completo y espero que le ayude a alguien.
Un abrazo
|
#5 Sabado, 30 Enero 2010, 00:44 |
|
|
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
Re: Crear Base De Datos SQLITE Por Codigo
Shordi:
Cuando hiciste este código debió ser una función, ¿ verdad ?.
Es que como veo que devuelve boolean pero es un procedimiento que no devuelve ningún valor.
..las prisas.
Seguiremos viendo el ejemplo, para crear un resumen que me ayude a crear la base de esta forma.
El ejemplo de Ahtonio no esta nada mal.
(Sobra el prefijo mdata que luego no se encuentra. Es solo Hcon )
P.d, cuesta a veces encontrar estas cosas por la comunidad..
Ayer la encontré y hoy no encontraba la manera, me acorde del usuario Ahtonio y busque sus mensajes.
Saludos
=================== Gambas Básico
"No es un bug, es una característica no documentada"
última edición por Shell el Sabado, 11 May 2013, 12:06; editado 1 vez
|
#6 Sabado, 11 May 2013, 11:20 |
|
|
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
Re: Crear Base De Datos SQLITE Por Codigo
En este fragmento de código veo por primera vez esto:
Public Function newlibro() As Boolean
' Tabla de la ficha de registro de libros
Dim hTable As Table
If Not hCon.Tables.Exist("libro") Then
hTable = hCon.Tables.Add("libro")
With hTable.Fields
.Add("idlib", db.Serial) ' Identificador - Id
.Add("titlib", db.String, 40) ' Titulo
.Add("sublib", db.String, 40) ' Subtitulo
.Add("autlib", db.Integer,, 1) ' R -> Autor
.Add("collib", db.Integer,, 1) ' R -> Coleccion
.Add("edilib", db.Integer,, 1) ' R -> Editorial
.Add("genlib", db.Integer,, 1) ' R -> Genero
.Add("paglib", db.Integer) ' Numero de paginas
.Add("siplib", db.String) ' Sipnosis argumental
.Add("isbnlib", db.String, 14) ' ISBN - Numero de identificacion
.Add("stdlib", db.Boolean,, True)
End With
hTable.PrimaryKey = ["idlib"]
hTable.Update
Endif
End
Y observo esto, por poner una.
...
.Add("autlib", db.Integer,, 1) ' R -> Autor
Cuando fui a la ayuda de gambas encontré que el ultimo valor es tipo Variant.
¿ Es así como se relacionan las tablas usando esta función ?. Dicen que si este valor no se especifica su valor es nulo.
Solo le ha dado un valor 1, saltándose el tamaño del campo.
Referencia:
http://www.gambasdoc.org/help/comp/gb.db/.table.fields/add?v3
Saludos
=================== Gambas Básico
"No es un bug, es una característica no documentada"
|
#7 Sabado, 11 May 2013, 12:27 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
Re: Crear Base De Datos SQLITE Por Codigo
De lo de si es función o procedimiento por las prisas... yo qué sé, que ni me acuerdo, oiga.
De lo de crear por código, yo lo hago con sql. Hay una forma muy simple.
Creas la tabla con sqliteman, por ejemplo. Luego botón derecho y "describe table". Ahí te muestra el código de definición de la tabla. Copiar y pegar en una .exec de la conexión y todo listo.
No será lo más ortodoxo, pero es lo más simple.
Saludos.
|
#8 Sabado, 11 May 2013, 14:11 |
|
|
|
Temas parecidos
Temas parecidos
|
Página 1 de 1
|
Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado Usuarios registrados conectados: Ninguno
|
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
|
|
|
|
|