Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   SQLite + String + Dbcombobox = (MEMO) ERROR (https://www.clubdelphi.com/foros/showthread.php?t=77492)

Furyxe 01-02-2012 05:12:06

SQLite + String + Dbcombobox = (MEMO) ERROR
 
Hola.

He puesto el titulo mas descriptivo que se me ha ocurrido. En definitiva el error es ese del titulo.

Yo tengo una base de datos SQLite, que debido a la poca cantidad de tipos que tiene los String tienen que ir con el tipo TEXT.

El problema viene a la hora de mostrarlo en delphi desde un DBCombobox, que en vez de mostrar el texto que quiero, muestra la palabra "(MEMO)" en todos los dbcombobox que sean String. En cambio los integer si los muestra bien.

Por otra parte, uso SQLite por el hecho de poder tener la DB en un archivo solo, y sin necesidad de que la persona que use el programa tenga que instalarse un servidor SQL.

Intente hacerlo con MySQL, pero no conseguia crear un archivo como el anterior, asi que tuve que hacerlo por SQLite.

A alguien se le ocurre alguna solucion??.

Desde ya, gracias ^^

Casimiro Notevi 01-02-2012 12:16:59

Supongo que tendrá algún tipo varchar, ejemplo:

Código SQL [-]
create table tbClientes (
  codigo integer not null,
  nombre varchar(64),
  ciudad varchar(24)
)

Busca en la documentación sobre tipos de campos.

Furyxe 01-02-2012 12:55:21

Hola.

A ver, yo estaba trabajando en SQL, y tengo, tal y como dices, varios campos varchar.

Pero dado que necesito trabajar en local, he tenido que pasarme a SQLite. Pero este tipo de archivos, no permite varchar, y este es transformado a tipo "TEXT".

Y este tipo TEXT no puedo mostrarlo bien en los dbcombobox que uso.

Ya he buscado informacion de los tipos antes de preguntar, y me he comido la cabeza. las soluciones que veo:
1-Trabajar en local con un archivo MySQL, sin instalar servidores, que creo que no se puede.
2-Buscar la manera de que se muestre bien las palabras con el SQLite.

Entonces vuelvo a la pregunta:
Como puedo hacer que el texto guardado en una base de datos SQLite se muestre en un dbcombobox, en vez de mostrarse "(MEMO)" en su lugar?

edito:
Aqui pongo el problema:
Notice that the type "VARCHAR" contains "CHAR" as a substring so it is considered text
En español y resumido:
El tipo VARCHAR tiene tipo CHAR como subcadena, y es considerado tipo TEXT en SQLite.

El varchar desde un MySQL si logro mostrarlo, pero el TEXT de SQLite no logro mostrarlo bien

Furyxe 01-02-2012 13:24:09

No me deja volver a editar mi mensaje. Asi que hago otro:

Pongo una imagen para que sea mas intuitivo el problema


Todos los campos donde pone (Memo), son tipos VARCHAR, que al pasar a SQLite, se convirtieron a tipo TEXT

Casimiro Notevi 01-02-2012 14:24:04

Pues, en teoría, un varchar debería transformarse en un text "normal y corriente", ¿cómo haces el traspaso de esos datos de la otra BD a la de sqllite?
Por cierto, ¿qué base de datos es la otra?, has dicho que trabajas en sql, pero no en cual, ¿postgresql, firebird, interbase, mysql...?

Furyxe 01-02-2012 15:06:19

Hola de nuevo.

La otra base de datos es MySQL(esta en el primer post), en su version 5.
Yo he trabajado decenas de veces con MySQL, y no he tenido ningun problema al mostrar datos. Pero como esta vez necesito una base de datos sin instalación de servidores, he pasado a SQLite(es la primera vez que hago uso de esta base de datos desde delphi).

Tambien remarcar que uso Zeos-lib para acceder a esos datos.

Los datos se transforman a traves de navicat. Realiza las transformaciones de forma automatica.
Tambien he intentado a modificar manualmente las propiedades y tipos de la tabla SQLite. Pero en los tipos de datos solo me deja:
-Integer
-Text
-Blob
y otro mas que no recuerdo, pero que tampoco me sirve.

Blob, se supone que es un "tipo" sin tipo, es decir, que coje los valores tal y como le llegan. Asi que intenté tambien hacerlo así, pero en ese caso, en vez de salir (Memo), salia (Blob).

He probado a crear una tabla nueva directamente en sqlite, sin pasar la estructura desde otra base de datos, pero el problema persiste.

Furyxe 01-02-2012 15:27:25

Arreglado.

Pongo aqui la solucion con la explicacion:

Como he comentado anteriormente, trabajo con navicat para las bases de datos.
A la hora de realizar la conversion desde MySQL a SQLite, el Varchar se convirtio a tipo TEXT.
Y al intentar modificar desde navicat el tipo de la columna, solo me salian 4:
-Integer
-Text
-Real
-Blob.

Tras todo, he intentado forzar el tipo Varchar. Es decir, desde el editor de tipos, en la columna he escrito "Varchar", y aunque navicat no me lo estaba contando como un tipo existente en SQLite, a la hora de guardar, se ha guardado bien. Y a la hora de trabajar desde Delphi, por fin salen los datos.


Quiero dar las gracias a Casimiro por la ayuda prestada ^^

Casimiro Notevi 01-02-2012 15:49:28

Cita:

Empezado por Furyxe (Mensaje 424073)
Quiero dar las gracias a Casimiro por la ayuda prestada ^^

Bueno, yo no he hecho nada, lo has solucionado tú mismo :)
Me alegro de que por fin lo hayas conseguido :)


La franja horaria es GMT +2. Ahora son las 14:26:40.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi