Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   DBGRID muestra cosas distintas de la tabla (https://www.clubdelphi.com/foros/showthread.php?t=79273)

Aurepilo 20-06-2012 19:16:07

DBGRID muestra cosas distintas de la tabla
 
Buenas tardes, os comento:

Trabajo con adoquerys y dbgrid. Primero introduzco una serie de datos en la base de datos access sin problema. Si accedo a la base de datos se ven correctamente. Luego intento reflejarlos en el DBGRID de la siguiente manera:

Código:

dbgrid1.Enabled := false;
dbgrid1.datasource := Datasource1;
datasource1.Enabled := false;
DataSource1.DataSet := ADOQuery3;
ADOQuery3.SQL.Clear;
ADOQuery3.SQL.Add('SELECT IMPORTE, NOMBRE, FECHA FROM '+taula);
ADOQuery3.open;

Importe es un campo currency, Nombre es un campo text, fecha es un campo date. Pues bien

1. En la base de datos el importe es igual que en el dbgrid, funciona correctametne
2. en la fecha, el dbgrid me la pone a la inglesa, es decir mm/dd/aaaa pero la base de datos (que es como me gustaria a mi que saliera) lo tengo en dd/mm/aaaa
3. El nombre que es, por poner un ejemplo, 'Manolo', está correctamente en la base de datos pero en el dbgrid me dice que (WIDEMEMO)

Como puedo solucionarlo?

Gracias

roman 20-06-2012 19:24:04

Una fecha se guarda en la base de datos como un número real y es el manejador quien escoge el formato. En tu aplicación puedes usar la propiedad DisplayFormat del TDateTimeField asociado a tu campo Fecha, para que te muestre el dato en el formato deseado.

¿Cuál es el tipo de datos en Access que tienes para el campo nombre?

// Saludos

Aurepilo 20-06-2012 19:30:08

Bueno... he estado trasteando y creo que, como minimo el tema del nombre, tiene que ver con la forma de crear los campos... es una tabla que se crea de forma dinamica y el campo en cuestion que me da problemas lo creo como 'text'; Sin embargo, si lo intento crear como 'string' o como "char" me da más problemas aún, porque inexplicablemente el campo ocupa entonces todo el dbgrid y el resto de campos desaparecen.

Aurepilo 20-06-2012 19:34:01

Roman, ahora veo tu comentario. Como he dicho el nombre lo creo como text porque cualquier otro formato me da problemas... habia intentado hacerlo como char(x) pero entonces cuando intento recuperar los datos me da un resultado con tatos espacios en blanco como numeros falten para llegar a la x. Es decir, si es un campo char(10) y guardo el dato 'Manolo' me da 'Manolo____' (los _ son espacios en blanco). Esto es un problema, porque si luego tengo que comprar este dato con otra variable local, siempre me da negativo.

En cuanto a la fecha, ¿como eligo el formato si lo que hago es pasarlo a un dbgrid? Es decir... si lo pasara a una variable supongo que fieldbyname, etc. pero ¿como se elige el formato al pasar la fecha a una celda de Dbgrid?

Aurepilo 21-06-2012 10:36:48

Bueno, ya lo he solucionado... aunque no sé si de forma muy ortdoxa. Dejo la solución aqui:

Para establecer el formato datetime directamente en la celda del dbgrid:

Código:

If AnsiCompareText(Field.DisplayName, 'Fecha') = 0  then  TDateTimeField(Field).DisplayFormat:= 'dd/mm/yyyy';
Por otro lado, al crear la tabla he establecido el campo de texto como char(13) y despues para recuperar el valor uso Trim, que me elimina los espacios en blanco.


La franja horaria es GMT +2. Ahora son las 09:17:58.

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