Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Problemas con los campos de una consulta SQL (https://www.clubdelphi.com/foros/showthread.php?t=96626)

michal 04-03-2024 15:36:03

Problemas con los campos de una consulta SQL
 
Hola a todos
Estoy usando C++Builder6 y quiero usar DisplayFormat para que en mi DBGrid, en las celdas cuyos valores son de moneda, me ponga el símbolo de $ y los valores decimales. Estoy usando esto:


Código Delphi [-]
((TNumericField*)ADOQuery1->FieldByName("contratos.monto_cto"))->DisplayFormat = "$ #,##.00";


Y no me funciona, me dice que no encuentra ese campo(a pesar de que la utilizo luego del ADOQuery1->Open();). El tema es que estoy usando varias tablas en mi consulta y al hacer SELECT debo usar cosas como esta "contratos.monto_cto, clientes.nombre_clte". Intenté usar alias, como "contratos.monto_cto AS monto", pero igual no lo encuentra. Sin embargo, si pongo un SELECT * FROM Tabla1, Tabla2..., si funciona. Al igual que si utilizo una consulta simple a una sola tabla.



Cómo pudiera resolver ese problema? Necesito que sea mediante código, porque son muchas consultas, y no deseo usar un TADOQuery para cada una.



Saludos

chenech 04-03-2024 15:58:22

A mi me funciona perfecto así y probé con TNumericField y también:

((TFloatField *)(FDMemTable1->FieldByName("TOTAL")))->DisplayFormat = "$ ###,##0.00";

o así:

((TNumericField *)(FDMemTable1->FieldByName("TOTAL")))->DisplayFormat = "$ ###,##0.00";

Casimiro Notevi 04-03-2024 16:03:32

Cita:

Empezado por michal (Mensaje 554727)
((TNumericField*)ADOQuery1->FieldByName("contratos.monto_cto"))->DisplayFormat = "$ #,##.00";


Seguramente quitando el "contratos."
Código Delphi [-]
((TNumericField*)ADOQuery1->FieldByName("monto_cto"))->DisplayFormat = "$ #,##.00";

michal 04-03-2024 19:23:21

No, no puedo quitar contratos porque es el nombre de una tabla; mi consulta es la siguiente:
Código SQL [-]
SELECT contratos.Id_cto,clientes.nombre_clte,contratos.fecha_cto,contratos.vigencia_cto,contratos.timeRest_  cto,contratos.monto_cto,
contratos.montoRest_cto,contratos.tipoMoneda_cto,contratos.supl_cto FROM contratos, clientes WHERE clientes.Id_clte=contratos.Id_clte AND contratos.timeRest_cto <= 0
Y como dije anteriormente intenté usar ALIAS es la consulta como contratos.timeRest_cto AS timeRest_cto, y no funciona, dce que no lo encuentra. Y necesito hacerlo por código, ya que son muchas consultas y no quiero usar tantos TADOQuerys.

Si sustituyo todos los campos de mi consulta por un "*" sí me funciona, pero aparecen otros campos en el DBGrid que no me interesa mostrar, por eso uso ese tipo de consulta.

chenech 04-03-2024 19:25:50

Si, como comentó Casimiro, que yo no lo había visto en mi respuesta anterior, es el alias, el resultado del nombre de la consulta de un SQL es siempre sin el alias, prueba que no te cuesta nada y verás que funciona.
En el ejemplo que yo te puse la sentencia es VENTAS.TOTAL

michal 04-03-2024 19:28:44

Cita:

Empezado por chenech (Mensaje 554728)
A mi me funciona perfecto así y probé con TNumericField y también:

((TFloatField *)(FDMemTable1->FieldByName("TOTAL")))->DisplayFormat = "$ ###,##0.00";

o así:

((TNumericField *)(FDMemTable1->FieldByName("TOTAL")))->DisplayFormat = "$ ###,##0.00";


El problema es que no es un campo de una tabla, sinó una consulta que incluye a varias tablas, es por eso que el nombre del campo es contratos.monto_cto , y no monto_cto solamente. Entonces el problema es que si especifíco el nombre de la tabla junto con el nombre del campo, no me funciona. Solo funciona si quito el nombre de la tabla. Pero así no puede ser.

Casimiro Notevi 04-03-2024 19:51:48

Cita:

Empezado por michal (Mensaje 554735)
El problema es que no es un campo de una tabla, sinó una consulta que incluye a varias tablas, es por eso que el nombre del campo es contratos.monto_cto , y no monto_cto solamente. Entonces el problema es que si especifíco el nombre de la tabla junto con el nombre del campo, no me funciona. Solo funciona si quito el nombre de la tabla. Pero así no puede ser.

¿Por qué no puede ser? :rolleyes:

chenech 04-03-2024 19:59:19

Pon esto que te comentó Casimiro y cuentas como te fue, manteniendo el alias en la consulta SQL si quieres:
Código Delphi [-]
((TNumericField*)ADOQuery1->FieldByName("monto_cto"))->DisplayFormat = "$ #,##.00";

No es quitar el alias de la consulta SQL sino de la linea anterior.

michal 04-03-2024 20:29:47

Tienen Razón, SÍ Funciona, es que yo estaba copiando y pegando y tenia un error en el componente TADOQuery, estaba usando el que no era.


También estaba ofuscado por la idea de que cómo el builder iba a saber el campo a cual tabla pertenecía, y es que esos campos, los monetarios, no se repiten en otras tablas.


Una vez más Gracias a Todos


La franja horaria es GMT +2. Ahora son las 00:22:02.

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