Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > Lazarus, FreePascal, Kylix, etc.
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-07-2015
Kenobi Kenobi is offline
Miembro
 
Registrado: mar 2007
Posts: 191
Poder: 18
Kenobi Va por buen camino
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 ....
Responder Con Cita
  #2  
Antiguo 26-07-2015
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
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?
Responder Con Cita
  #3  
Antiguo 26-07-2015
Kenobi Kenobi is offline
Miembro
 
Registrado: mar 2007
Posts: 191
Poder: 18
Kenobi Va por buen camino
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 .....

Última edición por Casimiro Notevi fecha: 26-07-2015 a las 20:43:30.
Responder Con Cita
  #4  
Antiguo 26-07-2015
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿Has dicho qué base de datos es?
Responder Con Cita
  #5  
Antiguo 26-07-2015
Kenobi Kenobi is offline
Miembro
 
Registrado: mar 2007
Posts: 191
Poder: 18
Kenobi Va por buen camino
Access

Es msAccess ....

gracias
Responder Con Cita
  #6  
Antiguo 26-07-2015
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
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
Responder Con Cita
  #7  
Antiguo 26-07-2015
Kenobi Kenobi is offline
Miembro
 
Registrado: mar 2007
Posts: 191
Poder: 18
Kenobi Va por buen camino
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 ....
Responder Con Cita
  #8  
Antiguo 26-07-2015
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
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')
Responder Con Cita
  #9  
Antiguo 26-07-2015
Kenobi Kenobi is offline
Miembro
 
Registrado: mar 2007
Posts: 191
Poder: 18
Kenobi Va por buen camino
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,
Responder Con Cita
  #10  
Antiguo 27-07-2015
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Cita:
Empezado por Kenobi Ver Mensaje
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.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #11  
Antiguo 27-07-2015
Kenobi Kenobi is offline
Miembro
 
Registrado: mar 2007
Posts: 191
Poder: 18
Kenobi Va por buen camino
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
Responder Con Cita
  #12  
Antiguo 27-07-2015
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Mira en la web de Lazarus, tienen unos foros donde encontrarás a algunos amigos.
Aunque allí usan el inglés.
Responder Con Cita
  #13  
Antiguo 27-07-2015
Kenobi Kenobi is offline
Miembro
 
Registrado: mar 2007
Posts: 191
Poder: 18
Kenobi Va por buen camino
Gracias

ya postee alli, pero no son buenas las noticias....aun
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
extraer nombre de columna paul170185 Varios 3 01-03-2011 13:31:49
Saber nombre de una Columna gersonmaba SQL 2 30-09-2010 22:11:07
Nombre de columna en dbgrid joanajj Varios 4 30-07-2006 00:34:42
Capturar el nombre de una Columna DBGRID SaLvaGe OOP 1 22-09-2005 13:31:13
cambiar el nombre de una columna estudiante SQL 6 26-04-2005 20:36:37


La franja horaria es GMT +2. Ahora son las 14:36:41.


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
Copyright 1996-2007 Club Delphi