|
Página 1 de 2
|
Crear Base De Datos Sqlite Con Codigo Como?
Autor |
Mensaje |
v3ctor
Analista Programador
Registrado: May 2013
Mensajes: 1786
Edad: 44 Ubicación: Uruguay
|
Crear Base De Datos Sqlite Con Codigo Como?
buenas, hasta ahora he conocido hacer una base de datos creándola con gambas ahora bien,
me interesa crear una base de datos desde el código así por ejemplo en vez de copiar una base de datos de una copia ya hecha, sencillamente crear una de cero con una sentencia sql.
pero aun no doy como crear una base de datos con el propio código gambas.
la idea de esto también es poder crear bases y tablas y verlas con el programita que hice el InfoDataBaseSql
alguna idea por donde empezar?
=================== Software libre, programación libre, vida libre es la Public function Libertad()as Invendible
Proyectos: VisorRV1960,Taller2015,Tanteador
https://sourceforge.net/u/v3ctor-full/profile/
Blog: http://novatocodegambas.blogspot.com.uy/
|
#1 Lunes, 04 May 2015, 21:57 |
|
|
jsbsan
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4175
Edad: 51 Ubicación: dos hermanas, sevilla
|
Re: Crear Base De Datos Sqlite Con Codigo Como?
V3ctor:
He encontrado un ejemplo en la web, y lo he subido a mi blog:
http://jsbsan.blogspot.com.es/2015/...na-base-de.html
Saludos
|
#2 Martes, 05 May 2015, 08:16 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
Re: Crear Base De Datos Sqlite Con Codigo Como?
Sólo una precisión: Eso del Gridview no es necesario para crear la base y las tablas.
Para eso basta con estas líneas:
DIM $hConn AS NEW Connection
DIM htable as table
'delete an existing test.sqlite, o sea, profilaxis
IF Exist(User.home & "/test.sqlite") THEN
KILL User.home & "/test.sqlite"
ENDIF
'create test.sqlite
$hConn.Open
$hConn.Databases.Add("test.sqlite")
$hconn.Close
'define the table sampleTable
$hconn.name = "test.sqlite"
$hConn.Open
hTable = $hConn.Tables.Add("sampleTable")
hTable.Fields.Add("s_seq", db.Integer)
hTable.Fields.Add("s_rndm", db.Integer)
hTable.PrimaryKey = ["s_seq"]
hTable.Update
Antes había un ejemplo guay en los antiguos ejemplos. Era uno que hacía una base de datos de imágenes, se creataba todo por código.
Ahora en la granja no está...
|
#3 Martes, 05 May 2015, 09:14 |
|
|
jsbsan
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4175
Edad: 51 Ubicación: dos hermanas, sevilla
|
Re: Crear Base De Datos Sqlite Con Codigo Como?
Shordi;:
Citar: Antes había un ejemplo guay en los antiguos ejemplos. Era uno que hacía una base de datos de imágenes, se creataba todo por código.
Ahora en la granja no está...
¿Cual era?
Si me lo dices lo subo a la granja (yo tengo la 3.5.4, y alli todavia estan los ejemplos)
|
#4 Martes, 05 May 2015, 09:39 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
Re: Crear Base De Datos Sqlite Con Codigo Como?
Creo que se llamaba picture dabase...
|
#5 Martes, 05 May 2015, 10:07 |
|
|
vuott
Analista Programador
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
|
Re: Crear Base De Datos Sqlite Con Codigo Como?
Hola v3ctor,
yo puse en el foro de gambas-it el enlace a este tu asunto.
Hay un aporte:
http://www.gambas-it.org/smf/index....3;boardseen#new
última edición por vuott el Martes, 05 May 2015, 14:43; editado 1 vez
|
#6 Martes, 05 May 2015, 14:42 |
|
|
v3ctor
Analista Programador
Registrado: May 2013
Mensajes: 1786
Edad: 44 Ubicación: Uruguay
|
Re: Crear Base De Datos Sqlite Con Codigo Como?
shordi y jsbsan
me da este error:
tengo instalados los dos componentes el sqlite3 y el de base de datos.
=================== Software libre, programación libre, vida libre es la Public function Libertad()as Invendible
Proyectos: VisorRV1960,Taller2015,Tanteador
https://sourceforge.net/u/v3ctor-full/profile/
Blog: http://novatocodegambas.blogspot.com.uy/
|
#7 Martes, 05 May 2015, 14:43 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
Re: Crear Base De Datos Sqlite Con Codigo Como?
Citar: Off topic
shordi y jsbsan
me da este error:
Tienes que acostumbrarte a intentar entender el código que se pone aquí. No se pretende dar una solución exacta de corta y pega tan sólo apuntar hacia dónde va el camino a seguir.
Dicho lo cual, para que funcione a la conexión hay que darle el camino y el tipo de base de datos...
Dim $hConn As New Connection
Dim htable As Table
'delete an existing test.sqlite, o sea, profilaxis
If Exist(User.home & "/test.sqlite") Then
Kill User.home & "/test.sqlite"
Endif
$hConn.Type = "sqlite"
$hConn.host = User.Home
'create test.sqlite
$hConn.Open
$hConn.Databases.Add("test.sqlite")
$hconn.Close
'define the table sampleTable
$hconn.name = "test.sqlite"
$hConn.Open
hTable = $hConn.Tables.Add("sampleTable")
hTable.Fields.Add("s_seq", db.Integer)
hTable.Fields.Add("s_rndm", db.Integer)
hTable.PrimaryKey = ["s_seq"]
hTable.Update
última edición por shordi el Martes, 05 May 2015, 16:26; editado 1 vez
|
#8 Martes, 05 May 2015, 16:26 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
Re: Crear Base De Datos Sqlite Con Codigo Como?
Vuott:
El código de tu colega muy clarito y apropiado.
|
#9 Martes, 05 May 2015, 16:30 |
|
|
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
Re: Crear Base De Datos Sqlite Con Codigo Como?
Hola!.
Lo que estoy viendo es que es más fácil encontrar ejemplos de gambas para crear las tablas desde códigos, pero no el código para ir añadiendo registros.
Si, en el ejemplo que Julio muestra.
Tengo uno que posiblemente sea de la comunidad, trata de la creación de una biblioteca, pero no se añaden registro.
Es del usuario Ahtonio.
'Ejemplo de Ahtonio
Public Sub Form_Open()
End
' 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 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
hCon.Close
hCon.Name = sDBname
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
Como veis en este caso no aparece el añadir registros.
No se si en gambas la creación de las bases de datos por códigos son algo más extensas que en Python.
Lo cierto es que sin tener mucha idea de base de datos con sqlite3, de un ejemplo que todo era texto, logré
crear una base de una forma muy sencilla. A ver si lo veo.
#!/usr/bin/python3
# Creando una base de datos en Sqlite3
# Existen muchos tipos de bases de datos en Python, para nuestro
# proposito vamos a usar Sqlite3, por un numero de razones
# La primera es que SQLite3 viene con Python
# Asi que si instalas Python, instalas Sqlite3
# Sqlite3 es la eleccion perfecto para muchas aplicaciones
# Es seguro, simple y no requiere un motor de base externo.
# Es autónomo, sin servidor, configuración cero y completamente
# transacional
# Es un motor de base de datos completamente capaz de ser
# increiblemente facil de usar
# Se debe importar el modulo sqlite3
import sqlite3
def main():
# De esta forma creamos la base de datos
# Tenemos una base, un archivo vacio y muy simple de hacer.
db = sqlite3.connect('test.db')
# En Python existen muchas opciones y metodos que tu puedes utilizar
# y tiene una gran potencia para trabajar con las bases de datos
# Vamos a ver que es una factoria de fila. (row factory)
# Nosotros diriamos db.row_factory = sqlite3.Row.
# Row factory permite especificar cuantas filas sera
# devuelta desde el cursor y por la función interna row_factory
# sqlite3.Row, es muy poderosa y muy sugerida para la mayoría de
# los propositos. La respuesta que vamos a tener es que mostrara
# objetos filas, en vez de tuplas.
# <sqlite3.Row object at 0xb5e25c70>
# <sqlite3.Row object at 0xb5e25c40>
# <sqlite3.Row object at 0xb5e25c70>
# <sqlite3.Row object at 0xb5e25c40>
# Podriamos verlos como tuplas si quisieramos, o podriamos verlo
# como diccionarios. Que lo encontramos particularmente practicos
# ( Vamos a cambiar el bucle abajo).
db.row_factory = sqlite3.Row
# Ahora usaremos db.execute y vamos a darle algunas sentencias SQL
db.execute('drop table if exists test')
# Crearemos la tabla test y le daremos algunos campos
db.execute('create table test (t1 text, i1 int)')
# Ahora insertaremos valores en los campos contenido en los parentesis
# que nos permiten darle un valor
db.execute('insert into test (t1, i1) values (?, ?)',('one',1))
# Ahora repetiremos el proceso unas pocas veces y vamos cambiando
# valores
db.execute('insert into test (t1, i1) values (?, ?)',('two',2))
db.execute('insert into test (t1, i1) values (?, ?)',('threee',3))
db.execute('insert into test (t1, i1) values (?, ?)',('four',4))
# Y asi, vamos añadiendo registros en SQL, y ahora nos falta
# hacer el metodo commit() por que SQlite es una base transacional
# Almacenamos estos valores, en caso de que no los necesitemos
db.commit()
# Clasificamos por el campo t1
# cursor = db.execute('select * from test order by t1')
# Si quisieramos ordenar por el campo i1 seguido de t1, simplemente
# cambiamos la sentencia SQL
cursor = db.execute('select i1,t1 from test order by i1')
for row in cursor:
# Asi que si yo digo que es como un diccionario. Estoy
# creando un diccionario de objetos basados en iterable,
# por que fila es un iterable.
# print (dict(row))
# La salida sería de esta forma:
# {'i1': 1, 't1': 'one'}
# {'i1': 2, 't1': 'two'}
# {'i1': 3, 't1': 'threee'}
# {'i1': 4, 't1': 'four'}
# Si quisieramos decir filas hasta t1, obtendriamos los
# objetos t1
# print (row['t1'])
# Si quisieramos obtener rodos los datos
print (row['t1'],row['i1'])
if __name__ == "__main__": main()
Siempre tendremos una gran similitud. Bueno, esto me lo he ido currando viendo los vídeos en ingles..
( Parece una forma más corta a simple vista, tengo que verlo mejor. Naturalmente los ejemplos son distintos)
Saludos
=================== Gambas Básico
"No es un bug, es una característica no documentada"
|
#10 Lunes, 18 May 2015, 13:31 |
|
|
|
Temas parecidos
Temas parecidos
|
Página 1 de 2
|
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
|
|
|
|
|