[AYUDA]Extraño Comportamiento de SQLite

Iniciado por Skeletron, 25 Octubre 2009, 04:26 AM

0 Miembros y 1 Visitante están viendo este tema.

Skeletron

Hola señores.. Les comento que a codigo fuente, creo un archivo SQLite de base de datos, y al crearle la siguiente tabla: no me da error:

       Dim SQLconnect2 As New SQLite.SQLiteConnection()
        Dim SQLcommand2 As SQLite.SQLiteCommand
        SQLconnect2.ConnectionString = "Data Source=" & Database & ";"
        SQLconnect2.Open()
        SQLcommand2 = SQLconnect2.CreateCommand
        'SQL query to Create Table
        SQLcommand2.CommandText = "CREATE TABLE Efemerides(Mes adfgq34tq3f, Dia VARCHAR, Texto VARCHAR, Version INTEGER);"
        SQLcommand2.ExecuteNonQuery()
        SQLcommand2.Dispose()
        SQLconnect2.Close()

han visto que creo una tabla llamada: Efemerides, y un campo se llamará: Mes y será del tipo: "adfgq34tq3f"
obviamente que ese no es un TIPO de datos.. ni INTEGER ni nada... Sinembargo me crea la tabla sin dar ningun tipo de error, y para peor aun: ME PERMITE INGRESAR DATOS :O
Ahora realmente dudo que las tablas que he creado se hayan creado con el tipo de datos que yo quiero..
Por lo que supongo, deben crearse del tipo "texto", pero cuando pongo: INTEGER, se creará tambien del tipo texto?? WTF??? quien me da una solucion???



(este es otro post de prueba que hace falta un apartado de BASES DE DATOS)

^Tifa^

#1
Te aseguro que al leer este post, pense que SQLite tenia un bug enorme (Ya que eso que hiciste en otra base de datos relacional... jamas te permitiria).

Pero esta semi explicado en su website  ;)  Te hago un mini-resumen

Citar

La mayoría de los motores de base de datos SQL (todos los motores de base de datos SQL que no sean de SQLite) utilizan tipos de datos estáticos, sin embargo en SQLite el tipo de datos es dinamico.

La diferencia entre una y la otra es...

Tipo de datos Estaticos : Aqui el tipo de datos a acceptar esta determinado por el campo donde se almacena el registro. Digase que si tienes un campo (Nombre Varchar) no podras insertar datos INTEGER u otro aqui solo caracteres, porque asi esta definido estaticamente en el campo en cuestion.

Tipos de datos Dinamicos: Aqui el tipo de datos a acceptar esta determinado en tiempo real acorde a lo que el usuario inserte y no al tipo de datos que tiene definido el campo en cuestion. Digase que si tienes un campo (Nombre Varchar) Si es posible que insertes un dato INTEGER o un DECIMAL u otro... ya que el tipo de datos a recibir en un campo lo define el valor que insertes en dicho campo y no la definicion que le diste al campo en cuestion.

Por lo tanto, como el funcionamiento de tipos de datos en SQLite es dinamico y no estatico (como en otras DB) por ende es posible hacer cosas que no son posibles en otras bases de datos.


http://www.sqlite.org/datatype3.html

Por ende, podrias crear una tabla con campos con tipos de datos 'CASITA' o 'NONE' y no importaria (En SQLite) ya que el definira que tipo de datos lleve ese campo cuando le ingreses el primer registro... en resumen, en esta base de datos aparentemente puedes meter cualquier tipo de datos en cualquier campo  :-\  ya que no controla lo que guarda... (A excepcion como dice su website, si tienes definido una llave primaria de tipo INTEGER aqui si que ya no puedes insertar datos caracteres en dicho campo, pero solo ahi aplicaria)

Cruel pero cierto....  :P

Skeletron

Con lo que vengo leyendo, me comentas que basicamente SQLite es una MIRTHA?

^Tifa^

#3
Ohh lo siento, no se que es una MIRTHA  ;D

Lo que queria decirte es, que segun su web en SQLite el tipo de datos que recibe un campo, no lo define el campo en cuestion (Como en otras base de datos), sino que el tipo de datos que recibe un campo lo define en tiempo real el dato que insertes en un campo. Por ende si tu declaras en tu tabla un campo (Fecha DATE) y le insertas como registro 'MARIO' el lo acceptara lol  :xD 

Suena un poco cruel, pero me sorprende la poca factibilidad que lleva esta base de datos, primeramente no posee un usuario que controle permisos sobre objetos ni tablas, tampoco requiere contraseña, y encima de esto los campos de una tabla acceptan cualquier tipo de datos porque esos tipos de datos se definen en tiempo real cuando insertes un dato  :-\  entonces me pregunto para que posee tipos de datos? si a la larga el campo podra tener de tipo de datos 'Madera' y hara poco caso, la definicion se hara cuando yo empieze a insertar datos en ese campo... si son numericos pues SQLite asumira que ese campo es INTEGER aunque diga que es tipo 'Madera'  :¬¬ y si la segunda insercion en el mismo campo es de caracteres? pasara a manejarlo como VARCHAR??? y que pasa con el registro anterior insertado en el mismo campo entonces SQLite manejara el registro 1 del campo como INTEGER y el registro 2 como VARCHAR??  Correspondiendo ambos registros al mismo campo? No quisiera dar esto por hecho, pero si es asi....no es muy eficiente que se diga. Para proyectos chiquitos considero que estaria super bien usar este motor en vez de Access por ejemplo, pero para un proyecto serio .... no se  :-\

Skeletron