Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Lazarus, FreePascal, Kylix, etc. (https://www.clubdelphi.com/foros/forumdisplay.php?f=14)
-   -   Nombre de columna con Ñ o ñ (https://www.clubdelphi.com/foros/showthread.php?t=88750)

Kenobi 26-07-2015 19:29:52

Nombre de columna con Ñ o ñ
 
Hola, tengo que acceder a campos cuyo nombre contiene caracteres especiales, en este caso ñ, hasta ahora lo habia resuelto accediendo por su posicion:

Código Delphi [-]
tabla.fields[X].asSTring etc

sin embargo dadas las muchas bd dentro de las cuales tablas con los campos en orden no estandarizado, en las mas viejas mi solucion anterior no funciona en todos los casos, como estoy usando lazarus no puedo simplemente:

Código Delphi [-]
tabla.fieldByName('conÑ').asString

la pregunta es: puedo hacer que lazarus me reconozca los nombres de columna aún con campos especiales....

Gracias.

por que lazarus por que es openSource, multiplataforma y lo mejor de todo gratis ....

Casimiro Notevi 26-07-2015 19:32:59

Supongo que Lazarus no tiene mucho que ver en eso, más bien será la base de datos que estás usando, que lo permita.
¿Y por qué no sirve usar el índice en lugar del nombre "en todos los casos"?, ¿en qué casos sí y en qué casos no?

Kenobi 26-07-2015 20:39:16

Algunos detalles
 
Hola amigos, voy a describir un poco mas el problema para dar contexto real del problema, para eso utilizare analogias:

imaginen un mismo negocio que posee 7 sucursales
en cada sucursal existe una base de datos para cada año (total 12 años = 12 bd)
luego van 7 sucursales por 12 bd
cada bd posee 5 tablas de las que intento obtener los datos en cuestión, y pasarlas como dice el librito a una bd con maximo 2 tablas que resuman todo el problema anterior, luego debo

1: recorrer cada sucursal
2: recorrer las 12 bd de cada sucursal
3 : recorrer las 5 tablas de cada bd

hasta acá pues si bien son muchas bd y tablas pues de que se logra se logra,
ahora bien para responder tu pregunta

Cita:

¿Y por qué no sirve usar el índice en lugar del nombre "en todos los casos"?, ¿en qué casos sí y en qué casos no?
la razón es que en las mas viejas bd el orden(incluso el numero de los campos) varian en cantidad y posición por tal
Código Delphi [-]
tabla.fields[indice]
no siempre funcionara y lamentablemente las tablas contienen nombres de campos con Ñ y lazarus no los reconoce de forma normal de modo que no puedo referenciarlos
Código SQL [-]
tabla.fieldByName('campo_con_ñ')

espero haber sido explicito...

y anticipándome a sus comentarios del porque esa estructura de datos, pues es una aplicación legada, nada que hacer ....

Gracias

P.D: por cierto Delphi si reconoce los campos con ñ lazarus no de modo que mas que la bd creo que es configuración o caracteristica de lazarus, y eso es lo que quiero solucionar ....

una vez mas gracias por tu interes .....

Casimiro Notevi 26-07-2015 21:10:16

¿Has dicho qué base de datos es?

Kenobi 26-07-2015 21:20:33

Access
 
Es msAccess ....

gracias

Casimiro Notevi 26-07-2015 21:44:55

Si usando el índice del campo te funciona, ya que son pocas sucursales, por qué no aprovechas y controlas por código para que use un índice u otro, según la sucursal de donde provenga la base de datos Por ejemplo:
Código Delphi [-]
// campos con nombres no estandar
case sucursal
  1: tabla.fields[3] .......
  2: tabla.fields[5] ......
  3,4,5: tabla.fields[2] ....
  6,7: tabla.fields[8] ...
end

Kenobi 26-07-2015 21:59:21

ya pense esa alternativa
 
claro que seria posible, lamentablemente no hay uniformidad entre bd entre sucursales ni mucho menos entre tablas
por tal implicaría hacer al menos tres condicionales para resolver lo cual es tan laborioso como reformatear las tablas que tambien es una opción valida, ahora bien es un paliativo, creo es mas estoy convencido que se debe poder hacer con lazarus pensando en futuros desarrollos .....

incluso creo que la opción de reformatear las tablas es mejor, la verdad en lo personal no creo que sea correcto "parchear" el codigo, este debe ser lo mas genérico posible (cosas mias)

de todos modos meditare la factibilidad de las opciones, en espera de hacer a lazarus "multilingue"

Gracias ....

Casimiro Notevi 26-07-2015 22:05:23

A ver si puede ayudarte alguien que haya usado más Lazarus.
Cuando pones algo así, ¿qué error muestra?
Código Delphi [-]
tabla.fieldbyname('niño_pequeño')

Kenobi 26-07-2015 22:12:18

Muestra error de campo no encontrado
 
y si lo asocias a un grid te muestra como nombre de columna "ni" y trunca lo demas, mas sin embargo no puedo acceder a la columna por ese "ni" tampoco,

Ñuño Martínez 27-07-2015 10:46:45

Cita:

Empezado por Kenobi (Mensaje 494875)
claro que seria posible, lamentablemente no hay uniformidad entre bd entre sucursales ni mucho menos entre tablas

Pero, ¿no son todas estas sucursales del mismo negocio? Si es así, el problema es un error de diseño y un desperdicio de recursos. Un negocio debería usar el mismo programa para el mismo proceso en todas las sucursales.

Kenobi 27-07-2015 13:11:26

Es cierto lo que dices
 
Cierto, es un mismo negocio con N sucursales, todas con la misma bd cada año pero en años anteriores se usaban menos campos, la aplicación legada que las maneja si entiende eso de los campos con Ñ ya que se lleva muy bien con access (ambos de microsoft) , la idea hoy dia es "modernizar" el esquema migrando la data a una nueva estructura que permita como minimo usar la arquitectura de red a fin de centralizar las cosas, estoy decidido a hacerlo en lazarus, de hecho llevo al memos un 40 % de la aplicación y esto no es mas que un problemas mas a resolver, me gustaría saber como hacer que lazarus se entienda con las Ñ para este y futuros desarrollos(ojo yo no uso caracteres especiales en mis desarrollos) pero uno nunca sabe con que otro proyecto te tocara migrar a futuro..

Agradecido por sus respuestas, espero que aparezca alguien con la solución, mientras tanto sigo trabajando.

Saludos

Casimiro Notevi 27-07-2015 13:16:14

Mira en la web de Lazarus, tienen unos foros donde encontrarás a algunos amigos.
Aunque allí usan el inglés.

Kenobi 27-07-2015 13:22:00

Gracias
 
ya postee alli, pero no son buenas las noticias....aun


La franja horaria es GMT +2. Ahora son las 00:34:52.

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