Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MySQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-10-2010
ekstase ekstase is offline
Miembro
 
Registrado: sep 2007
Posts: 23
Poder: 0
ekstase Va por buen camino
Problemas para buscar - Locate

Hola amigos, por favor si alguien me puede ayudar.Estoy terminado una aplicacion para una playa de estacionamiento y Tengo 2 tablas, Tablasocio(IdSocio,Apellido, Nombre) y TablaAutos(IdSocio, Marca, Patente) siendo el IdSocio el campo por el cual se relacionan, con la Propiedad MasterSource de la TablaAutos. Ahora bien todo funciona de maravilla, pero al realizar una busqueda de un registro en la TablaAutos no encuentra nada. :S ...
Probando encontre que si quito la relacion, osea si anulo lo de la propiedad MasterSource, entonces si encuentro el registro.- :S
Utilizo MySql y Delphi 7.

El codigo para realizar la busqueda es el siguiente:

If (DM.TablaAutos.Locate('Patente',Edt_Num.Text,[])) Then
Begin
ShowMessage('El vehiculo pertenece a un Socio.');
Edt_Num.SetFocus();
end;

Si alguien me puede dar una manito. Gracias.-
Gustavo.-
Responder Con Cita
  #2  
Antiguo 17-10-2010
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 30
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Hola Gustavo.

No has comentado qué componentes de acceso a datos estás utilizando, pero, en general, cuando relacionas un conjunto de datos (data set, table, query) como detalle de otro, en él solamente tendrás acceso a los registros detalles que correspondan al actual registro maestro (el registro donde se encuentra posicionado el conjunto de datos maestro).

Así que si le estás pidiendo que localice un valor que no se encuentra en el actual "grupo" de registros detalles, no lograrás que el conjunto de datos se posicione en el registro que buscas, porque sencillamente no tiene relación con el actual registro maestro.

Existen varias formas de sacarle la vuelta a este problema pero, antes de hablar sobre ellas, ¿podrías ampliar el tema detallando qué componentes usas e indicando valores de ejemplo? No olvides usar la etiqueta para código Delphi (el botón del pequeño Partenón).

Saludos.

Al González.
Responder Con Cita
  #3  
Antiguo 17-10-2010
ekstase ekstase is offline
Miembro
 
Registrado: sep 2007
Posts: 23
Poder: 0
ekstase Va por buen camino
Hola Al Gonzalez, gracias por responder, me quedo claro lo que me dijsite, pero la verdad nose como resolverlo. El tema es asi: Utilizo 2 tablas una de SOCIOS y otra de AUTOS (Donde cada socio puede ser dueño hasta de 3 autos) entonces, utilizo dos Grillas, una muestra todos los socios y a medida que selecciono alguno, en la otra grilla se actualiza mostrandome los datos de los vehiculos que le pertenecen a ese socio seleccionado. Utilizo componentes Datasource, Query. En la propiedad Mastersource de la tabla AUTOS lo enlazo con el DataSource de la tabla SOCIOS y en la Propiedad MasterFields selecciono el campo IDSocios. El código que utilizo es el que te mostre anteriormente.

SOCIOS
======
IDSocios Nombre Apellido
11 Marcelo Gonzalez
12 Sergio Rodriguez
13 Andres Chavez

AUTOS
=====
IDSocios Patente Marca
11 GAA-222 WV
11 ABB-322 Renault
12 BTT-188 Fiat
13 CDD-553 Ford

Ese es el esquema de las tablas.
Espero poder hacerme entender jaja.. Bueno gracais amigo por tu atencion.- Espero tu respuesta. Gracias.-
Responder Con Cita
  #4  
Antiguo 18-10-2010
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 30
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Gracias por ampliar el panorama, ekstase. Supongo que con query y tabla te refieres a componentes TQuery y TTable, ¿es así?

¿Entonces sí se da la situación de que el usuario o el programa requiera buscar un registro de auto que no necesariamente pertenezca al actual registro de socio?

En ese caso quizá convenga que te auxilies con una consulta (query) adicional, que sirva para obtener el / los IDSocios de una patente en particular. Ejecutando dicha consulta para luego usar el IDSocios resultante y con él hacer Locate en el conjunto de datos maestro, antes de hacer el Locate en la tabla detalle.

La sentencia SQL sería:
Código SQL [-]
Select IDSocios From Autos Where Patente = :Patente

Puede que haya mejores soluciones, pero es algo que se me ocurre ahora, a bote pronto. ¿Qué te parece la idea?

Un saludo de año nuevo.

Al González.
Responder Con Cita
  #5  
Antiguo 18-10-2010
Avatar de RebeccaGL
RebeccaGL RebeccaGL is offline
Miembro
 
Registrado: ene 2008
Posts: 199
Poder: 17
RebeccaGL Va por buen camino
Código Delphi [-]
If (DM.TablaAutos.Locate('Patente',Edt_Num.Text,[])) Then
Begin
  ShowMessage('El vehiculo pertenece a un Socio.');
  Edt_Num.SetFocus();
end;

 
Mira este Ejemplo.
 
if (DM.TableAutos.Locate('IDSocio; Patente',
      VarArrayOf([TablaSocio('IDSocio').AsFloat,
                      Edt_Num.Text]),
                      [loCaseInsensitive, loPartialKey])) then
Begin
  ShowMessage('El vehiculo pertenece a un Socio.');
  Edt_Num.SetFocus();
end;

Y no quites el MasterSource;
Asegurate de que los campos de enlace esten asi.

LinkedField := 'IDSocio';
MasterFields := 'IDSocio';
Responder Con Cita
  #6  
Antiguo 20-10-2010
ekstase ekstase is offline
Miembro
 
Registrado: sep 2007
Posts: 23
Poder: 0
ekstase Va por buen camino
Gracias [Al González] lo resolvi con tu sugerencia, asi fue el código final:

Código Delphi [-]
 
      QueryTablaAutos.Active    :=  False;
      QueryTablaAutos.SQL.Clear;
      QueryTablaAutos.SQL.Text  :=  'Select IdSocio From TablaAutos Where Patente = :Patente';
      QueryTablaAutos.ParamByName('Patente').Value  :=  Edt_Num.Text;
      QueryTablaAutos.Active    :=  True;
  
      If (QueryTablaAutos.Fields[0].Value <> Null) Then
          Begin
              ShowMessage('El vehiculo pertenecea a un socio.');
          end;

Connor gracias por tu atención también, me sacaron un peso de encima.
Gracias Chicos, hasta la próxima.
Gustavo.-
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
Problemas con Locate jmlifi Varios 8 16-05-2006 21:31:11
Locate no buscar parcialmente, por que? URBANO Conexión con bases de datos 13 14-10-2005 20:14:22
Problemas con Locate Acker Tablas planas 12 05-08-2005 15:47:46
Problemas con locate Ivanzinho Firebird e Interbase 0 03-05-2005 17:45:57
Problemas Con Locate gzerox Firebird e Interbase 4 20-05-2004 10:06:14


La franja horaria es GMT +2. Ahora son las 01:13: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
Copyright 1996-2007 Club Delphi