Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Problema Con Campo Indice Autoincremental No Reconocido
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Problema Con Campo Indice Autoincremental No Reconocido 
 
Estimados,

Creo mi primer post luego de comenzar mi proyecto de administración de condominio.

diseñe dos tablas en la aplicacion Kata Kuntur como se ve en la imagen siguiente

 condo1

Donde se puede ver como están enlazadas por el id_comunidad. Luego genero el codigo para crear la BD SQLite como se ve en la siguiente imagen

 condo2

veo que agrega el tipo de campo interger y el autoincrement la propieda not null y la key.

hago un simple insert a la tabla asumiendo que todo va a funcionar y me envia el error de que no puede crear por problemas con la key. probe varias formular de crear el insert... hasta que al mirar como lo reconocia gambas en su propio editor de BD veo que solo esta como integer, y solo para probar lo cambie a serial.

para mi sorpresa creo el registro en la tabla maestra sqlite_sequence y ademas reacomodo los numeros serialisandolos dentro de la tabla

quedando como se ve en la imagen

 condo3

 mi pregunta ahora es... como se que tipo tiene el campo?, esta mala la instruccion sql del editor?...

ya puedo seguir programando, pero me quedan esas dudas?

estoy usando
Mageia = 5
gambas = 3.6.2
componente = gb.sqlite3
 



 
chaskux - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Problema Con Campo Indice Autoincremental No Reconocido 
 
Citar:
mi pregunta ahora es... como se que tipo tiene el campo?, esta mala la instruccion sql del editor?...

Tienes que ser consciente de que gambas no trata con ninguna base de datos "a pelo" entre tu código y la BD hay una capa de interpretación de tipos y demás peculiaridades de cada una de las BD.
gambas tiene sus propios tipos de campo y el driver, en este caso el componente gb.db.sqlite3, los traduce a los tipos propios de la BD.
La nomenclatura de primary key not null autoincrement en gambas, a la hora de definir el tipo de campo se traduce como serial. Ten en cuenta que esa nomenclatura no te valdría para Mysql, por ejemplo, pero usando serial te vale para los dos motores.

Otro asunto es la peculiaridad de SQLite como BD, tan distinta de las BD tradicionales, al punto de que en su página web titulan "SQL tal como lo entiende SQLite"... pero eso es otra historia...

Saludos.
 




===================
No podemos regresar
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Problema Con Campo Indice Autoincremental No Reconocido 
 
Concuerdo con lo que mencionas, y puesto que entiendo que gambas usa capa de abstracción para acceder a las distintas BD y así poder generar las clases que te permitan trabajar con todas ellas de manera más transparente. También entiendo que SQlite es suuuuper especial en el trato de sql estándar y sus bemoles...me quedo claro anoche.

me llama la atención el tratamiento que le dio al campo en particular y que al cambiarlo en la interfaz que tiene gambas me dejara pasar y además accediera a la tabla interna de manejo de secuencias. Ahora como dices y por el hecho de hacer traducción algo extra debe hacer con la BD..

voy a revisar más material de SQLite y herramientas para levantar un BD ya que ninguna de las que me dejo instalar mageia de sus repositorios me indico que eran autoincrement y me dieran la opción de hacerlo. también la app para diagramar no fue capaz de generar esas instrucciones.

investigare un poco más sobre este tema para dar una respuesta a lo planteado.

independiente que la aplicación la pense para trabajar alone in the dark..    .. si me encuentro con la situación de restaurar la BD tengo que ser capaz de lograr el mismo efecto.

saludos
 



 
chaskux - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Problema Con Campo Indice Autoincremental No Reconocido 
 
Para manejar las bd SQLite a pelo yo utilizo Sqliteman. Sin problemas y correcto. No sé si Mageia lo tiene en sus repositorios. Mint y Ubuntu sí.
Saludos
 




===================
No podemos regresar
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Problema Con Campo Indice Autoincremental No Reconocido 
 
shordi escribió: [Ver mensaje]
Para manejar las bd SQLite a pelo yo utilizo Sqliteman. Sin problemas y correcto. No sé si Mageia lo tiene en sus repositorios. Mint y Ubuntu sí.
Saludos

También esta DB Browser for SQLite que no esta nada mal, pero no logre encontrar la manera de crear vistas con el todavía, pero para todo lo demás funciona muy bien.

Saludos.
 



 
tincho - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Problema Con Campo Indice Autoincremental No Reconocido 
 
bueno chicos, probando y probando logre tener unas cosas claras

1.- ojo con la definición de los campos ya que no todos los tipos que uno conoce de otras lados coinciden
Sqlite datatypes

2.- Al definir una tabla con la instrucción  "INTEGER PRIMARY KEY AUTOINCREMENT   NOT NULL ,"  definitivamente si toma solo el valor como un campo que se incrementa solo y al realizar un insert se pasa el NULL..

Este codigo muestra como creo el registro con un Null
conectar.abrirConexion()
    conectar.connDb.Exec("PRAGMA foreign_keys = ON;")
    Resultado = conectar.connDb.Create("Condominios")
    Resultado!id_condominio = Null 'RegistroCondominio.id_condominio
    Resultado!descripcion_condominio = RegistroCondominio.descripcion_condominio
    Resultado!vigencia_condominio = RegistroCondominio.vigencia_condominio
    Try Resultado.Update()
    If Error Then
      Error.Raise(mdlErrores.error0007 & " " & Error.Text)
    Endif
  conectar.cerrarConexion()
 


use una clase de transporte de datos donde definí el tipo boolean, así que entre amigos conversan ellos y se realiza la transformación

Property vigencia_condominio As Boolean
Private h_vigencia_condominio As Boolean
 


3.- Cuando consultas por un campo boolean al usar la constante "TRUE" o "FALSE" te pone una "T" o una "F" por lo que hay que poner a mano el "0""o el "1"

Esto no funciona
If vigenciaCondominio <> "" Then
      strSQl &= strCon & " vigencia_condominio = '" & IIf(String.Lower(vigenciaCondominio) = "vigente", True, False) & "'"
    Endif
 


Esto Si funciona
If vigenciaCondominio <> "" Then
      strSQl &= strCon & " vigencia_condominio = '" & IIf(String.Lower(vigenciaCondominio) = "vigente", 0, 1) & "'"
    Endif
 


en esta imagen como se ve segun SQLITEMAN y que serian los valores reales del campo
 condo4

aca como se ven los valores segun gambas     
 condo5

al que si hacen el select con vigencia = 'T' / vigencia = T / vigencia = True no muestra nada pero si pones vigencia = 0 ..  
 condo6

Asi que ya tengo harto mas clara la película.... espero que esta pequeña reflexión ayude a alguien que juegue con esta BD y gambas y que ademas los #$$#$       el jugar con los registros
 



 
chaskux - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Problema Con Campo Indice Autoincremental No Reconocido 
 
chaskux escribió: [Ver mensaje]
bueno chicos, probando y probando logre tener unas cosas claras

3.- Cuando consultas por un campo boolean al usar la constante "TRUE" o "FALSE" te pone una "T" o una "F" por lo que hay que poner a mano el "0""o el "1"

Esto no funciona
If vigenciaCondominio <> "" Then
      strSQl &= strCon & " vigencia_condominio = '" & IIf(String.Lower(vigenciaCondominio) = "vigente", True, False) & "'"
    Endif
 


Esto Si funciona
If vigenciaCondominio <> "" Then
      strSQl &= strCon & " vigencia_condominio = '" & IIf(String.Lower(vigenciaCondominio) = "vigente", 0, 1) & "'"
    Endif
 

...

No funciona lo primero y te ves obligado a hacer lo segundo porque no utilizas toda la potencia de los objetos de gambas.
Si en lugar de lo primero hicieras:
If vigenciaCondominio <> "" Then
     miresult=miconexion.exec(strCon & " vigencia_condominio = &1",  (String.Lower(vigenciaCondominio) = vigente))
    Endif
 

Dejas en mano del driver de gambas la conversión de tipos y demás. Además de ser más rápido es más directo y cómodo.

Saludos
 




===================
No podemos regresar
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Problema Con Campo Indice Autoincremental No Reconocido 
 
Pucha hombre,  pero que buen dato me has tirado... recien me di cuenta que el exec permite el paso de parámetros... tengo que armar bien el código para que me tome los parámetros, ya que armo la query de forma dinámica.
 



 
chaskux - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Problema Con Campo Indice Autoincremental No Reconocido 
 
shordi, excelente... he llegado a casa derecho a probar lo queme dices y despues de darme algunas vueltas en el aire el codigo quedo asi

    strSql = "select id_condominio, descripcion_condominio, vigencia_condominio from Condominios"
    strCon = " where "
    If CodigoCondominio <> "" Then
      strSql &= strCon & " id_condominio in ( &1 )"
      strCon = " and "
    Endif
    
    If descripcionCondominio <> "" Then
      strSQl &= strCon & " descripcion_condominio like '%&2%'"
      strCon = " and "
    Endif
    
    If vigenciaCondominio <> "" Then
      strSQl &= strCon & " vigencia_condominio = &3"
    Endif
    
    Try resultado = conectar.connDb.Exec(strSql, CodigoCondominio, descripcionCondominio, String.Lower(vigenciaCondominio) = "vigente")
    If Error Then
      Error.Raise(mdlErrores.error0005)
    Endif
 


al enviarle el numero del parámetro que debe rescatar, los demás los desprecia, eso estuvo bueno ya que primero pensé que tendría que hacer un tremendo ladrillo de código para determinar cual era el valido y la posición....
 



 
chaskux - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 

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