Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Crear Base De Datos SQLITE Por Codigo
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje 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.
 



 
destroyer - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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.

 
 



 
soplo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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 
fabianfv - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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
 



 
ahtonio - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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.
Sub Add ( Name As String, Type As Integer [ , Length As Integer, Default As 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"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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.
 



 
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 No Puedo Crear Una Base De Datos JosueCR Bases de Datos 3 Lunes, 09 Agosto 2010, 05:50 Ver último mensaje
JosueCR
No hay nuevos mensajes Ayuda Para Completar Codigo De Respaldo De... kexxya Bases de Datos 1 Jueves, 02 Junio 2011, 14:54 Ver último mensaje
shordi
No hay nuevos mensajes Problema Al Crear Base De Datos soldadozero Bases de Datos 19 Jueves, 29 Agosto 2013, 14:39 Ver último mensaje
Dani26
No hay nuevos mensajes Crear Base De Datos Sqlite Con Codigo Como? v3ctor Bases de Datos 19 Sabado, 23 May 2015, 10:27 Ver último mensaje
shordi
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

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