Autor |
Mensaje |
tincho
Analista Programador
Registrado: Noviembre 2014
Mensajes: 2565
Edad: 48 Ubicación:
|
Resumiendo: Mantener BBDD Con Comandos Gambas
Hola.
Generalmente uso SQL directamente para mantener las bases de datos de mis programas pero me gustaría aprender a usar bien el método Gambas.
Insertar un registro
¿Esto como se hace con comandos gambas?
Borrar un registro
resAdd = Connections["cnx"].Delete("tabla", "campo_id = &1", 3) ' Donde 3 es el valor de la clave
o
resAdd = cnx.Delete("tabla", "campo_id = &1", 3) ' Donde 3 es el valor de la clave
Modificar un registro
resMod=Connections["cnx"].Edit("tabla", "campo_id = &1", 3) ' Donde 3 es el valor de la clave
o
resMod=cnx.Edit("tabla", "campo_id = &1", 3) ' Donde 3 es el valor de la clave
Saludos.
|
#1 Lunes, 28 Noviembre 2016, 02:23 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
Re: Resumiendo: Mantener BBDD Con Comandos Gambas
Citar: Insertar un registro
¿Esto como se hace con comandos gambas?
Tienes que crear un Result de edición. más o menos así:
dim r as result
dim clave as integer
clave=3
r=miconexion.edit("tabla","clave=&1",clave)
r!nombrecampo="hola"
r!nombrecampo2="mundo"
r.update 'Aquí se produce la grabación
Ventajas
Como ves, a la hora de insertar los valores en los campos tienes libertad absoluta de poner lo que quieras y lo mejor, esta sintaxis es independiente del motor de base de datos, con lo que te vale para mysql, sqlite y postGresql indistintamente.
Desventajas
Es más lenta que utilizar directamente la sentencia sql. Para transacciones grandes en bucles, según circunstancias (bases de datos lejanas, conexiones a internet lentas, etc. etc.) puede llegar a ser infumable.
En esos casos ayuda muyo utilizar transacciones con el formato más o menos así
dim r as result
r=miconexion.exec("Select * from tabla")
Miconexion.Begin
while r.available
'comandos de actualización
'.....
'.....
r.movenext
wend
Miconexion.Commit
Eso acelera mucho las cosas pero nunca llega a ser tan rápido como una sentencia update masiva.
Sin embargo hay muchas veces que no es posible resumir en una sentencia sql todo lo que le quieres hacer a cada registro de un result. Esta técnica es en cuanto a flexibilidad absoluta.
Saludos
=================== No podemos regresar
|
#2 Lunes, 28 Noviembre 2016, 09:10 |
|
|
tincho
Analista Programador
Registrado: Noviembre 2014
Mensajes: 2565
Edad: 48 Ubicación:
|
Re: Resumiendo: Mantener BBDD Con Comandos Gambas
dim r as result
dim clave as integer
clave=3
r=miconexion.edit("tabla","clave=&1",clave)
r!nombrecampo="hola"
r!nombrecampo2="mundo"
r.update 'Aquí se produce la grabación
Shordi: Esto que pones es para modificar un registro, donde existe una clave en la tabla, en este caso "3". Yo pregunto como insertar un registro que no existe todavia en la base, y por lo tanto no existe la clave, en este caso "3".
Recuerda que en SQL cuando insertas en una tabla que tiene autoincremento o serial en la sentencia SQL se pone Null.
¿Como seria con comando gambas?
Saludos.
|
#3 Lunes, 28 Noviembre 2016, 18:59 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
Re: Resumiendo: Mantener BBDD Con Comandos Gambas
Efectivamente, se me ha ido la pinza...
La creación la haces con
dim r as result
dim clave as integer
clave=3
r=miconexion.create("tabla")
'Si usas una clave autoincremental no tienes que poner ningún valor en ese campo. Si no, será obligatorio que lo pongas, claro.
r!nombrecampo="hola"
r!nombrecampo2="mundo"
r.update 'Aquí se produce la grabación
=================== No podemos regresar
|
#4 Lunes, 28 Noviembre 2016, 19:23 |
|
|
tincho
Analista Programador
Registrado: Noviembre 2014
Mensajes: 2565
Edad: 48 Ubicación:
|
Re: Resumiendo: Mantener BBDD Con Comandos Gambas
Efectivamente, se me ha ido la pinza...
La creación la haces con
dim r as result
dim clave as integer
clave=3
r=miconexion.create("tabla")
'Si usas una clave autoincremental no tienes que poner ningún valor en ese campo. Si no, será obligatorio que lo pongas, claro.
r!nombrecampo="hola"
r!nombrecampo2="mundo"
r.update 'Aquí se produce la grabación
Ok, gracias, yo este codigo lo habia visto en el wikilibro de nuestor foro pero pensaba (equivocado) que era para crear una tabla
Saludos.
|
#5 Lunes, 28 Noviembre 2016, 19:54 |
|
|
tincho
Analista Programador
Registrado: Noviembre 2014
Mensajes: 2565
Edad: 48 Ubicación:
|
Re: Resumiendo: Mantener BBDD Con Comandos Gambas
Shordi: los comando gambas para hacer la operaciones básicas ya están claros me parece.
El otro tema es: Editar los datos en un formulatio.
Desde el grid (normal o de dbControles) se puede obtener el id del registro con el evento Click o DblClick [1], una ves se sabe la tabla y el id se pueden crear por código los controles en un formulario auxiliar o dentro del mimo en algún rincón. Pero acá viene el "viejo" problema de las claves foráneas.
¿En dbControles se crea una lista de tablas campos claves foráneas y campos de la tabla secundaria?
Si es así ¿Como se llama dicha lista?
[1]
Saludos.
|
#6 Martes, 29 Noviembre 2016, 13:22 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
Re: Resumiendo: Mantener BBDD Con Comandos Gambas
¿Intentas, acaso, hacer un phpmyadmin para gambas?¿Algo que te de mantenga las bases de datos y sus relaciones sin que tu escribas ni una linea de código? Eso se podría hacer, claro, pero no creo que valga la pena.
Tal como yo lo hago, para las relaciones tienes los dbcontroles, que se inventaron para eso. Ya te pasé un ejemplo aquí:
https://foro.gambas-es.org/viewtopic.php?f=5&t=5926
Pero no contestaste ni comentaste nada. Si algo no entiendes del mismo, dímelo.
Saludos.
=================== No podemos regresar
|
#7 Martes, 29 Noviembre 2016, 14:40 |
|
|
tincho
Analista Programador
Registrado: Noviembre 2014
Mensajes: 2565
Edad: 48 Ubicación:
|
Re: Resumiendo: Mantener BBDD Con Comandos Gambas
¿Y como se agrega, por código, una tabla a la base de datos?
Estoy intentando con esto de mas abajo, pero no funciona.
If mi_conexion.Tables.Exist("tablanueva") = False Then
mi_conexion.Tables.Add("tablanueva")
tbl = mi_conexion.Tables["tablanueva"]
With tbl
tbl.Fields.Add("id", db.Serial)
tbl.Fields.Add("nombre", db.String)
End With
Endif
la conexión esta abierta puedo insertar y editar datos en las tablas existentes pero no puedo agregar tablas nuevas.
|
#8 Sabado, 21 Enero 2017, 18:26 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
Re: Resumiendo: Mantener BBDD Con Comandos Gambas
Cuando hay un campo db.serial se requiere que sea primary key.
Prueba ésto:
If mi_conexion.Tables.Exist("tablanueva") = False Then
mi_conexion.Tables.Add("tablanueva")
tbl = mi_conexion.Tables["tablanueva"]
With tbl
tbl.Fields.Add("id", db.Serial)
tbl.Fields.Add("nombre", db.String)
End With
tbl.PrimaryKey = ["id"]
tbl.Update()
Endif
=================== No podemos regresar
|
#9 Sabado, 21 Enero 2017, 20:29 |
|
|
tincho
Analista Programador
Registrado: Noviembre 2014
Mensajes: 2565
Edad: 48 Ubicación:
|
Re: Resumiendo: Mantener BBDD Con Comandos Gambas
Shordi: Funciono perfecto !!
Gracias.
Ahora voy intentar el paso siguiente, las claves foráneas.
Saludos.
|
#10 Sabado, 21 Enero 2017, 20:39 |
|
|
|