FastReport 6.9表单字符串转整数方法及查询变量失效解决
报表表单变量类型转换问题
我正在创建报表,填写表单时变量无法正常工作,查询未返回任何结果。推测传入的值是字符串类型,而查询需要整数类型,请问如何转换类型?
表单界面

查询配置界面

所用SQL代码
SELECT TORDEMPROD.NUM_CHAVE AS "Chave da Ordem" ,Trim(TORDEMPROD.COD_EMPRESA) AS "Código da Empresa" ,TEMPRESA.DES_RAZSOCIAL AS "Razão Social Empresa" ,TEMPRESA.DES_FANTASIA AS "Fantasia Empresa" ,TORDEMPROD.COD_DOCOP AS "Código do Documento" ,Trim(TORDEMPROD.NUM_ORDEMPROD) AS "Numero da Ordem" ,TORDEMPROD.TIP_PRODUTO AS "Tipo Produto" ,TORDEMPROD.COD_PRODUTO AS "Código Produto" ,TPRODUTO.DES_PRODUTO AS "Descricao do Produto" ,TPRODUTO.DES_COMPLMAT AS "Complementar do Produto" ,TORDEMPROD.DES_OBS ,CASE WHEN TORDEMPROD.STA_PLANEJAMENTO = 1 THEN 'Planejado' WHEN TORDEMPROD.STA_PLANEJAMENTO = 2 THEN 'Firmado' WHEN TORDEMPROD.STA_PLANEJAMENTO = 2 THEN 'Simulado' WHEN TORDEMPROD.STA_PLANEJAMENTO = 4 THEN 'Firmado com Alteracao' END AS STAPLANEJAMENTO ,CASE WHEN TORDEMPROD.STA_ATENDIMENTO = 0 THEN 'Totalmente em Aberto' WHEN TORDEMPROD.STA_ATENDIMENTO = 1 THEN 'Atendido Parcialmente' WHEN TORDEMPROD.STA_ATENDIMENTO = 2 THEN 'Atendido Totalmente' END AS STATENDIMENTO ,TORDEMPROD.QTD_PRODUZIR ,TPRODUTO.SIG_UNIDADE ,TUNIDADE.DES_UNIDADE ,TORDEMPROD.DAT_NECESSARIA ,TMRP.COD_DOCMRP ,TMRP.NUM_MRP ,TMRP.DES_MRP FROM TORDEMPROD INNER JOIN TEMPRESA ON TEMPRESA.COD_EMPRESA = TORDEMPROD.COD_EMPRESA INNER JOIN TPRODUTO ON TPRODUTO.TIP_PRODUTO = TORDEMPROD.TIP_PRODUTO AND TPRODUTO.COD_PRODUTO = TORDEMPROD.COD_PRODUTO AND TPRODUTO.COD_EMPRESA = TORDEMPROD.COD_EMPRESA INNER JOIN TUNIDADE ON TPRODUTO.SIG_UNIDADE = TUNIDADE.SIG_UNIDADE INNER JOIN TMRP ON TORDEMPROD.COD_EMPRESA = TMRP.COD_EMPRESA AND TORDEMPROD.NUM_CHMRP = TMRP.NUM_CHAVE WHERE TORDEMPROD.NUM_ORDEMPROD = :NUM_CHAVEOP
类型转换方案
根据你使用的数据库类型,选择对应的转换方式:
- MySQL/MariaDB:使用
CAST或CONVERT函数WHERE TORDEMPROD.NUM_ORDEMPROD = CAST(:NUM_CHAVEOP AS UNSIGNED) -- 或者 WHERE TORDEMPROD.NUM_ORDEMPROD = CONVERT(:NUM_CHAVEOP, UNSIGNED) - Oracle:使用
TO_NUMBER函数WHERE TORDEMPROD.NUM_ORDEMPROD = TO_NUMBER(:NUM_CHAVEOP) - SQL Server:使用
CAST或TRY_CAST(转换失败时返回NULL,避免报错)WHERE TORDEMPROD.NUM_ORDEMPROD = CAST(:NUM_CHAVEOP AS INT) -- 容错版 WHERE TORDEMPROD.NUM_ORDEMPROD = TRY_CAST(:NUM_CHAVEOP AS INT) - PostgreSQL:使用类型转换运算符
::INT或CAST函数WHERE TORDEMPROD.NUM_ORDEMPROD = :NUM_CHAVEOP::INT -- 或者 WHERE TORDEMPROD.NUM_ORDEMPROD = CAST(:NUM_CHAVEOP AS INT)
另外,更优的方式是直接在报表工具的参数设置里,将NUM_CHAVEOP的参数类型设置为整数,从源头解决类型不匹配问题。
内容的提问来源于stack exchange,提问作者buzinaro
相关产品推荐
相关产品推荐

