Funções string, matemáticas e de data
Sou usuário do mysql e resolvi experimentar o firebird embarcado, mas estou tendo dificuldade em utilizar funções, por exemplo:
SELECT LEFT(DESCRICAO, 20) FROM PRODUTOS
ou SELECT * FROM DATAS WHERE MONTH(DATA) = 3
elas retornam token inválido LEFT e MONTH.
Onde acho uma apostila sobre interbase/firebird que não fale apenas dos comandos sql, mas também de funções de tratamento de string, funções matemáticas, de datas e de converssão que não seja apenas a função CAST, pois se só existir essa então eu desisto e volto para o mysql.
SELECT LEFT(DESCRICAO, 20) FROM PRODUTOS
ou SELECT * FROM DATAS WHERE MONTH(DATA) = 3
elas retornam token inválido LEFT e MONTH.
Onde acho uma apostila sobre interbase/firebird que não fale apenas dos comandos sql, mas também de funções de tratamento de string, funções matemáticas, de datas e de converssão que não seja apenas a função CAST, pois se só existir essa então eu desisto e volto para o mysql.
Algoritmos
Curtidas 0
Respostas
Fsflorencio
22/09/2004
Procure em sites como www.firebase.com.br ou www.comunidade-firebird.org.
Mas já te adianto que para resolver este problema vc pode usar a função substring e extract.
ps. Não desista tão rápido assim do Firebird!
Mas já te adianto que para resolver este problema vc pode usar a função substring e extract.
ps. Não desista tão rápido assim do Firebird!
GOSTEI 0
Gandalf.nho
22/09/2004
Você deve procurar sobre UDF. Um bom começo é olhar a biblioteca freeware RFunc [url]http://rfunc.sourceforge.net/[/url]
GOSTEI 0
Afarias
22/09/2004
Em geral vc vai ter de usar UDFs (funções externas) visto q o IB (ou FB) é pobre em funções internas... mas expecificamente nestes casos vc pode usar (FB 1.5)::
SELECT SUBSTRING(DESCRICAO FROM 1 FOR 20) FROM PRODUTOS
SELECT * FROM DATAS WHERE EXTRACT(MONTH FROM DATA) = 3
E leia tb::
http://www.ibphoenix.com/downloads/Firebird_v15.108_ReleaseNotesPortugBrasil.pdf
T+
SELECT SUBSTRING(DESCRICAO FROM 1 FOR 20) FROM PRODUTOS
SELECT * FROM DATAS WHERE EXTRACT(MONTH FROM DATA) = 3
E leia tb::
http://www.ibphoenix.com/downloads/Firebird_v15.108_ReleaseNotesPortugBrasil.pdf
T+
GOSTEI 0
Algoritmos
22/09/2004
Valeu pessoal, muito obrigado pelas dicas.
Eu realmente não vou desistir do firebird tão fácil não, aquele desabafo foi porque eu estava extremamente euforico pelo firebird embarcado, então quanto surgiu a primeira dificuldade eu me assustei.
Gandalf, não sei se você recebeu meu e-mail, mas agora gostaria de saber como realmente utilizar a rfunc com o firebird e o firebird embarcado pois ela me pareceu bastante interessante. Será que é preciso fazer alguma alteração no arquivo firebird.conf para que ele passe a utilizar a rfunc.dll, eu apenas a copiei para a pasta e:\temp\udf, já que estou com teste.fdb e a fbembed.dll na pasta e:\temp.
Eu realmente não vou desistir do firebird tão fácil não, aquele desabafo foi porque eu estava extremamente euforico pelo firebird embarcado, então quanto surgiu a primeira dificuldade eu me assustei.
Gandalf, não sei se você recebeu meu e-mail, mas agora gostaria de saber como realmente utilizar a rfunc com o firebird e o firebird embarcado pois ela me pareceu bastante interessante. Será que é preciso fazer alguma alteração no arquivo firebird.conf para que ele passe a utilizar a rfunc.dll, eu apenas a copiei para a pasta e:\temp\udf, já que estou com teste.fdb e a fbembed.dll na pasta e:\temp.
GOSTEI 0
Gandalf.nho
22/09/2004
Não sei se precisa mexer no Firebird.conf, em casa estou usando na pasta padrão do Firebird (versão normal, não embedded) e não precisei configurar nada. Com a UDF instalada, basta declarar em seu banco de dados as funções desejadas (use DECLARE EXTERNAL FUNCTION) e elas estarão disponíveis para o uso. Na documentação do RFunc existe um arquivo com todas as funções disponíveis e seus parâmetros. Qualquer dúvida de como declarar uma função específica, poste aqui.
GOSTEI 0
Luizneto
22/09/2004
Um amigo instalou as duas UDFs que vem com o Firebird para que eu tivesse acesso as funcoes RPad e LPad. Como faco para distribuir minha aplicacao com este recurso ? terei que instalar manualmente as UDFXX.dll nas maquinas de meus clientes ou posso envia-las juntamente com meu executavel ou ate mesmo apenas copia-las para uma pasta do Firebird 1.5 na instalacao que elas irao funcionar ?
GOSTEI 0
Algoritmos
22/09/2004
Luiz, pela resposta do Gandalf, além de enviar as dll junto com seu executável, você deverá declarar as funções no banco de dados.
GOSTEI 0
Afarias
22/09/2004
As DLLs (UDFs) devem ficar no SERVIDOR (FIREBIRD) na pasta UDF
No caso do FB Embedded, essa pasta (UDF) fica onde está os arquivos do FB (e os seus executáveis) -- não tenho certeza mas TALVEZ vc tenha neste caso q alterar (ou ter) o arquivo firebird.conf com a configuração::
RootDirectory = pasta_onde_está_a_pasta_UDF
T+
No caso do FB Embedded, essa pasta (UDF) fica onde está os arquivos do FB (e os seus executáveis) -- não tenho certeza mas TALVEZ vc tenha neste caso q alterar (ou ter) o arquivo firebird.conf com a configuração::
RootDirectory = pasta_onde_está_a_pasta_UDF
T+
GOSTEI 0
Algoritmos
22/09/2004
Ok, A. Farias e Gandalf, mas agora o problema é este ai:
Unsuccessful execution caused by a system error that precludes
successful execution of subsequent statements.
Access to UDF library ´rfunc.DLL´ is denied by server administrator.
Unsuccessful execution caused by a system error that precludes
successful execution of subsequent statements.
Access to UDF library ´rfunc.DLL´ is denied by server administrator.
GOSTEI 0
Gandalf.nho
22/09/2004
Você tem que ter permissão para acessar o diretório onde está a UDF.
GOSTEI 0
Algoritmos
22/09/2004
Ok, mas como dar essa permissão ? Seria no arquivo firebird.conf ?
GOSTEI 0
Gandalf.nho
22/09/2004
Qual o seu sistema operacional?
GOSTEI 0
Algoritmos
22/09/2004
Windows XP e Windows 98, o problema ´Access to UDF library ´rfunc.DLL´ is denied by server administrator´ ocorre nos dois, só com o firebird embarcado. Vocês estariam se perguntando por que eu não utilizo logo o fb server, bem, é que achei muito interessante você poder embarcar o SGBD na aplicação, mesmo que seja apenas monousuário, por isso a insistência na utilização do fb embarcado. Por favor, se alguém com mais experiência no fb puder instalar e testar a fbembed.dll utilizando UDFs tanto no delphi quanto no IBExpert e der uma dica para solucionar o problema eu agradeceria muito.
GOSTEI 0
Afarias
22/09/2004
|Por favor, se alguém com mais experiência no fb puder instalar e testar
|a fbembed.dll utilizando UDFs tanto no delphi
Utilizo normalmente.
|quanto no IBExpert e der uma dica para solucionar o problema eu
|agradeceria muito.
Vc não tem como usar o IBExpert -- poque ele teria q estar instalado junto (na mesma pasta) com o FB Embedded, certo?? (bom, vc pode copiar todos os arquivos do FB Embedded (inclusive a pasta UDF) para a pasta do IBExpert, e tentar assim...)
Mas... sugiro q use o FB embedded apenas para distribuição -- mantenha o FB (server, normal) no seu ambiente de desenvolvimento.
T+
|a fbembed.dll utilizando UDFs tanto no delphi
Utilizo normalmente.
|quanto no IBExpert e der uma dica para solucionar o problema eu
|agradeceria muito.
Vc não tem como usar o IBExpert -- poque ele teria q estar instalado junto (na mesma pasta) com o FB Embedded, certo?? (bom, vc pode copiar todos os arquivos do FB Embedded (inclusive a pasta UDF) para a pasta do IBExpert, e tentar assim...)
Mas... sugiro q use o FB embedded apenas para distribuição -- mantenha o FB (server, normal) no seu ambiente de desenvolvimento.
T+
GOSTEI 0
Algoritmos
22/09/2004
Certo A. Farias, mas como é esse ´utilizo normalmente´ ? Porque comigo ocorre o erro que mencionei nas mensagens anteriores, por avor, é necessário alterar algum arquivo ou qualquer outra coisa ? Tá tudo muito vago.
GOSTEI 0
Afarias
22/09/2004
|Certo A. Farias, mas como é esse ´utilizo normalmente´ ?
Minha aplicação distribuida com o FB Embedded funciona perfeitamente, inclusive com UDF, e em vários SO diferentes.
Não há necessidade de nada além de colocar os arquivos do FB Embedded junto com a aplicação (além da pasta UDF e das UDFs quando as utilizo)
Segue a lista de arquivos q distribuo junto com minha aplicação (como no Release Notes do Firebird 1.5 ou readme.txt do Firebird Embedded) ::
Da forma como está acima, não precisa do firebird.conf, agora, se eu quiser colocar os arquivos do FB (tirando a gds32.dll) em outra pasta, teria q fazer::
Mas, falo apenas da aplicação (e sua distribuição). Quando estou desenvolvendo, utilizo o FB Server ´normal´ dai posso usar sem problemas ferramentas como IBExpert
Aproveitando, vc está usando a versão mais atual do FB Embedded?
T+
Minha aplicação distribuida com o FB Embedded funciona perfeitamente, inclusive com UDF, e em vários SO diferentes.
Não há necessidade de nada além de colocar os arquivos do FB Embedded junto com a aplicação (além da pasta UDF e das UDFs quando as utilizo)
Segue a lista de arquivos q distribuo junto com minha aplicação (como no Release Notes do Firebird 1.5 ou readme.txt do Firebird Embedded) ::
/minha_aplicação.exe // <-- meu programa /gds32.dll // <-- fbembedded.dll renomeada! (uso IBX) /firebird.msg /ib_util.dll /intl/fbintl.dll /udf/fbudf.dll
Da forma como está acima, não precisa do firebird.conf, agora, se eu quiser colocar os arquivos do FB (tirando a gds32.dll) em outra pasta, teria q fazer::
/minha_aplicação.exe // <-- meu programa /gds32.dll // <-- fbembedded.dll renomeada! (uso IBX) /firebird.conf // <-- configuração da pasta do FB /pasta do fb/firebird.msg /pasta do fb/ib_util.dll /pasta do fb/intl/fbintl.dll /pasta do fb/udf/fbudf.dll no firebird.conf teria:: RootDirectory = /pasta do fb
Mas, falo apenas da aplicação (e sua distribuição). Quando estou desenvolvendo, utilizo o FB Server ´normal´ dai posso usar sem problemas ferramentas como IBExpert
Aproveitando, vc está usando a versão mais atual do FB Embedded?
T+
GOSTEI 0