Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Ayuda con campo del tipo fkLookup (https://www.clubdelphi.com/foros/showthread.php?t=22207)

slayer6969 09-06-2005 08:56:44

Ayuda con campo del tipo fkLookup
 
Buenos dias, señores / as. Permitanme que les de las gracias de antemano por dedicar unos instantes a leer estas brebes lineas. Gracias.

Bueno, mi problema es el siguiente. Estoy desarrollando una pequeña aplicación en la que dispongo de diferentes tablas, entre estas, una que he llamado 'Pais', una que he llamado 'Provincia' y otra más que recoge información de estas dos y que he llamado 'Empresa'. La definición de estas es la siguiente:

* Pais:
- IdPais ( Integer ) ( PK )
- Pais ( Char(50) )

* Provincia:
- IdPais ( Integer ) ( PK )
- IdProvincia ( Integer ) ( PK )
- Provincia ( Char(50) )

* Empresa:
- IdEmpresa ( Integer ) ( PK )
- ...
- IdPais ( Integer )
- IdProvincia ( Integer )
- ...

Bien. He creado diferentes TTable para el acceso a estas tablas y en la definicion de los campos para la tabla 'Empresa', he incluido dos campos del tipo fkLookup, para el acceso a los valores de las tablas 'Pais' y 'Provincia', de la siguiente manera:

* tempresaPais:
- KeyFields -> 'IdPais'
- LookupDataset -> tbPais
- LookupKeyFields -> 'IdPais'
- LookupResultFields -> 'Pais'

* tempresaProvincia:
- KeyFields -> 'IdPais;IdProvincia'
- LookupDataset -> tbProvincia
- LookupKeyFields -> 'IdPais;IdProvincia'
- LookupResultFields -> 'Provincia'

El caso es que con el campo de búsqueda definido para la tabla 'Pais' ( tempresaPais ), todo funciona muy bien. Sin embargo con el definido para 'Provincia' ( tempresaProvincia ), siempre me saca un error 'tbEmpresa: Field 'IdPais;IdProvincia' not found'.

¿ Hay algun problema al intentar este tipo de busqueda utilizando diferentes campos?
¿ El problema reside al intentar guardar los valores en cada uno de los campos editados ?
¿ Alguna idea ?

Muchas gracias a todos.

Lepe 09-06-2005 15:04:15

Ojalá todos los mensajes del foro se explicasen así de bien, ha sido una delicia leer el mensaje, por ende, te doy la enhorabuena.

Falta por comentar el motor de bases de datos y las tablas, pero el problema parece surgir al incluir 2 campos separados por punto y coma en la propiedad keyFields.

Lo único que se me ocurre de momento es que al dar de alta una provincia, su id, contenga ya el pais, me explico:

Código:

codigoPais  Pais     
  34            España
  35            francia

codigoProvincia    Provincia
    34001                huelva
    34002                Malaga
    35001                París

En principio, los ceros que he añadido en el codigo de provincia no harían falta, (para no limitar a 999 provincias por pais), lo he añadido por claridad.

Espero que lo puedas aplicar, o que alguien dé otra forma de hacerlo.

Un saludo

slayer6969 10-06-2005 10:21:44

Ayuda con campo del tipo fkLookup
 
:)

Muchísimas gracias, Lepe, por tu respuesta.

Efectivamente, parece que el error se da al incluir diversos campos en la clave de búsqueda.

Seria una buena idea dotar al campo 'IdProvincia' de la tabla 'Provincia' de una codificación significativa, tal y como apuntas. En esta ocasión me he decidido a usar campos del tipo entero. Históricamente, había utilizado para estos casos siempre campos del tipo carácter, pero a medida que la tabla va creciendo, todo se vuelve más lento, al utilizar este tipo de claves. Así se podrían utilizar los 3 primeros carácteres para identificar el país, y los 4 siguientes para identificar la provincia. Luego para acabarlo de redondear, se podría validar cuando se insertara el nuevo registro que siguiera este formato ... anda, pues igual se podria realizar este tipo de validación aunque el campo sea entero. Gracias, Lepe, creo que podría montármelo de esta manera. :) Aunque lo cierto es que me gustaría averiguar el porque de ese error.

Respecto a la base de datos, estoy utilizando Interbase. Sin embargo uso los componentes genericos de acceso a bases de datos del BDE, pues me gustaría que fuera en este aspecto un poco versátil. Que te parece ?

Muchas gracias de nuevo por vuestro soporte. Y, bueno, si se os ocurre alguna nueva idea que pueda arrojar un poco más de luz al caso, estaría encantado de poder escucharla. :)

Lepe 18-06-2005 14:23:23

Interbase con BDE: Alternativas
 
Cita:

Empezado por slayer6969
Respecto a la base de datos, estoy utilizando Interbase. Sin embargo uso los componentes genericos de acceso a bases de datos del BDE, pues me gustaría que fuera en este aspecto un poco versátil. Que te parece ?

Bueno, parece que los gurús de Interbase y firebird no han visto este mensaje, (reconozco que ha habido muchisima actividad estos dias pasados en el foro) a ver si poniendolo el hilo arriba de los mensajes nuevos tenemos más suerte.

Lamento no poder contestar, pero todavia soy un novatillo con Firebird e Interbase.

Un saludo

slayer6969 23-06-2005 13:22:46

Sigo con el mismo problema ... :(
 
Bueno, señores, antetodo, gracias por toda su ayuda.

Continuo obsesionado con el mismo problema con el que iniciaba este hilo de debate, puesto que por encima de toda la estructura gerarquica de la base de datos que estoy montando, existe un primer nivel que es el de "empresa", por lo que prácticamente todas las búsquedas van a utilizar ese código como parte de la consulta.

Alguien podria decirme si conoce algun componente del tipo DBLookupComboBox que pueda integrarse en un DBGrid, y que pueda utilizar como KeyFields y LookupKeyFields diferentes campos ?

Muchisimas gracias

roman 23-06-2005 16:21:46

Cita:

Empezado por slayer6969
¿ Hay algun problema al intentar este tipo de busqueda utilizando diferentes campos?

No debería haber ningún problema. Al menos según la ayuda, KeyFields y LookupFields pueden una lista de campos separados por punto y coma.

La única observación en la ayuda que veo que podría ser relevante es:

Cita:

Empezado por ayuda de Delphi
Choose from the Key Fields drop-down list a field in the current dataset for which to match values. To match more than one field, enter field names directly instead of choosing from the drop-down list. Separate multiple field names with semicolons. If you are using more than one field, you must use persistent field components.

¿Has incluído los campos IdPais e IdProvincia en la lista de campos persistentes?

// Saludos


La franja horaria es GMT +2. Ahora son las 16:21:30.

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