Ir para conteúdo
Fórum Script Brasil
  • 0

Consultar Tabela no Access 2019 com chamada de Public Function na Query SQL


Flavio Costa

Pergunta

Boa tarde a todos.
Sou novo aqui no forum, e venho solicitar uma ajuda para descobrir um erro.
Estou fazendo uma rotina em PERL para buscar algumas informações no Access.
No Access existe um função publica que faz o calculo da idade, onde passo os parametros da data de nascimento e data do dia, e ele retorna a idade completa em ano, mes e dias.
A função funciona perfeitamente no access, portanto quando monto a query no Perl, recebo a mensagem de erro que a função está "indefinida na expressão".
SELECT T1.cpf_assistido, T1.idf_nome, T2.nm_dependente, T2.cpf_dependente, T2.dt_nascto, Val(calc_idade2([T2].[dt_nascto],#31/12/2024#,1)) AS dep_ANOS, calc_idade2([T2].[dt_nascto],#31/12/2024#,3) AS idade, T2.genero, Val(calc_idade2([T2].[dt_nascto],#31/12/2024#,2)) AS Parm_idade FROM tbl_social_assistidos AS T1 INNER JOIN tbl_social_comp_familiar AS T2 ON T1.cpf_assistido = T2.cpf_assistido WHERE (((T2.parentesco)='Filho(a)') AND ((Val(calc_idade2([T2].[dt_nascto],#31/12/2024#,2)))<=120000))
DBD::ODBC::st execute failed: [Microsoft][Driver ODBC Microsoft Access] Funτπo 'calc_idade2' indefinida na expressπo. (SQL-42000) at Rel_Dependentes.pl line 126.

A query também é executado corretamente no PERL se retirar a chamada da função (calc_idade2).

Muito obrigado.
Flavio

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Boa tarde, pelo que entendi sua "query" está sendo executada dentro do access correto? (fiz essa suposição pela conexão com o arquivo do access 2019)
Nesse caso seria melhor substituir o sql que esta utilizando para uma função nativa do access em SQL, assim você vai conseguir executar a query.
Qual o objetivo da função "calc_idade2"?

Link para o comentário
Compartilhar em outros sites

  • 0

Eu consultei o Copilot, e ele disse que é possível o PERL executar uma macro do Microsoft Access. Ou seja, se a sua consulta funciona no Microsoft Access, você precisa transformar essa consulta numa macro e pedir para o PERL executar a macro:
 

#!/usr/bin/perl
use strict;
use warnings;
use Win32::OLE;

# Caminho para o arquivo .mdb
my $caminho = 'C:/caminho/para/seu/arquivo.mdb';

# Inicializa o objeto Access
my $access = Win32::OLE->new('Access.Application', 'Quit') or die "Não foi possível iniciar o Access: $!";

# Abre o banco de dados
my $banco = $access->OpenCurrentDatabase($caminho) or die "Não foi possível abrir o banco de dados: " . $access->LastError();

# Executa a subroutine
$banco->RunMacro('NomeDaSubroutine');

# Fecha o banco de dados e o Access
$banco->CloseCurrentDatabase();
$access->Quit;

Acho que o mais sensato é criar a função calc_idade2 no ambiente do PERL, ou seja, você estuda a fonte original do Access e depois codifica na gramática do PERL. O máximo que dá para fazer com as conexões ODBC é acessar informações contidas nas tabelas e não todos os recursos do Microsoft Access.

Editado por Frank K Hosaka
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...