Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 2 de 2
Ir a la página Anterior  1, 2
 
Resumiendo: Mantener BBDD Con Comandos Gambas
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Re: Resumiendo: Mantener BBDD Con Comandos Gambas 
 
En la creación "por código" no encuentro la forma de decir que un campo es único.
Mas abajo se ve un pantallazo de gambas y al lado un gestor de sqlite3 en donde si se puede hacer que un campo sea unico.
 fields
¿Alguna idea?
Saludos.
 



 
tincho - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Resumiendo: Mantener BBDD Con Comandos Gambas 
 
Tienes que crear un índice único para ese campo. Colección indexes, igual que tables.
 




===================
No podemos regresar
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Resumiendo: Mantener BBDD Con Comandos Gambas 
 
shordi escribió:  
Tienes que crear un índice único para ese campo. Colección indexes, igual que tables.

ok, también funciono, pero tuve que crear el indice después de hacer el update, de lo contrario no lo creaba.
Gracias por la ayuda.
Saludos.

La función para crear una tabla con, por lo menos dos campos. Donde el primero es el PK y el segundo tiene asignado un indice para que los datos en ese campo sean únicos, se pueden agregar mas campos pero (en esta función) serán tipo "texto" y sin restricciones.

Public Function TableMake1(cnx As Connection, stxParam As String[]) As Integer ''<p>Crea una tabla en la conexion que se le pasa como parametro. Donde el orden de los paramentros dentro de la matriz debe ser el siguiente:</p><ul><li>0 Nombre de la tabla</li><li>1 Nombre del campo clave</li><li>2 Nombre del resto de los campos</li><li>N Nombre del ultimo campo</li></ul>

  Dim tbl As Table
  Dim int As Integer
  Dim strFKey As String 'Nombre del campo que sera Primary Key
  Dim strFIdx As String 'Nombre del campo indice para esta funsion sera uno solo, el siguiente al campo PK.
  Dim strFNme As String 'Nombre cambiante del resto de los campos.

  If cnx.Tables.Exist(stxParam[0]) = False Then
    cnx.Tables.Add(stxParam[0])
    tbl = cnx.Tables[stxParam[0]]
    With tbl
      For int = 1 To stxParam.Max
        Select int
          Case 1
            strFKey = stxParam[0] & stxParam[int]
            tbl.Fields.Add(strFKey, db.Serial)
          Case 2
            strFIdx = stxParam[0] & stxParam[int]
            tbl.Fields.Add(strFIdx, db.String)
          Case Else
            strFNme = stxParam[0] & stxParam[int]
            tbl.Fields.Add(strFNme, db.String)
        End Select
      Next
      tbl.PrimaryKey = [strFKey]
      tbl.Update()
      tbl.Indexes.Add(stxParam[0] & "_idx", [strFIdx], True) ' Hay que crearlo despues de tbl.Update() para que funcione.
    End With

  Endif

  If cnx.Tables.Exist(stxParam[0]) = True Then
    Return 1
  Else
    Return 0
  Endif

End
 

 



 
tincho - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Resumiendo: Mantener BBDD Con Comandos Gambas 
 
Citar:

ok, también funciono, pero tuve que crear el indice después de hacer el update, de lo contrario no lo creaba.


No puede ser de otra manera: cuando creas un índice la BD necesita acceder a todos los registros e indexarlos o rechazarlos o avisar de que no ha podido porque hay inconsistencia de datos. Si no has hecho el update la tabla no está en un estado consistente y no se puede hacer dicho recorrido.

Saludos
 




===================
No podemos regresar
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Resumiendo: Mantener BBDD Con Comandos Gambas 
 
Ahora me volví a frenar.
Quiero decir que un campo de los que creo por código sea una referencia a una clave foránea, pero no logro dar con la forma de hacerlo.

¿Alguna idea?
En algún punto de     With tbl ... end With ¿Es posible crear la clave foránea?

El código que uso para crear los campos y los indices es el siguiente:
If cnx.Tables.Exist(strTable) = False Then
    cnx.Tables.Add(strTable)
    tbl = cnx.Tables[strTable]

    With tbl
      tbl.Fields.Add(strFKey, db.Serial)
      tbl.Fields.Add(strFld1, db.Integer)
      tbl.Fields.Add(strFld2, db.Integer)

      tbl.PrimaryKey = [strFKey]
      tbl.Update()

      tbl.Indexes.Add(strTable & "_idx", [strFld1], True)

    End With
  Endif
 

 



 
tincho - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Resumiendo: Mantener BBDD Con Comandos Gambas 
 
Pues nunca lo he hecho. La creación de bases la suelo hacer con otras herramientas porque no es lo habitual con gambas, solo su uso. Cuando he necesitado crearlas han sido bases sqlite sencillas sin meterme en más honduras.

Así que en esas aguas navegas solo... ¡toma poesía!       
 




===================
No podemos regresar
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Resumiendo: Mantener BBDD Con Comandos Gambas 
 
shordi escribió:  
Pues nunca lo he hecho. La creación de bases la suelo hacer con otras herramientas porque no es lo habitual con gambas, solo su uso. Cuando he necesitado crearlas han sido bases sqlite sencillas sin meterme en más honduras.

Así que en esas aguas navegas solo... ¡toma poesía!       



Link



Wilsoooooooonnnnnn!!!!!!
 



 
tincho - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Resumiendo: Mantener BBDD Con Comandos Gambas 
 
Dándole vueltas al tema en la cama, creo que no sería difícil extender  la clase table con la propiedad "relations" y ahí especificar las tablas, campos y campos de relación, o algo así en la que indicas con qué campo de qué tabla se relaciona y después añadir la relación con un comando sql según el tipo de la conexión. Algo así (escribo al vuelo):

With tbl
   .Fields.Add(strFKey, db.Serial)
   .Fields.Add(strFld1, db.Integer)
   .Fields.Add(strFld2, db.Integer,'tbl2','field2')

   .PrimaryKey = [strFKey]
   .Update()
   .Relations.Add(strFld2,strtbl2,strFieldrelated2)
 

y la clase extendida sería más o menos :

inherits connection

property read relations as collection 'read porque se manipula con los métodos add y delete,colection para poder buscar por nombre de campo

private $relations as collection

public sub Add(campo,tablaRel,campoRel) 'añadimos la relación
   select case me.type
      case "sqlite" or "sqlite3" then
          comando sql adaptado a sqlite para crear la relación
      case "mysql"
          comando sql adaptado a mysql para crear la relación
   end select
   $relations.Add(campo,[tablaRel,campoRel])
end

public sub delete(campo,tablaRel,camporel)
  if $relations.exist(campo) then
        select case me.type
      case "sqlite" or "sqlite3" then
          comando sql adaptado a sqlite para eliminar la relación
      case "mysql"
          comando sql adaptado a mysql para eliminar la relación
   end select
   $relations.remove(campo)
end

Private Function relations_read() as string[]
.....return $relations
end
 


Ahora no tengo tiempo de ponerme a ello pero, como digo, no creo que fuese difícil.
Saludos.
 




===================
No podemos regresar
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Resumiendo: Mantener BBDD Con Comandos Gambas 
 
shordi escribió:  
...creo que no sería difícil extender  la clase table con la propiedad "relations" y ahí especificar las tablas, campos y campos de relación...

Seria un golazo.!!
Yo ahí en eso de extender las clases ya sabes que de momento no es lo mio.  
Estaría muy bien poder poner claves foráneas por código en las tablas.

Saludos.
 



 
tincho - 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 Gambas Y Comandos Via Ssh (SOLUCIONADO) Pablo-GNU General 13 Jueves, 24 Junio 2010, 23:13 Ver último mensaje
abarzuaf
No hay nuevos mensajes Ejecutar Comandos Shell Desde Gambas Como ... Elena General 6 Viernes, 03 Febrero 2012, 03:30 Ver último mensaje
Agamenon
No hay nuevos mensajes Unir Varios Comandos Terminal Desde Gambas... atonidas Aplicaciones/Fragmentos de Código 5 Lunes, 11 Noviembre 2013, 22:12 Ver último mensaje
jguardon
No hay nuevos mensajes Abrir O Ejecutar Un Proyecto Gambas Desde ... Shell General 5 Lunes, 29 Febrero 2016, 19:48 Ver último mensaje
Shell
 

Publicar nuevo tema  Responder al tema  Página 2 de 2
Ir a la página Anterior  1, 2

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 0 invitados
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