Erro em UDF
Pessoal estou fazendo uma stored que gere um pedido, entao vai ter varios ´inserts´ em varias tabelas, ate ai tudo bem, so que passado a DATA DE PAGAMENTO, esta sera incrementada cada parcela em 1 mes.. entao ficaria
Pagamento dia 09/02/2005 em 3x ai sera gerado
09/02/2005
09/03/2005
09/04/2005
Gerar a tabela e as parcelas to conseguindo, porem incrementar a data nao achei nada no firebird que poderia fazer isso por mim, entao resolvi fazer uma UDF so que esta dando o seguinte problema ao tentar utiliza-la.
Invalid token.
invalid request BLR at offset 1108.
function IncMes is not defined.
module name or entrypoint could not be found.
Verifiquei na declaracao da udf e fui seguindo o exemplo que tem no proprio firebird e na declaracao ficou assim
DECLARE EXTERNAL FUNCTION ´IncMes´
DATE
RETURNS DATE BY VALUE
ENTRY_POINT ´ServidorFB_IncMes´ MODULE_NAME ´ServidorFB´
Onde IncMes é o nome da function da dll
ServidorFB é a dll colocada na pasta UDF do firebird
A function recebe uma data de parametro, incrementa e devolve uma outra Data
Nao to conseguindo achar o erro, embora nao mexer muito com udf... Aproveitando ja a duvida, o que seria os parametros que na declaracao da udf pede para mim, o que seria entry_point e os demais que é pedido, faco meio que seguindo exemplos, e no meu codigo para incrementar data no firebird a melhor forma seria mesmo utilizando udf? Espero que fui claro, Fico no aguardo de ajuda... Valeu
Renato/SP
Pagamento dia 09/02/2005 em 3x ai sera gerado
09/02/2005
09/03/2005
09/04/2005
Gerar a tabela e as parcelas to conseguindo, porem incrementar a data nao achei nada no firebird que poderia fazer isso por mim, entao resolvi fazer uma UDF so que esta dando o seguinte problema ao tentar utiliza-la.
Invalid token.
invalid request BLR at offset 1108.
function IncMes is not defined.
module name or entrypoint could not be found.
Verifiquei na declaracao da udf e fui seguindo o exemplo que tem no proprio firebird e na declaracao ficou assim
DECLARE EXTERNAL FUNCTION ´IncMes´
DATE
RETURNS DATE BY VALUE
ENTRY_POINT ´ServidorFB_IncMes´ MODULE_NAME ´ServidorFB´
Onde IncMes é o nome da function da dll
ServidorFB é a dll colocada na pasta UDF do firebird
A function recebe uma data de parametro, incrementa e devolve uma outra Data
Nao to conseguindo achar o erro, embora nao mexer muito com udf... Aproveitando ja a duvida, o que seria os parametros que na declaracao da udf pede para mim, o que seria entry_point e os demais que é pedido, faco meio que seguindo exemplos, e no meu codigo para incrementar data no firebird a melhor forma seria mesmo utilizando udf? Espero que fui claro, Fico no aguardo de ajuda... Valeu
Renato/SP
Renato_sp
Curtidas 0
Respostas
Renato_sp
09/02/2005
Sobe
GOSTEI 0
Renato_sp
09/02/2005
Pessoal devido esta duvida o sistema que estou montando esta parado, pois esta bem no modulo principal do sistema, pois todos os outros depende da geracao de pedidos para ser montado como o entrada/saida, pagamentos em atraso, pagamentos do dia, etc etc, entao mexendo no sistema agora de manha, consegui fazer a udf funcionar sem acusar mais o problema
Invalid token.
invalid request BLR at offset 1108.
function IncMes is not defined.
module name or entrypoint could not be found.
Embora ao rodar o select ou a stored nao to tendo o resultado esperado, veja como esta saindo o resultado
Select datavenda, incmes(datavenda) from vendacliente
Data Venda - Data Incrementada
10/02/2005 - 21/12/1858
e o que eu esperava seria
Data Venda - Data Incrementada
10/02/2005 - 10/03/2005
Embora saber mais ou menos as causas deste erro, pois datas em sql utiliza o formato mm-dd-yyyy, e o delphi usa o formato dd-mm-yyyy e pode ser que isso teja fazendo o incremento errado, pois nao tratei formato de dados nem no delphi e nem no firebird.
Se alguem ja trabalhou com udf com data, ou tem uma dica se seria melhor tratar o formato de data no delphi, ou usar no proprio servidor, ou ate mesmo se o erro nao for este, estarei por aqui, e com ideias fica mais facil de obter um resultado satisfatorio
Valeu...
Renato/SP
Invalid token.
invalid request BLR at offset 1108.
function IncMes is not defined.
module name or entrypoint could not be found.
Embora ao rodar o select ou a stored nao to tendo o resultado esperado, veja como esta saindo o resultado
Select datavenda, incmes(datavenda) from vendacliente
Data Venda - Data Incrementada
10/02/2005 - 21/12/1858
e o que eu esperava seria
Data Venda - Data Incrementada
10/02/2005 - 10/03/2005
Embora saber mais ou menos as causas deste erro, pois datas em sql utiliza o formato mm-dd-yyyy, e o delphi usa o formato dd-mm-yyyy e pode ser que isso teja fazendo o incremento errado, pois nao tratei formato de dados nem no delphi e nem no firebird.
Se alguem ja trabalhou com udf com data, ou tem uma dica se seria melhor tratar o formato de data no delphi, ou usar no proprio servidor, ou ate mesmo se o erro nao for este, estarei por aqui, e com ideias fica mais facil de obter um resultado satisfatorio
Valeu...
Renato/SP
GOSTEI 0
Gandalf.nho
09/02/2005
Experimente usar a biblioteca UDF [url=http://rfunc.sourceforge.net/]RFunc[/url], já usei ela com datas tanto no Interbase como no Firebird e funciona legal.
GOSTEI 0
Renato_sp
09/02/2005
Eu dei uma olhada la na udf porem ja tem algumas function que fiz e queria fazer em apenas uma dll, e é bom para aprender a utilizar data em udf, nao sei pq mas a que to fazendo nao ta incrementando o mes e sim vindo uma data doida, fiz o teste pelo delphi e retorna normalmente com a data certinha
10/02/2005 >> 10/03/2005
Ja refiz umas 500x alem de testar de varios modos, nossa ta dificil utilizar data em udf... :D, sera que alguem ja teve este problema em gerar parcela , com cada parcela com a data um mes acima da ultima
Renato/SP
10/02/2005 >> 10/03/2005
Ja refiz umas 500x alem de testar de varios modos, nossa ta dificil utilizar data em udf... :D, sera que alguem ja teve este problema em gerar parcela , com cada parcela com a data um mes acima da ultima
Renato/SP
GOSTEI 0
Gandalf.nho
09/02/2005
Como você criou essa UDF? Não esqueça que datas são tratadas de maneira especial numa UDF criada com o Delphi. Essa data estranha que está sendo retornada aparentemente indica uma data inválida.
GOSTEI 0
Renato_sp
09/02/2005
gandalf.nho obrigado pela ajudas, eu ainda nao consegui resolver mas com nossa conversa deste topico estou tentando acertar.
Estou tentando de varias maneiras ate acertar, tentando tratar o formato da data na dll, etc etc, em outras aplicacoes delphi, a dll esta funcionando corretamente, mas como nunca precisei fazer uma stored com data ainda to apanhando um pouco, mas to fazendo umas pesquisas atras de algo que resolve... mas muito obrigado mesmo pelas ajudas.
Renato / SP
Estou tentando de varias maneiras ate acertar, tentando tratar o formato da data na dll, etc etc, em outras aplicacoes delphi, a dll esta funcionando corretamente, mas como nunca precisei fazer uma stored com data ainda to apanhando um pouco, mas to fazendo umas pesquisas atras de algo que resolve... mas muito obrigado mesmo pelas ajudas.
Renato / SP
GOSTEI 0
Gandalf.nho
09/02/2005
Como você declarou os parâmetros data em sua DLL? No IB/FB as datas são declaradas conforme o padrão usado pela linguagem C, que é diferente do TDateTime do Delphi. É necessário tratar os valores passados pelo banco de dados antes de trabalhar em cima deles. Dê uma olhada nesse link, há alguns artigos (em inglês) sobre criação de UDFs [url]http://www.ibphoenix.com/main.nfs?a=ibphoenix&page=ibp_research_examples[/url]
Existem tb 2 números antigos da ClubeDelphi sobre UDFs
Existem tb 2 números antigos da ClubeDelphi sobre UDFs
GOSTEI 0