Ir al contenido


Foto

[RESUELTO] "Like" se parece a... (Sentencia SQL rebelde)


  • Por favor identifícate para responder
62 respuestas en este tema

#41 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 17 marzo 2010 - 08:17



delphi
  1. SQL.Add(' where ' + ' (upper(ACMSUB.clientes COLLATE ES_ES_CI_AI )) LIKE ' +quotedstr('%' + edcliente.Text + '%')+'');   



quitando los collates y demas chequea la ultima parte, asi me funciona a mi en mi programa
  • 0

#42 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 17 marzo 2010 - 09:22

Bueno, por algo yo dije que quizá lo que decía era una tontería... sabiendo que eso es una de las primeras cosas que se chequean... pero también puede existir la posibilidad de que nos olvidemos.
No era mi intención ofenderte ni molestar.

Estoy pensando que otra alternativa se podría probar...

Saludos,


Te juro por mi madre que no me molesté, Delphius, al contrario, admiro tu forma de plantear una pregunta inteligente. Eso es para mí mejor, por que me obligan a pensar en posibles métodos de resolver un problema...

Es más..., para que veas que no hay "fijón"..., ahí te van unas frías...  (b) (b) (b) (b) (b) (b) (b) (b) (b)
  • 0

#43 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 17 marzo 2010 - 09:30

¿ Ya intentaste con parametros ?

Salud OS


Sí, Eliseo. De hecho, el código original de ayer era exclusivamente con parámetros..., ¿y qué crees? Que no funcionó..., por eso me puse a hacer el proceso con el valor directo.
  • 0

#44 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 17 marzo 2010 - 09:33


...pero no puedo resolver UN CONDENADO LIKE EN UN TEXTO...  : : :p :p :s :s :D :D


¿No hablarás de un campo tipo TEXT? ¿no? :s


¿SQL.Text sirve para el caso? ¡¡ME CONFUNDEEESSSSSS!! jajajajajajajaja
  • 0

#45 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.446 mensajes
  • LocationMéxico

Escrito 17 marzo 2010 - 09:35


¿ Ya intentaste con parametros ?

Salud OS


Sí, Eliseo. De hecho, el código original de ayer era exclusivamente con parámetros..., ¿y qué crees? Que no funcionó..., por eso me puse a hacer el proceso con el valor directo.


Me parece que no tienes problema con la sentencia LIKE, tienes el probema en otro lado, tal vez en el componente que estás usando, ¿ ya viste las imagenes que he subido ?

Salud OS
  • 0

#46 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 17 marzo 2010 - 09:35

Pues he probado mi teoría de parámetros tanto en IBExpert como en Delphi y funciona como lo soñe :)

Salud OS


Interesante aproximación..., la probaré en cuanto llegue a la oficina mañana. Hoy, seré solamente espectador de mi debacle...

Por cierto, ¿alguien está viendo el soccer?
  • 0

#47 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 17 marzo 2010 - 09:38



¿ Ya intentaste con parametros ?

Salud OS


Sí, Eliseo. De hecho, el código original de ayer era exclusivamente con parámetros..., ¿y qué crees? Que no funcionó..., por eso me puse a hacer el proceso con el valor directo.


Me parece que no tienes problema con la sentencia LIKE, tienes el probema en otro lado, tal vez en el componente que estás usando, ¿ ya viste las imagenes que he subido ?

Salud OS


ADOQuery's..., pero hasta el momento, han funcionado de perlas. El problema es que la falta de presupuesto no permite usar otra cosa. Sobre todo, por que el HHH Gobierno del Distrito Federal quiere usar MS SQL Server y no otra cosa menos compleja de manejar...

Y sí, ya ví las imágenes. Voy a probar mañana a primerísima hora.

Saludines.
  • 0

#48 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.446 mensajes
  • LocationMéxico

Escrito 17 marzo 2010 - 09:47




¿ Ya intentaste con parametros ?

Salud OS


Sí, Eliseo. De hecho, el código original de ayer era exclusivamente con parámetros..., ¿y qué crees? Que no funcionó..., por eso me puse a hacer el proceso con el valor directo.


Me parece que no tienes problema con la sentencia LIKE, tienes el probema en otro lado, tal vez en el componente que estás usando, ¿ ya viste las imagenes que he subido ?

Salud OS


ADOQuery's..., pero hasta el momento, han funcionado de perlas. El problema es que la falta de presupuesto no permite usar otra cosa. Sobre todo, por que el HHH Gobierno del Distrito Federal quiere usar MS SQL Server y no otra cosa menos compleja de manejar...

Y sí, ya ví las imágenes. Voy a probar mañana a primerísima hora.

Saludines.


Pues he hecho la prueba con una base de datos MS SQL Server y ADO y me funciono de perlas. Te dejo la imagen para que veas.

Salud OS

Archivos adjuntos


  • 0

#49 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.446 mensajes
  • LocationMéxico

Escrito 17 marzo 2010 - 09:52

Por cierto, ¿alguien está viendo el soccer?


¿ Quien juega ?

Salud OS
  • 0

#50 kafastoforman

kafastoforman

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 277 mensajes
  • LocationMexico D.F.

Escrito 17 marzo 2010 - 09:59


Por cierto, ¿alguien está viendo el soccer?


¿ Quien juega ?

Salud OS


Pues juega México vs Corea del Norte.

Y si, lo estoy medio viendo jejejejeje, van 0-0

Saludos

KAfastoforman
  • 0

#51 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.446 mensajes
  • LocationMéxico

Escrito 17 marzo 2010 - 10:03

Pues juega México vs Corea del Norte.

Y si, lo estoy medio viendo jejejejeje, van 0-0

Saludos

KAfastoforman


Ah vaya, pues suerte, que la fuerza los acompañe, porque yo no :D :D :D

Salud OS
  • 0

#52 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 18 marzo 2010 - 06:27

Les platico. Por motivos de una consulta general, se me ocurrió utilizar la sentencia LIKE en mi conjunto de sentencias SQL, por medio de éste código...



delphi
  1. procedure TfrmBsqdDts.bitbttnBscrClick(Sender: TObject);
  2. var
  3.   wsSQLTxt : widestring;
  4.   sArmr : string;
  5. begin
  6.  
  7.   wsSQLTxt := 'SELECT Ca_Area, Ca_Titulo, Ca_Nombre, Ca_Paterno, Ca_Materno, '+
  8.                     'Ca_institucion, Ca_Dirg, Ca_Dir, Ca_Sub, Ca_Jud FROM carea'+
  9.                     ' WHERE (ca_cancelado = 0) ';
  10.  
  11.   if (edtArea.Text <> '') OR
  12.     (edtTitulo.Text <> '') OR
  13.     (edtNombres.Text <> '') OR
  14.     (edtAplldPaterno.Text <> '') OR
  15.     (edtAplldMaterno.Text <> '') then
  16.   begin
  17.     if (edtArea.Text <> '') then
  18.     begin
  19.       sArmr := '%'+edtArea.Text+'%';
  20.       wsSQLTxt := wsSQLTxt + 'AND (ca_area LIKE '+sArmr+')';
  21.     end;
  22.  
  23.     if (edtTitulo.Text <> '') then
  24.       wsSQLTxt := wsSQLTxt +
  25.                   'AND (ca_titulo LIKE '+QuotedStr('%'+edtTitulo.Text+'%')+') ';
  26.  
  27.     if (edtNombres.Text <> '') then
  28.       wsSQLTxt := wsSQLTxt +
  29.                   'AND (ca_nombre LIKE '+QuotedStr('%'+edtNombres.Text+'%')+') ';
  30.  
  31.     if (edtAplldPaterno.Text <> '') then
  32.       wsSQLTxt := wsSQLTxt +
  33.                   'AND (ca_paterno LIKE '+QuotedStr('%'+edtAplldPaterno.Text+'%')+') ';
  34.  
  35.     if (edtAplldMaterno.Text <> '') then
  36.       wsSQLTxt := wsSQLTxt +
  37.                   'AND (ca_materno LIKE '+QuotedStr('%'+edtAplldMaterno.Text+'%')+') ';
  38.   end;
  39.   wsSQLTxt := wsSQLTxt +';';
  40.  
  41.   with dtamdlDts.ADOQryBsqd do
  42.   begin
  43.     Active := False;
  44.     SQL.Clear;
  45.     SQL.Text := wsSQLTxt;
  46.     Active := True;
  47.   end;
  48.  
  49. end;




Arrojándome éste valor para la variable wsSQLTxt:



sql
  1. SELECT Ca_Area, Ca_Titulo,
  2.             Ca_Nombre, Ca_Paterno,
  3.             Ca_Materno, Ca_institucion,
  4.             Ca_Dirg, Ca_Dir,
  5.             Ca_Sub, Ca_Jud
  6.   FROM carea
  7.   WHERE (ca_cancelado = 0) AND (ca_area LIKE %APOYO%);




El problema esencial es que me envía éste error desde el SQLServer:
Project AreaTree.exe raised exception class EOleException with message '[Microsoft][ODBC SQL Server Driver][SQL Server]Line 1: Incorrect syntax near 'APOYO'.

Y obviamente no ejecuta ni me muestra los datos que se requieren.

En mi confiabilísimo manejador de SQL Server, detecté parte del problema, que consiste en la inexistencia de dos comillas simples junto a los signos de porcentaje, y SQL Server acepta una sintaxis así:



sql
  1. SELECT Ca_Area, Ca_Titulo, Ca_Nombre,
  2.       Ca_Paterno, Ca_Materno, Ca_institucion,
  3.       Ca_Dirg, Ca_Dir, Ca_Sub, Ca_Jud
  4.   FROM carea
  5.   WHERE (ca_cancelado = 0) AND
  6.         (ca_area LIKE '%APOYO%');



Mi pregunta va en el sentido, ¿cómo puedo asegurarme que solamente UNA comilla simple será añadida a mi texto? He usado QuotedStr() y juegos de comillas dentro del código, pero me pone DOS comillas simples y obviamente ésto genera un error dentro del motor de base de datos...

¿Algún consejo o solución que puedan aportarme, por favor?



Estoy con enecumene sobre el asunto de los OR  y tengo algo parecido y me funciona asi:


delphi
  1. procedure TfrmBsqdDts.bitbttnBscrClick(Sender: TObject);
  2. var
  3.   wsSQLTxt : widestring;
  4.  
  5. begin
  6.  
  7.   wsSQLTxt := 'SELECT Ca_Area, Ca_Titulo, Ca_Nombre, Ca_Paterno, Ca_Materno, '+
  8.                     'Ca_institucion, Ca_Dirg, Ca_Dir, Ca_Sub, Ca_Jud FROM carea'+
  9.                     ' WHERE (ca_cancelado = 0) ';
  10.  
  11. begin
  12.     if (edtArea.Text <> '') then
  13.     begin
  14.     //  sArmr := '%'+edtArea.Text+'%';
  15.    
  16.   wsSQLTxt := wsSQLTxt + ' AND (ca_area LIKE '+QuotedStr('%'+Edtarea.Text+'%')+'
  17.     end
  18. else
  19.  
  20.     if (edtTitulo.Text <> '') then
  21.       wsSQLTxt := wsSQLTxt + ' AND (ca_titulo LIKE '+QuotedStr('%'+edtTitulo.Text+'%')+'
  22.  
  23. else
  24.  
  25. if (edtNombres.Text <> '') then
  26.       wsSQLTxt := wsSQLTxt + ' AND (ca_nombre LIKE '+QuotedStr('%'+edtNombres.Text+'%')+'
  27. else
  28.  
  29. if (edtAplldPaterno.Text <> '') then
  30.       wsSQLTxt := wsSQLTxt + ' AND (ca_paterno LIKE '+QuotedStr('%'+edtAplldPaterno.Text+'%')+'
  31.  
  32. else
  33.     if (edtAplldMaterno.Text <> '') then
  34.       wsSQLTxt := wsSQLTxt +' AND (ca_materno LIKE '+QuotedStr('%'+edtAplldMaterno.Text+'%')+' ;
  35.  
  36. end;
  37.  
  38.  
  39.  
  40.  
  41.   with dtamdlDts.ADOQryBsqd do
  42.   begin
  43.     Active := False;
  44.     SQL.Clear;
  45.     SQL.add(wsSQLtxt);
  46.     sql.open;
  47.   end;
  48.  
  49. end;     



Puede ser que haya algun error porque lo hice rapido, pero lo voy a depurar en un rato cuando llegue a la oficina.
  • 0

#53 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 18 marzo 2010 - 05:47

Mil disculpas a todos los compañeros, pero hoy no he podido tirar una sola línea de código, y posiblemente mañana en la mañana pruebe sus atinadas observaciones para solucionar éste problemita.

Como le comentaba a LUK en un correíto que me escribió, aparentemente el problema que tengo es el "parser" del MS SQL Server 2000 que estoy usando..., pero mientras no tenga una confirmación completa, seguimos en el hecho...

Saludines.
  • 0

#54 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 24 marzo 2010 - 11:33


Pues he hecho la prueba con una base de datos MS SQL Server y ADO y me funciono de perlas. Te dejo la imagen para que veas.

Salud OS


Creo que ya encontré la diferencia entre lo que me muestras aquí y lo que yo estoy haciendo.

Solamente como prueba de tu lado..., intenta SUBSTITUIR el contenido de la propiedad SQL del ADOQuery que usas, y añade una cadena que lo contenga, incluído el parámetro, a ver qué gestos te hace.

Es decir, que tengas algo como ésto...


delphi
  1. procedure TfrmBsqdDts.bitbttnBscrClick(Sender: TObject);
  2. var
  3.   wsSQLTxt : widestring;
  4. begin
  5.  
  6.   wsSQLTxt := 'SELECT Ca_Area, Ca_Titulo, Ca_Nombre, Ca_Paterno, Ca_Materno, '+
  7.                     'Ca_institucion, Ca_Dirg, Ca_Dir, Ca_Sub, Ca_Jud FROM carea'+
  8.                     ' WHERE (ca_cancelado = 0) ';
  9.  
  10.   if (edtArea.Text <> '') OR
  11.     (edtTitulo.Text <> '') OR
  12.     (edtNombres.Text <> '') OR
  13.     (edtAplldPaterno.Text <> '') OR
  14.     (edtAplldMaterno.Text <> '') then
  15.   begin
  16.     if (edtArea.Text <> '') then
  17.     begin
  18.       dtamdlDts.ADOQryBsqd.Parameters.ParamByName('pArea').Value := '%'+edtArea.Text+'%';
  19.       wsSQLTxt := wsSQLTxt + 'AND (ca_area LIKE :pArea)';
  20.     end;
  21.  
  22.     if (edtTitulo.Text <> '') then
  23.     begin
  24.       dtamdlDts.ADOQryBsqd.Parameters.ParamByName('pTitulo').Value := '%'+edtTitulo.Text+'%';
  25.       wsSQLTxt := wsSQLTxt + 'AND (ca_titulo LIKE :pTitulo) ';
  26.     end;
  27.  
  28.     if (edtNombres.Text <> '') then
  29.     begin
  30.       dtamdlDts.ADOQryBsqd.Parameters.ParamByName('pNombre').Value := '%'+edtNombres.Text+'%';
  31.       wsSQLTxt := wsSQLTxt + 'AND (ca_nombre LIKE :pNombre) ';
  32.     end;
  33.  
  34.     if (edtAplldPaterno.Text <> '') then
  35.     begin
  36.       dtamdlDts.ADOQryBsqd.Parameters.ParamByName('pApPaterno').Value := '%'+edtAplldPaterno.Text+'%';
  37.       wsSQLTxt := wsSQLTxt + 'AND (ca_paterno LIKE :pApPaterno) ';
  38.     end;
  39.  
  40.     if (edtAplldMaterno.Text <> '') then
  41.     begin
  42.       dtamdlDts.ADOQryBsqd.Parameters.ParamByName('pApMaterno').Value := '%'+edtAplldMaterno.Text+'%';
  43.       wsSQLTxt := wsSQLTxt + 'AND (ca_materno LIKE :pApMaterno) ';
  44.     end;
  45.   end;
  46.  
  47.   wsSQLTxt := wsSQLTxt +';';
  48.  
  49.   with dtamdlDts.ADOQryBsqd do
  50.   begin
  51.     Close;
  52.     SQL.Clear;
  53.     SQL.Text := wsSQLTxt;
  54.     Open;
  55.   end;
  56.  
  57. end;



Si te funciona a tí y a mí no, te juro que me pego un tiro..., o mejor aún, me tiro un pegue...
  • 0

#55 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 24 marzo 2010 - 12:14

Hola TiammatMX, me extraña el hecho de que primero referencias al parámetro y luego agregas a la cadena parte de la instrucción SQL.
Creo que debería ser al revés.

Por otro lado, creo que parte del error se debe a que en realidad no estás elaborando la instrucción SQL sino es hasta el final, cuando lo haces mediante la propidad Text. Recién allí existen los parámetros.

Internamente, cuando se asigna el SQL recién se captura los nombre de los parámetros y se crean los debidos parámetros.

El asunto es que los parámetros no existen, y por tanto no están disponibles, sino es hasta que está armada la instrucción SQL.

Deberías alterar tu código para que primeramente armar el SQL y luego hacer las asignaciones a los parámetros.

Al menos con los componentes que emplean las parámetros TParam el proceso es así: Primeramente se elabora la consulta y mediante un método denominado ParseSQL es que se recién se crean los parámetros. Luego es posible las asignaciones.

No recuerdo como es el caso de ADO y su TParameter pero si sigue la misma filosofía es primero el SQL y luego las asignaciones.

Saludos,
  • 0

#56 kafastoforman

kafastoforman

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 277 mensajes
  • LocationMexico D.F.

Escrito 24 marzo 2010 - 12:42

Que tal tiammatmx, pues yo te recomiendo que crees un storedproc en la base de datos de la siguiente manera:



sql
  1. CREATE PROCEDURE dbo.SePareceA
  2. @PArea VARCHAR(255) = NULL,
  3. @PTitulo VARCHAR(255) = NULL,
  4. @PNombre VARCHAR(255) = NULL,
  5. @PAPaterno VARCHAR(255) = NULL,
  6. @PAMaterno VARCHAR(255) = NULL
  7. AS
  8.  
  9. BEGIN
  10.  
  11. SELECT Ca_Area, Ca_Titulo, Ca_Nombre, Ca_Paterno, Ca_Materno,
  12.       Ca_institucion, Ca_Dirg, Ca_Dir, Ca_Sub, Ca_Jud
  13. FROM carea
  14. WHERE ca_cancelado = 0
  15.   AND (@PArea IS NULL OR ca_area LIKE '%' + @PArea + '%')
  16.   AND (@PTitulo IS NULL OR ca_titulo LIKE '%' + @PtITULO + '%')
  17.   AND (@Pnombre IS NULL OR ca_nombre LIKE '%'+ @PNombre+'%' )
  18.   AND (@PAPaterno IS NULL OR ca_paterno LIKE '%'+ @PAPaterno +'%')
  19.   AND (@PAMaterno IS NULL OR ca_materno LIKE '%' + @PAMaterno + '%')
  20.  
  21. END



Despues de eso, lo conectas con un TADOStoredProc, y entonces tu comparación seria la siguiente:



delphi
  1. procedure TfrmBsqdDts.bitbttnBscrClick(Sender: TObject);
  2.  
  3. begin
  4.  
  5.   if (edtArea.Text <> '') OR
  6.     (edtTitulo.Text <> '') OR
  7.     (edtNombres.Text <> '') OR
  8.     (edtAplldPaterno.Text <> '') OR
  9.     (edtAplldMaterno.Text <> '') then
  10.   with dtamdlDts.ADOStoredProc do
  11.   begin
  12.     Close;
  13.     if (edtArea.Text <> '') then
  14.       Parameters.ParamByName('@PArea').Value := edtArea.Text
  15.     else
  16.       Parameters.ParamByName('@PArea').Value := null;
  17.  
  18.     if (edtTitulo.Text <> '') then
  19.       Parameters.ParamByName('@PTitulo').Value := edtTitulo.Text
  20.     else
  21.       Parameters.ParamByName('@PTitulo').Value:= null;
  22.  
  23.                         .
  24.                         .
  25.                         .
  26.  
  27.     Open;
  28.   end;
  29.  
  30. end;



ya solo tendrias que terminar la asignaciónd e parametros y se supone tendria que funcionarte, si eso no funciona, entonces si, que se arme la balacera jajajaja.

Saludos

Kafastoforman

PD si no te funciona "is null" en SQL lo puedes cambialo a "= null"
  • 0

#57 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 24 marzo 2010 - 12:58

Hola TiammatMX, me extraña el hecho de que primero referencias al parámetro y luego agregas a la cadena parte de la instrucción SQL.
Creo que debería ser al revés...


Es que los parámetros los tengo definidos explícitamente, no los creo "al vuelo"...

...Al menos con los componentes que emplean las  parámetros TParam el proceso es así: Primeramente se elabora la consulta  y mediante un método denominado ParseSQL es que se recién se crean los  parámetros. Luego es posible las asignaciones.

No recuerdo como  es el caso de ADO y su TParameter pero si sigue la misma filosofía es  primero el SQL y luego las asignaciones.


Eso es cierto..., pero como te comento, los parámetros YA están creados, solamente hago referencia directa a ellos...
  • 0

#58 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 24 marzo 2010 - 12:59

Que tal tiammatmx, pues yo te recomiendo que crees un storedproc en la base de datos de la siguiente manera:



sql
  1. CREATE PROCEDURE dbo.SePareceA
  2. @PArea VARCHAR(255) = NULL,
  3. @PTitulo VARCHAR(255) = NULL,
  4. @PNombre VARCHAR(255) = NULL,
  5. @PAPaterno VARCHAR(255) = NULL,
  6. @PAMaterno VARCHAR(255) = NULL
  7. AS
  8.  
  9. BEGIN
  10.  
  11. SELECT Ca_Area, Ca_Titulo, Ca_Nombre, Ca_Paterno, Ca_Materno,
  12.       Ca_institucion, Ca_Dirg, Ca_Dir, Ca_Sub, Ca_Jud
  13. FROM carea
  14. WHERE ca_cancelado = 0
  15.     AND (@PArea IS NULL OR ca_area LIKE '%' + @PArea + '%')
  16.     AND (@PTitulo IS NULL OR ca_titulo LIKE '%' + @PtITULO + '%')
  17.     AND (@Pnombre IS NULL OR ca_nombre LIKE '%'+ @PNombre+'%' )
  18.     AND (@PAPaterno IS NULL OR ca_paterno LIKE '%'+ @PAPaterno +'%')
  19.     AND (@PAMaterno IS NULL OR ca_materno LIKE '%' + @PAMaterno + '%')
  20.  
  21. END



Despues de eso, lo conectas con un TADOStoredProc, y entonces tu comparación seria la siguiente:



delphi
  1. procedure TfrmBsqdDts.bitbttnBscrClick(Sender: TObject);
  2.  
  3. begin
  4.  
  5.   if (edtArea.Text <> '') OR
  6.     (edtTitulo.Text <> '') OR
  7.     (edtNombres.Text <> '') OR
  8.     (edtAplldPaterno.Text <> '') OR
  9.     (edtAplldMaterno.Text <> '') then
  10.   with dtamdlDts.ADOStoredProc do
  11.   begin
  12.     Close;
  13.     if (edtArea.Text <> '') then
  14.       Parameters.ParamByName('@PArea').Value := edtArea.Text
  15.     else
  16.       Parameters.ParamByName('@PArea').Value := null;
  17.  
  18.     if (edtTitulo.Text <> '') then
  19.       Parameters.ParamByName('@PTitulo').Value := edtTitulo.Text
  20.     else
  21.       Parameters.ParamByName('@PTitulo').Value:= null;
  22.  
  23.                         .
  24.                         .
  25.                         .
  26.  
  27.     Open;
  28.   end;
  29.  
  30. end;



ya solo tendrias que terminar la asignaciónd e parametros y se supone tendria que funcionarte, si eso no funciona, entonces si, que se arme la balacera jajajaja.

Saludos

Kafastoforman

PD si no te funciona "is null" en SQL lo puedes cambialo a "= null"


De acuerdo, Kastaforman..., tú me acabas de proporcionar la última opción antes de tirarme el pegue, que diga, pegarme un tiro...  :p :p :p :p
  • 0

#59 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 26 marzo 2010 - 12:29

Gracias a Kastaforman y su solución dentro del servidor (lo cual plantea problemas de seguridad, pero ya no son mi responsabilidad...  :p :p ) se ha resuelto éste hilo.

Para la bitácora, el parser de SQL Server es EXTREMADAMENTE quisquilloso con la sentencia LIKE, de tal manera que las vueltas y revueltas de éste hilo se debieron no a Delphi, sino al bendito motor de base de datos...

Adoro Firebird cuando me encuentro con ésta clase de "detallitos" en productos de Microsoft.

P. D.: ¿Alguien podría dar por [RESUELTO] éste hilo? A mí no me deja...  :
  • 0

#60 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.446 mensajes
  • LocationMéxico

Escrito 26 marzo 2010 - 12:38

Ah caray, no está el prefijo, deja ver en el panel de admin que pasó :s

Salud OS
  • 0




IP.Board spam blocked by CleanTalk.