Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-07-2003
Avatar de JamesBond_Mx
JamesBond_Mx JamesBond_Mx is offline
Miembro
 
Registrado: jul 2003
Ubicación: Poza Rica, Veracruz, México
Posts: 81
Poder: 21
JamesBond_Mx Va por buen camino
Problema Con Relacion de Tablas

Hola de nuevo, tengo un problema, les explico:

Tengo Dos tablas a una de ellas le llamo Anomalias y a la otra instalaciones.

En la Primera se capturarán todas las anomalias que presentan las instalaciones Y en la segunda están capturadas las instalaciones que atendemos, la tabla Anomalias tiene su campo llave llamado Cve_princ, y un campo con el que quiero relacionarla con la otra llamado Cve_inst, La tabla Instalaciones tiene su campo clave llamado Cve_Inst, los dos campos tienen las mismas caracteristicas (Tipo de datos, tamaño, etc.),
En la form donde voy a realizar la captura de las anomalias tengo dos DataSource y dos TTable uno por cada tabla, en las propiedades de la tabla Anomalias pongo que el MasterSource es el DataSource de la tabla instalaciones y que el campo por el que se relacionan es Cve_Inst, ahora coloco un DBLookupComboBox Que los datos obtendrá de la tabla Instalaciones y actualizara la tabla Anomalías, y en las propiedades de ste pongo esto:

DataSource SAnomalias (DataSource de Anomalías)
DataField:Cve_Inst
ListSoruceSInst (DataSource de Instalaciones)
KeyField:Cve_Inst

Al correr la aplicación de prueba me manda el error de que no acepta DataLinks circulares, pero si no le pongo nada en DataSource y Datafield, el combo si me muestra los datos de la tabla instalaciones.

¿Que estoy haciendo mal?

Gracias por la atención.
Responder Con Cita
  #2  
Antiguo 01-07-2003
andres1569 andres1569 is offline
Miembro
 
Registrado: may 2003
Posts: 908
Poder: 22
andres1569 Va por buen camino
Hola agente 007:

Con tanto chino mandarín incordiando entre el código, es normal que falle (me refiero a los smilies traicioneros que te han aparecido en el mensaje).

No sé exactamente por que colocas un TDBLookUpComboBox, si ya tienes ligadas las tablas como Master-Detail. Delphi ya se encarga de asignar, cuando das de alta una nueva anomalía, el campo Cve_inst al valor que hay en Cve_inst de la tabla de instalaciones, así pues te puedes ahorrar ese paso. Te sugiero que coloques dos DBGrids, cada uno ligado a una tabla, y hagas pruebas recorriendo el de instalaciones, y dando de alta registros en el de anomalías, verás eso que te digo.

El error de referencia circular se debe a que Delphi no puede hacer una búsqueda en una tabla de la que depende la tabla que estás editando, por eso al desactivar esas dos propiedades que mencionas no te da ese error, aunque en ese caso el TDBLookUpComboBox sólo te sirve para ver la lista de instalaciones, nada más.

Espero haberme explicado.
__________________
Guía de Estilo
Responder Con Cita
  #3  
Antiguo 01-07-2003
Avatar de SoftMakerMex
SoftMakerMex SoftMakerMex is offline
Registrado
 
Registrado: jul 2003
Ubicación: Distrito Federal
Posts: 8
Poder: 0
SoftMakerMex Va por buen camino
quihubo...

El error que te aparece es debido a lo que te comenta andres; "referencia circular"... y en este caso, sucede porque el componente que utilizas crea una dependencia de la tabla de donde tomas el dato con la tabla donde guardas la información, y si a esto le añadimos que creas una relación maestro detalle... se complican las referencias y eso produce el error...

La mejor solución es que la relación maestro detalle la indiques a nivel de archivos en el manejador de datos que utilices.... y la elimines de los ttable dentro de tu aplicación, con esto se evita la referencia circular... y no debe marcarte ya ningun error...

Espero que te sea de utilidad...
Responder Con Cita
  #4  
Antiguo 01-07-2003
Avatar de JamesBond_Mx
JamesBond_Mx JamesBond_Mx is offline
Miembro
 
Registrado: jul 2003
Ubicación: Poza Rica, Veracruz, México
Posts: 81
Poder: 21
JamesBond_Mx Va por buen camino
Bueno, El combo lo quería utilizar para tomar los datos de la tabla Instalaciones y colocarlos en la tabla Anomalías, pues esta aún está vacía es la que se va a capturar, Pero ahora surgió otro detalle, les explico.

Resulta que mi tabla Instalaciones tiene 3 campos:

Cve_Inst //Clave Principal
Tipo_Inst //Tipo de Instalación
Nombre_Inst //Nombre de La instalación

La tabla consta de 92 registros pero el detalle es que Hay varios nombres que se me repiten, Por que solo tengo 9 tipos de instalaciones distintas, pero hay instalaciones que pertenecen a dos tipos entonces si la instalación X es del tipo A pero tambien del Tipo B aparecerá 2 veces su nombre ¿me explico?

Bueno, lo que quiero hacer ahora es tomar un componente TQuery, y filtrar por medio del campo Tipo_Inst, pero que sea dinámico, habia pensado en un comobox normal, en el cual estén listados los 9 tipos de instalaciones distintas y que al seleccionar cualquiera de los tipos, se ejecutara el Query con el dato seleccionado, pero ¿como mento el dato seleccionado en el combobox al string del Query? o sea como hago esto:

SELECT Cve_Inst, Nombre_Inst
FROM Instalaciones
WHERE Tipo_Inst = ????? /¿Como paso el valor aqui???

Haciendo esto, el filtro me presentaría solo las instalaciones que pertenecen al tipo seleccionado.

¿como lo hago?.

Espero no haberme extendido demasiado, y haber sido explicito.

Gracias

Última edición por JamesBond_Mx fecha: 01-07-2003 a las 22:25:53.
Responder Con Cita
  #5  
Antiguo 01-07-2003
Avatar de JamesBond_Mx
JamesBond_Mx JamesBond_Mx is offline
Miembro
 
Registrado: jul 2003
Ubicación: Poza Rica, Veracruz, México
Posts: 81
Poder: 21
JamesBond_Mx Va por buen camino
Talking

ok ya lo vi en otro hilo, gracias... para la otra primero reviso...
Responder Con Cita
  #6  
Antiguo 01-07-2003
Avatar de SoftMakerMex
SoftMakerMex SoftMakerMex is offline
Registrado
 
Registrado: jul 2003
Ubicación: Distrito Federal
Posts: 8
Poder: 0
SoftMakerMex Va por buen camino
Ok. lo que tienes que hacer es utilizar un query para tu consulta añadiendole un parametro para indicarle el tipo de instalación, esto quedaria así en la propiedad "sql" del query:

SELECT Cve_Inst, Nombre_Inst
FROM Instalaciones
WHERE Tipo_Inst = :tipo


donde :tipo es el nombre del parametro que recibira el tipo de instalación

despues en la propiedad "params" del query configura el parametro indicando el tipo de dato que recibira (string, integer, etcétera) en la propiedad "DataType", y el tipo de parametro en "ParamType" como ptInput porque es una consulta que requiere el parametro para ser ejecutada.

despues en el evento "OnCloseUp" del combo que utilices para seleccionar el tipo de instalación agrega los siguiente:

with Query1 do
begin
DisableControls;
Active:= False;
ParamByName['tipo'].AsString:= combobox1.text;
Active:=True;
EnableControls;
end;

donde dice AsString, debes especificar el tipo que hayas definido en tu parametro.

y con esto debe funcionar tu consulta con el filtro que deseas...
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


La franja horaria es GMT +2. Ahora son las 01:24:09.


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