Ver Mensaje Individual
  #4  
Antiguo 12-01-2006
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Reputación: 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