https://foro.gambas-es.org/viewtopic.php?f=3&t=247&p=2210#p2210
-----------------------------------
ahtonio
Sabado, 30 Enero 2010, 00:44

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:

[code linenumbers=false syntax=gambas]
' 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 
[/code]

Solo es un ejemplo, pero completo y espero que le ayude a alguien.
Un abrazo


