Jump to content


Photo

No funcionan mis Sp al pasarme de 1.5 a 2.1.3 de Firebird


  • Please log in to reply
4 replies to this topic

#1 IcebergDelphi

IcebergDelphi

    Advanced Member

  • Moderadores
  • PipPipPip
  • 176 posts
  • LocationVillaflores, Chiapas, Mexico

Posted 30 October 2009 - 09:49 AM

Hola amigos hace poco termine un software que estoy regalando , y use Firebird 1.5 y todo me estaba funcionando perfectamente al 100% , hasta el dia de antier que decidi actualizar el Firebird 1.5 a 2.1.3, cuando quise probar mis StoreProcedures de Busqueda ya no funcionan, no me regresan ningun valor, les paso el siguiente codigo de un SP que me funcionaba a la perfecion, no me reconece el signo %, si quito el signo de porcentaje me funciona, aca esta el codigo:


sql
  1. SET TERM ^ ;
  2.  
  3. CREATE PROCEDURE "SpBuscaEjidos" (
  4.     "IpOpcion" INTEGER,
  5.     n INTEGER,
  6.     "IpParametro" VARCHAR(150) CHARACTER SET octets)
  7. RETURNS (
  8.     "V_Ejido" VARCHAR(120) CHARACTER SET octets,
  9.     "V_Municipio" VARCHAR(60) CHARACTER SET octets,
  10.     "V_Estados" VARCHAR(50) CHARACTER SET octets,
  11.     "V_IdEjido" INTEGER,
  12.     "V_IdMunicipio" INTEGER,
  13.     "V_IdEstados" INTEGER)
  14. AS
  15. BEGIN
  16.  
  17.   IF (:"IpOpcion"=0) THEN /* Busqueda por Municipio*/
  18.     BEGIN
  19.         FOR SELECT Eji."Ejido",Mun."Municipio",Mun."Estados",Eji."IdEjidos",Mun."IdMunicipios",Est."IdEstados"
  20.           FROM "Municipios" Mun,"Ejidos" Eji,"Estados" Est
  21.         WHERE
  22.             Eji."IdMunicipios"=Mun."IdMunicipios" AND Mun."IdEstados"= Est."IdEstados"
  23.             AND Mun."Municipio" LIKE:"IpParametro" ||'%'
  24.         INTO:"V_Ejido",:"V_Municipio",:"V_Estados",:"V_IdEjido",:"V_IdMunicipio",:"V_IdEstados"
  25.         Do BEGIN
  26.         suspend;
  27.                 N = N - 1;
  28.                 IF (N = 0) THEN exit;
  29.         END
  30.   END
  31.  
  32.   IF (:"IpOpcion"=1) THEN /* Busqueda por Ejido*/
  33.     BEGIN
  34.         FOR SELECT "Ejidos"."Ejido","Municipios"."Municipio","Municipios"."Estados","Ejidos"."IdEjidos","Municipios"."I  dMunicipios","Estados"."IdEstados"
  35.           FROM "Municipios" ,"Ejidos" ,"Estados"
  36.         WHERE
  37.             "Ejidos"."IdMunicipios"= "Municipios"."IdMunicipios" AND "Municipios"."IdEstados"="Estados"."IdEstados"
  38.             AND  "Ejidos"."Ejido" LIKE:"IpParametro" ||'%'
  39.         INTO:"V_Ejido",:"V_Municipio",:"V_Estados",:"V_IdEjido",:"V_IdMunicipio",:"V_IdEstados"
  40.         Do BEGIN
  41.         suspend;
  42.                 N = N - 1;
  43.                 IF (N = 0) THEN exit;
  44.         END
  45.   END
  46. END^
  47.  
  48. SET TERM ; ^
  49.  
  50. GRANT SELECT ON "Municipios" TO PROCEDURE "SpBuscaEjidos";
  51.  
  52. GRANT SELECT ON "Ejidos" TO PROCEDURE "SpBuscaEjidos";
  53.  
  54. GRANT SELECT ON "Estados" TO PROCEDURE "SpBuscaEjidos";
  55.  
  56. GRANT EXECUTE ON PROCEDURE "SpBuscaEjidos" TO SYSDBA;



Con lo unico que mes estoy peliando es con el Signo de % que no me reconoce el nuevo Firebird, que podria ser tendria que configurar algo en los parametros de Firebird?

Estoy trabajando con IbExpert Personal Edition, lo de las comillas el IbExpert me los fue colocando solo, y estoy usando dialecto 3.

Saludos cordiales
:sad:

  • 0

#2 defcon1_es

defcon1_es

    Member

  • Miembros
  • PipPip
  • 19 posts
  • LocationEspaña

Posted 02 November 2009 - 10:39 AM

Quizá sea una tontería, pero ¿has probado a poner el % entre comillas dobles?
¿Has probado a quitar las comillas dobles y poner solo entre comillas lo que debe ir?



sql
  1. SET TERM ^ ;
  2.  
  3. CREATE PROCEDURE SpBuscaEjidos (
  4.     IpOpcion INTEGER,
  5.     n INTEGER,
  6.     IpParametro VARCHAR(150) CHARACTER SET octets)
  7. RETURNS (
  8.     V_Ejido VARCHAR(120) CHARACTER SET octets,
  9.     V_Municipio VARCHAR(60) CHARACTER SET octets,
  10.     V_Estados VARCHAR(50) CHARACTER SET octets,
  11.     V_IdEjido INTEGER,
  12.     V_IdMunicipio INTEGER,
  13.     V_IdEstados INTEGER)
  14. AS
  15. DECLARE VARIABLE AuxParametro VARCHAR(151) CHARACTER SET octets;
  16. BEGIN
  17.   AuxParametro = :IpParametro ||"%";
  18.   IF (:IpOpcion=0) THEN /* Busqueda por Municipio*/
  19.     BEGIN
  20.         FOR SELECT Eji.Ejido,Mun.Municipio,Mun.Estados,Eji.IdEjidos,Mun.IdMunicipios,Est.IdEstados
  21.           FROM Municipios Mun,Ejidos Eji,Estados Est
  22.         WHERE
  23.             Eji.IdMunicipios=Mun.IdMunicipios AND Mun.IdEstados= Est.IdEstados
  24.             AND Mun.Municipio LIKE :AuxParametro
  25.         INTO:V_Ejido,:V_Municipio,:V_Estados,:V_IdEjido,:V_IdMunicipio,:V_IdEstados
  26.         Do BEGIN
  27.         suspend;
  28.                 N = N - 1;
  29.                 IF (N = 0) THEN exit;
  30.         END
  31.   END
  32.  
  33.   IF (:IpOpcion=1) THEN /* Busqueda por Ejido*/
  34.     BEGIN
  35.         FOR SELECT Ejidos.Ejido,Municipios.Municipio,Municipios.Estados,Ejidos.IdEjidos,Municipios.I  dMunicipios,Estados.IdEstados
  36.           FROM Municipios ,Ejidos ,Estados
  37.         WHERE
  38.             Ejidos.IdMunicipios= Municipios.IdMunicipios AND Municipios.IdEstados=Estados.IdEstados
  39.             AND  Ejidos.Ejido LIKE :AuxParametro
  40.         INTO:V_Ejido,:V_Municipio,:V_Estados,:V_IdEjido,:V_IdMunicipio,:V_IdEstados
  41.         Do BEGIN
  42.         suspend;
  43.                 N = N - 1;
  44.                 IF (N = 0) THEN exit;
  45.         END
  46.   END
  47. END^
  48.  
  49. SET TERM ; ^
  50.  
  51. GRANT SELECT ON Municipios TO PROCEDURE SpBuscaEjidos;
  52.  
  53. GRANT SELECT ON Ejidos TO PROCEDURE SpBuscaEjidos;
  54.  
  55. GRANT SELECT ON Estados TO PROCEDURE SpBuscaEjidos;
  56.  
  57. GRANT EXECUTE ON PROCEDURE SpBuscaEjidos TO SYSDBA;


  • 0

#3 IcebergDelphi

IcebergDelphi

    Advanced Member

  • Moderadores
  • PipPipPip
  • 176 posts
  • LocationVillaflores, Chiapas, Mexico

Posted 12 November 2009 - 01:46 PM

Quizá sea una tontería, pero ¿has probado a poner el % entre comillas dobles?
¿Has probado a quitar las comillas dobles y poner solo entre comillas lo que debe ir?



sql
  1. SET TERM ^ ;
  2.  
  3. CREATE PROCEDURE SpBuscaEjidos (
  4.     IpOpcion INTEGER,
  5.     n INTEGER,
  6.     IpParametro VARCHAR(150) CHARACTER SET octets)
  7. RETURNS (
  8.     V_Ejido VARCHAR(120) CHARACTER SET octets,
  9.     V_Municipio VARCHAR(60) CHARACTER SET octets,
  10.     V_Estados VARCHAR(50) CHARACTER SET octets,
  11.     V_IdEjido INTEGER,
  12.     V_IdMunicipio INTEGER,
  13.     V_IdEstados INTEGER)
  14. AS
  15. DECLARE VARIABLE AuxParametro VARCHAR(151) CHARACTER SET octets;
  16. BEGIN
  17.   AuxParametro = :IpParametro ||"%";
  18.   IF (:IpOpcion=0) THEN /* Busqueda por Municipio*/
  19.     BEGIN
  20.         FOR SELECT Eji.Ejido,Mun.Municipio,Mun.Estados,Eji.IdEjidos,Mun.IdMunicipios,Est.IdEstados
  21.           FROM Municipios Mun,Ejidos Eji,Estados Est
  22.         WHERE
  23.             Eji.IdMunicipios=Mun.IdMunicipios AND Mun.IdEstados= Est.IdEstados
  24.             AND Mun.Municipio LIKE :AuxParametro
  25.         INTO:V_Ejido,:V_Municipio,:V_Estados,:V_IdEjido,:V_IdMunicipio,:V_IdEstados
  26.         Do BEGIN
  27.         suspend;
  28.                 N = N - 1;
  29.                 IF (N = 0) THEN exit;
  30.         END
  31.   END
  32.  
  33.   IF (:IpOpcion=1) THEN /* Busqueda por Ejido*/
  34.     BEGIN
  35.         FOR SELECT Ejidos.Ejido,Municipios.Municipio,Municipios.Estados,Ejidos.IdEjidos,Municipios.I  dMunicipios,Estados.IdEstados
  36.           FROM Municipios ,Ejidos ,Estados
  37.         WHERE
  38.             Ejidos.IdMunicipios= Municipios.IdMunicipios AND Municipios.IdEstados=Estados.IdEstados
  39.             AND  Ejidos.Ejido LIKE :AuxParametro
  40.         INTO:V_Ejido,:V_Municipio,:V_Estados,:V_IdEjido,:V_IdMunicipio,:V_IdEstados
  41.         Do BEGIN
  42.         suspend;
  43.                 N = N - 1;
  44.                 IF (N = 0) THEN exit;
  45.         END
  46.   END
  47. END^
  48.  
  49. SET TERM ; ^
  50.  
  51. GRANT SELECT ON Municipios TO PROCEDURE SpBuscaEjidos;
  52.  
  53. GRANT SELECT ON Ejidos TO PROCEDURE SpBuscaEjidos;
  54.  
  55. GRANT SELECT ON Estados TO PROCEDURE SpBuscaEjidos;
  56.  
  57. GRANT EXECUTE ON PROCEDURE SpBuscaEjidos TO SYSDBA;



Hola gracias por la respuesta la verdad ya probe de todo y no funciona el signo % en las consultas con Like y con el mas reciente Firebird, a lo mejor sea un Bug, chance cuando tenga tiempo lo reporto , saludos y gracias nuevamente.
  • 0

#4 Marc

Marc

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1484 posts
  • LocationMallorca

Posted 30 December 2009 - 06:04 PM

Si el problema es debido al Like, entonces una solución inmediata pasa por no usarlo.

Puedes cambiar :


sql
  1. AND Mun."Municipio" LIKE:"IpParametro" || '%'



por :


sql
  1. AND Mun."Municipio" starting WITH :"IpParametro"



y obtendrás el mismo resultado.

Aunque al verdad es que el Like te tendría que funcionar, no creo que sea un bug de Firebird, puesto que sería demasiado gordo, ya habrían sacado una nueva versión arreglándolo y avisando a la gente para que se actualice.

Yo probaría a poner el % en la variable, como ya has probado, pero no con comillas dobles, puesto que el delimitador de cadenas es la comilla simple, y la comilla doble solo se utiliza para indicar que el nombre del campo/parámetro/... es sensible a mayúsculas y minúsculas.

Es decir, antes del FOR SELECT, yo pondría la línea :



sql
  1. "IpParametro" = "IpParametro" || '%';



Y sí quitas las dobles comillas en los parámetros, como has puesto en el segundo ejemplo, se entiende mucho mejor y funciona igual. Te queda :



sql
  1. IpParametro = IpParametro || '%';


  • 0

#5 IcebergDelphi

IcebergDelphi

    Advanced Member

  • Moderadores
  • PipPipPip
  • 176 posts
  • LocationVillaflores, Chiapas, Mexico

Posted 01 July 2010 - 08:41 AM

Si el problema es debido al Like, entonces una solución inmediata pasa por no usarlo.

Puedes cambiar :


sql
  1. AND Mun."Municipio" LIKE:"IpParametro" || '%'



por :


sql
  1. AND Mun."Municipio" starting WITH :"IpParametro"



y obtendrás el mismo resultado.

Aunque al verdad es que el Like te tendría que funcionar, no creo que sea un bug de Firebird, puesto que sería demasiado gordo, ya habrían sacado una nueva versión arreglándolo y avisando a la gente para que se actualice.

Yo probaría a poner el % en la variable, como ya has probado, pero no con comillas dobles, puesto que el delimitador de cadenas es la comilla simple, y la comilla doble solo se utiliza para indicar que el nombre del campo/parámetro/... es sensible a mayúsculas y minúsculas.

Es decir, antes del FOR SELECT, yo pondría la línea :



sql
  1. "IpParametro" = "IpParametro" || '%';



Y sí quitas las dobles comillas en los parámetros, como has puesto en el segundo ejemplo, se entiende mucho mejor y funciona igual. Te queda :



sql
  1. IpParametro = IpParametro || '%';




Gracias Marc no habia visto este mensaje jejej, saludos
  • 0




IP.Board spam blocked by CleanTalk.