Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Filtro Numerico y String con Like y ADO me Urge!!! por favor :( (https://www.clubdelphi.com/foros/showthread.php?t=74238)

ivantj24 07-06-2011 01:59:13

Filtro Numerico y String con Like y ADO me Urge!!! por favor :(
 
Hola que tal buenas tardes de nuevo, regreso con un problema que ya habia dejado en paz, pero que despues de todo no quiero dejar pasar desapercibido, lo que he intentado hacer de todos los modos posibles y que no me ha dado resultado es hacer una busqueda filltrando en un TAdoquery un numero y un string, lo que intento es que me muestre los datos en un DataGrid que sean similares entre si, y utilizo el like filtrando.

con los Strings no tengo ni un problema, puedo filtrar atraves de mas de un campo, pero cuando intento filtrar agregando un dato entero me sale un error, por no decirlo horror xD ya que le he intentado de todas las formas posibles, tengo apenas unos 3 meses aprendiendo el lenguaje y esta parte en verdad que si la requiero, el mensaje de error que arroja es el siguiente:

No se encontro el elemento en la coleccion que corresponde al nombre o el ordinal solicitado.

y la busqueda la hago de esta manera:

Código Delphi [-]
if edtBuscar.Text<> '' then
    begin
      with ADOTableTicket do
      begin
        Active:= False;
        Filtered:= False;
        Filter:= '(TicketID) LIKE ' + QuotedStr('*' + edtBuscar.Text + '*') + 'OR (Usuario) LIKE ' + QuotedStr('*' + edtBuscar.Text + '*');
        Filtered:= True;
        Active:= True;
      end
    end

se que el problema esta por que intento filtrar un dato numerico junto con otros strings, pero eso es lo que quiero y ya busque por todas partes y no se como puedo llegar a solucionar este problema, me falta ese pequenio de detalle les agradeceria que si ustedes saber como puedo resolverlo me dijeron, y de antemano muchas gracias.

como decia anteriormente, el problema es que trato de filtrar un campo numerico, atraves de un Adoquery, usando LIKE, pero lo que intento hacer es hacer una busqueda por varios campos, el primero es numerico, los demas son strings, espero alguien me pueda ayudar, y muchas gracias de antemano.

ya intente cambiar esta parte
Código Delphi [-]
QuotedStr('*' + edtBuscar.Text + '*')
por '%', ya intente quitar el QuotedStr y dejarlo asi se que esa parte se sintaxis esta mal, pero de todos modos quitandola no me lo resuelve, lo dejo asi
Código Delphi [-]
Filter:= '(TicketID) LIKE ' + edtBuscar.Text +  'OR (Usuario) LIKE ' + QuotedStr('*' + edtBuscar.Text + '*');
y tampoco resulta :(:(

ivantj24 07-06-2011 02:21:52

Disculpen la molestia, solo una aclaracion, no es ADOQuery por donde Filtro ya que no pongo ningun query, es por medio del Filtro de un ADOTABLE, disculpen mi error, pero y de todas formas mi error sigue, ya que no encuentro la forma de solucionar el problema.

Caral 07-06-2011 04:35:36

Hola
El concepto no parece complicado.
Aparte de que no tienes separacion entre parentesis entre el primer like el or y el segundo like, me parece que podrias evitarte disgustos usando variables ya que el filtro con table me parece que no acepta parametros.
Saludos

ivantj24 07-06-2011 05:01:43

Holas que tal Caral, pues entiendo mas o menos lo que dices, pero que tipos de variables, ya que no entiendo bien la parte de como o en donde ponerlas, si fueras un poco mas concreta me alegrarias la noche :) de antemano gracias por tomarte la molestia de responder a mi pregunta, y si es que tienes un ejemplo seria de gran utilidad, gracias

Caral 07-06-2011 05:10:46

Hola
Código Delphi [-]
Var 
Tiq: integer;
Usu: String;
begin
Tiq:= StrToInt(edtBuscar.Text);
Usu:= edtBuscar.Text;
if edtBuscar.Text <> '' then
    begin
      with ADOTableTicket do
      begin
        Active:= False;
        Filtered:= False;
        Filter:= 'TicketID LIKE ' +Tiq+ 'OR Usuario LIKE ''' +Usu+ '*''';
        Filtered:= True;
        Active:= True;
      end
    end
Saludos

ivantj24 07-06-2011 05:27:29

Caral disculpa la molestia de nuevo, pero asi como esta el codigo, di copy-paste sin exagerar, y me dice tipos imcompatibles: 'string' and 'integer' marcandome la variable
+Tiq+

no pongo el codigo, ya que como te digo es el mismo, lo copie y pegue, para evitar errores de dedo xD, y te repito me marca ese error, el cual ya antes me habia salido, pero sin usar variables y solo poner edtbuscar.text, que vendria siendo algo parecido, no se si tengas alguna idea del problema o como solucionarlo. gracias

Caral 07-06-2011 05:32:08

Hola
No esperes mucho de este novato.:D
Código Delphi [-]
Var 
Tiq: integer;
Usu: String;
begin
Tiq:= StrToInt(edtBuscar.Text);
Usu:= edtBuscar.Text;
if edtBuscar.Text <> '' then
    begin
      with ADOTableTicket do
      begin
        Active:= False;
        Filtered:= False;
        Filter:= 'TicketID LIKE ' +intTostr(Tiq)+ 'OR Usuario LIKE ''' +Usu+ '*''';
        Filtered:= True;
        Active:= True;
      end
    end
Saludos

ivantj24 07-06-2011 05:41:13

Muchisimas Gracias por tu ayuda Caral, pero tengo malas noticias, me sale un error ya familiar al hacer esto:

Argumentos Incorrectos, fuera del intervalo permitido o en conflicto con otros.

este error era otro de los que salian anteriormente, y no entiendo por que, una cosa mas, al convertir
intTostr(Tiq),
no seria necesario poner
Tiq:= StrToInt(edtBuscar.Text);

ya que el primero lo pasa de Entero a String, y Despues lo convierto de String a Integer, por lo cual quitando la variable y dejandolo como edtbuscar.text seria suficiente, por que estaria regresando al origen del tipo variable, bueno es una pequenia observacion que no tiene mucho que ver, solo para ahorrar codigo, :S:S:S pero de todos modos el problema persiste gracias por la ayuda, y espero poder solucionarlo o si alguien del foro pudiera echarnos la mano xD por que no entiendo el problema.

ivantj24 08-06-2011 20:28:31

Al parecer a nadie le ha salido este error, o acaso nadie ha heco un tipo de consulta de este tipo??? solo pregunto por que el ultimo post fue del error que tengo y no he podido resolverlo, espero alguien pueda decirme o ayudarme en esto, por que como decia con un campo numerico junto con un string no me genera la busqueda :( espero aun alguna sugerencia, gracias

oesqueda 08-06-2011 21:13:04

Porque no mejor usas la funcion Format


const
FILTRO = '(TicketID) LIKE "*%d*") OR (Usuario) LIKE ("*%s*")';
var
sCad:string;


if edtBuscar.Text<> '' then
begin
with ADOTableTicket do
begin
Close;
Filtered:= False;

sCad := Format(FILTRO, [Tiq, usu]);
Filter:= sCad;


Filtered:= True;

Open;
end
end

oesqueda 08-06-2011 21:14:08

Creo que lo mejor es que usaras parametros o rehacer la consulta SQL porque a final de cuentas estas cerrando y abriendo el Dataset

oesqueda 08-06-2011 21:17:55

Perdon puse dobel comilla en vez de una:

const
FILTRO = '(TicketID) LIKE ''*%d*'') OR (Usuario) LIKE (''*%s*'')';
var
sCad:string;

if edtBuscar.Text<> '' then
with ADOTableTicket do begin
Close;
Filtered:= False;

sCad := Format(FILTRO, [Tiq, usu]);
Filter:= sCad;

Filtered:= True;

Open;
end

Casimiro Noteví 08-06-2011 21:29:41

Recuerden usar las etiquetas para código:




.

ivantj24 08-06-2011 21:45:09

Hola que tal muchisimas gracias por ayudarme :(, pero el problema persiste, me sale el mismo error
Argumentos Incorrectos, fuera del intervalo permitido o en conflicto con otros.

y enserio no entiendo ni por que, ya he hecho muchos cambios y nada, le he intentad de todas formas y nada, por cierto, solo cambie una pequenia parte al codigo que me enviaste, quite el Open, y lo deje como Active:= True; lo mismo con Close;. pero de todas formas ni haciendo eso me lo resolvio. intente tal y como me lo enviaste y nada, se agradece mucho la ayuda enserio, solo que el problema persiste como decia :(

Asi queda el codigo y nada :(
Código Delphi [-]
procedure TfrmTicket.btnBuscarClick(Sender: TObject);
const
  FILTRO = '(TicketID) LIKE ''*%d*'') OR (Usuario) LIKE (''*%s*'')';
var
  sCad:string;
  Tiq : Integer;
  Usu : String;
begin
  if edtBuscar.Text<> '' then
    with ADOTableTicket do
    begin
      //Close;
      Active:= False;
      Filtered:= False;
      sCad := Format(FILTRO, [Tiq, usu]);
      Filter:= sCad;
      Filtered:= True;
      Active:= True;
      //Open;
    end
end;

ivantj24 09-06-2011 02:33:21

oesqueda, cierto estaba mal yo :S:S:S deje el open y el close, tal y como lo tienes tu y funciona perfectamente, muchisimas gracias!!! enserio, ya termine las partes que me estaba haciendo quebrar la cabeza xDDDD jajaja gracias y saludos :))))))))))))))))))

ivantj24 09-06-2011 02:38:33

Negativo :( por algun detalle o algo volvio a salir error

Argumentos Incorrectos, fuera del intervalo permitido o en conflicto con otros.

y no entiendo por que, pense que todo iba bien pero al correo de nuevo el programa me volvio a generar el mismo problema, :S:S:S y no entiendo por que, enserio no se que show con esto de verdad :(, espero alguien me pueda ayudar con esto por favor!!! :(

Caral 09-06-2011 03:00:14

Hola
Me parece que esta algo mas complicado de la cuenta, mucho codigo para un filtro, pero intenta asi:
Código Delphi [-]
procedure TfrmTicket.btnBuscarClick(Sender: TObject);
const
  FILTRO = '(TicketID) LIKE ''*%d*'') OR (Usuario) LIKE (''*%s*'')';
var
  sCad:string;
  Tiq : Integer;
  Usu : String;
begin
  if edtBuscar.Text <> '' then
    with ADOTableTicket do
    begin
      Filtered:= False;
      sCad := Format(FILTRO, [Tiq, usu]);
      Filter:= sCad;
      Filtered:= True;
    end
end;
Es un adotable, si no esta activo no reconoce el filtro, me da la impresion.
Saludos

ivantj24 09-06-2011 03:15:02

Caral Gracias por retomar el tema, y enserio que mala onda, que aun no se pueda, intente como me dices en el mensaje, solo quite los Active:=False; y Active:=True;. y no tampoco con eso se pudo:( ya no se que hacer enserio!!!! :( de plano al parecer no se puede hacer un filtro en delphi, con ADO numeriro y string??? :( muchas gracias por tomarse las molestias pero aun asi de plano no puedo aun :(

Caral 09-06-2011 03:16:13

Hola
Que base de datos usas?.
Saludos

ivantj24 09-06-2011 03:18:23

Sql Server 2005


La franja horaria es GMT +2. Ahora son las 04:42:36.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi