Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-01-2006
Avatar de Galbi
Galbi Galbi is offline
Miembro
 
Registrado: dic 2005
Ubicación: Buenos Aires, Argentina
Posts: 10
Poder: 0
Galbi Va por buen camino
Como acceder a un registro por 3 vias <>?

Hola amigos,
Si bien leí viejos hilos no encontré alguna consulta parecida...
Lo que quiero hacer es encontrar un determinado producto de una BD de productos llegando a él ya sea por: Código Interno ó Cod.Barras ó por su descripción (total ó parcial). La entrada de datos por parte del usuario es en un TEdit y un boton que lanza la búsqueda (sería mejor que sólo con pulsar Enter ello ocurra).
Estoy usando una BD xxx.dbf , el BDE de Delphi 7 y componentes TDBGrid y TQuery.

Preguntas:

Los campos CodInterno y CodBarras deben estar definidos como campos numéricos o de caracter?

Hay que usar un TQuery para cada tipo de consulta ó se puede todo en uno?

Como hacer que con Enter se lance la busqueda? Probé asociarlo al evento On Enter del TEdit pero no funcionó?

Desde ya Gracias pos su tiempo.

Galbi.
Responder Con Cita
  #2  
Antiguo 12-01-2006
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Cita:
Empezado por Galbi
Preguntas:

Los campos CodInterno y CodBarras deben estar definidos como campos numéricos o de caracter?
¿cómo podemos nosotros saberlo?
Lo recomendable es que le preguntes al análista del proyecto, y en caso de ser vos el analista, que le preguntes al cliente que tipo de información almacenará en dichos campos. Tené en cuenta que hay formatos de código de barras -como el EAN13- que solamente contemplan el uso de números, mientras hay otros que contemplan el uso de valores alfanuméricos.

Cita:
Empezado por Galbi
Hay que usar un TQuery para cada tipo de consulta ó se puede todo en uno?
Pues eso también depende... podrías intentar de un solo viaje buscar en los tres campos, o podrías intentar buscar primero en uno, si no tenés exito, buscar en el siguiente y así sucesivamente, usando diferentes queryes para cada búsqueda.

Cita:
Empezado por Galbi
Como hacer que con Enter se lance la busqueda? Probé asociarlo al evento On Enter del TEdit pero no funcionó?
Claro que no! El evento OnEnter se lanza cuando el Edit gana el foco. Tenés el evento OnKeyPress, donde podes evaluar si la tecla presionada es enter y lanzar la búsqueda


Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #3  
Antiguo 12-01-2006
Avatar de Galbi
Galbi Galbi is offline
Miembro
 
Registrado: dic 2005
Ubicación: Buenos Aires, Argentina
Posts: 10
Poder: 0
Galbi Va por buen camino
Aclaraciones necesarias e importantes.

Antes que nada gracias por la respuesta y perdón si la consulta estuvo mal hecha o poco clara. ¡Qué fácil es caer en los mismos errores que uno critica en los demás!
La verdad es que la programación en Delphi es sólo un hobby (con la mayor dedicación posible, por cierto) ya que me gano la vida en otro ámbito (lo cual debe resultar obvio)
Cuando pregunto por los CodInterno y CodBarras es, qué resultaría mas conveniente, si definirlos como Nun o Char en función a poder luego, realizar consultas con comodines (por lo que estuve probando LIKE y % solo funcionan en campos Char o estoy equivocado?)
En cuanto a si usar un TQuery o varios es por que no se como hacer para diferenciar que tipo de input hace el usuario (CodInterno, CodBarra o Descripción), intenté hacer que busque primero en uno luego en otro, etc. pero me dá error de type mismatch.

Se agradecería un link a un ejemplo o bibliografía recomendada.

Nuevamente gracias y saludos.

Galbi.
Responder Con Cita
  #4  
Antiguo 12-01-2006
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Cita:
Empezado por Galbi
Cuando pregunto por los CodInterno y CodBarras es, qué resultaría mas conveniente, si definirlos como Nun o Char en función a poder luego, realizar consultas con comodines (por lo que estuve probando LIKE y % solo funcionan en campos Char o estoy equivocado?)
Pues ya ves, esto depende entonces de que típo de búsquedas querras hacer, y de las capacidades de tu motor. Si usas firebird, por ejemplo, nada te impide realizar una búsqueda con un like sobre un campo numérico, aunque eso podría tener un alto cósto en el desempeño de la BD, pues se ve obligada a realizar las conversiones de tipo. Probá lo siguiente:

Código SQL [-]
Create table prueba(codigo integer not null primary key);
insert into prueba values (1);
insert into prueba values (10);
insert into prueba values (100);
insert into prueba values (1000);

insert into prueba values (2);
insert into prueba values (20);
insert into prueba values (200);
insert into prueba values (2000);

insert into prueba values (3);
insert into prueba values (30);
insert into prueba values (300);
insert into prueba values (3000);

commit;

select *
  from prueba
 where codigo like '1%';

select *
  from prueba
 where codigo like '2%';

select *
  from prueba
 where codigo like '%0%';

select *
  from prueba
 where codigo like '%000';

Cita:
Empezado por Galbi
En cuanto a si usar un TQuery o varios es por que no se como hacer para diferenciar que tipo de input hace el usuario (CodInterno, CodBarra o Descripción), intenté hacer que busque primero en uno luego en otro, etc. pero me dá error de type mismatch.
de forma muy simple, y suponiendo que edit1 es el "input" del usuario, podrias hacer algo como:

Código Delphi [-]
  Query1.ParamByName('CodigoBarras').AsString := Edit1.Text;
  Query1.Open;
  try
    if Query1.IsEmpty then
    begin
      //no hay un código de barras que coincida!
      Query2.ParamByName('Codigo').AsString := Edit1.Text;
      Query2.Open;
      try
        if Query2.IsEmpty then
        begin
          //no hay un código que coincida
          Query3.ParamByName('Descripcion').AsString := Edit1.Text + '%';
          Query3.Open;
          if Query3.IsEmpty then
            raise Exception.Create('Error: no hay un artículo que coincida!')
          else
            result := NavegarPorLosRegistrosCoincidentesEnQuery3;
        end
        else 
          result := Query2ID_ARTICULO.AsInteger;
      finally
        Query2.Close;
      end;
    end
    else
      result := Query1ID_ARTICULO.AsInteger;
  finally
    Query1.close;
  end;

Puede que ni compile... pero ya tenes la idea.

Saludos.
__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #5  
Antiguo 13-01-2006
Avatar de Galbi
Galbi Galbi is offline
Miembro
 
Registrado: dic 2005
Ubicación: Buenos Aires, Argentina
Posts: 10
Poder: 0
Galbi Va por buen camino
Lindo codigo pero donde va?

Una duda que a menudo me asalta es, a qué evento ó procedimiento adosarle tal o cual código, y éste caso no es la excepción; el código anterior (con un poco más de estudio) lo entiendo pero no sé dónde insertarlo, o es que debo crear mi propio procedure?

No me canso de agradecer por tanta dedicación dispensada.

Galbi.
Responder Con Cita
  #6  
Antiguo 14-01-2006
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Cita:
Empezado por Galbi
a qué evento ó procedimiento adosarle tal o cual código, y éste caso no es la excepción;
Creo que te corresponde leer nuevamente el hilo. La respuesta a esa pregunta estaba dada desde antes
__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #7  
Antiguo 14-01-2006
Avatar de Galbi
Galbi Galbi is offline
Miembro
 
Registrado: dic 2005
Ubicación: Buenos Aires, Argentina
Posts: 10
Poder: 0
Galbi Va por buen camino
Mil perdones...

Ruego ser disculpado por mi torpeza, si me sobra tiempo me hago un rato el Hara Kiri
Me concentré en el código y pasé por alto el cuerpo del mensaje.
Con tiempo pruebo, a ver qué me sale....

Gracias totales.

Galbi.
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
Como hacer para que un programa NO pueda ser cerrado desde el Task Manager? bustio Varios 6 25-05-2006 18:58:04
como acceder a datos de la RAM friendspark API de Windows 1 11-11-2005 13:36:00
como acceder a un TMemo de una pestaña? o algo así aranel OOP 3 18-10-2005 16:35:14
Como bloquear un registro!!! CarlosHernandez Firebird e Interbase 7 12-08-2005 16:49:50
Como acceder a los componentes de un frame? CORBATIN OOP 7 25-07-2003 20:24:23


La franja horaria es GMT +2. Ahora son las 16:22:20.


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