MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

Obrigado

Administração do MaximoAccess

MaximoAccess

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access

    [Resolvido]Consulta Pass-Through com parâmetros do Access

    avatar
    miguel.serra
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 50
    Registrado : 20/01/2011

    [Resolvido]Consulta Pass-Through com parâmetros do Access Empty [Resolvido]Consulta Pass-Through com parâmetros do Access

    Mensagem  miguel.serra em 20/10/2017, 03:41

    Olá! Saberiam dizer se a consulta do tipo Pass-Through aceita uma expressão que utilize critérios baseados em informações contidas em formulários do Access?

    Exemplo:

    SELECT * FROM `2_un` WHERE `2_un`.cliente_fk = [Forms]![3_GESTÃO DE RPC]![CxSelectCliente].[Value]
    (essa dá erro!)
    Obrigado!
    Cláudio Más
    Cláudio Más
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1278
    Registrado : 21/01/2012

    [Resolvido]Consulta Pass-Through com parâmetros do Access Empty Re: [Resolvido]Consulta Pass-Through com parâmetros do Access

    Mensagem  Cláudio Más em 7/11/2017, 12:48

    Não aceita, mas a consulta pode ser alterada conforme necessita, usando o código abaixo:

    Código:
    Set db = CurrentDb
    Set qd = db.QueryDefs("NomeConsulta")
    qd.sql = "SELECT * FROM `2_un` WHERE `2_un`.cliente_fk = " & Forms![3_GESTÃO DE RPC]![CxSelectCliente]
    avatar
    miguel.serra
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 50
    Registrado : 20/01/2011

    [Resolvido]Consulta Pass-Through com parâmetros do Access Empty Re: [Resolvido]Consulta Pass-Through com parâmetros do Access

    Mensagem  miguel.serra em 9/11/2017, 20:07

    Caro Cláudio Más, tire o dia para descansar! Você merece!!!  Very Happy
    Muito obrigado, matou a questão!


    Para se ter ideia, o tempo da consulta não pass-through para o que eu preciso é de suados 30 segundos. Com ela, cai para: 0,3 segundos! Cronometrado
    Veja como é importante pra mim!


    Na verdade, preciso dela para fazer uma consulta do tipo UPDATE, sem retorno de dados.

    Como sua resposta trouxe luz a interessante alternativa VBA (que eu nem sonhava!), pergunto (por mera curiosidade): Ao invés de atualizar a consulta, e ter que chamá-la depois, não daria para fazê-la diretamente pelo VBA?


    Exemplo: DoCmd.RunbSQLDoTipoPass-Through ("UPDATE `taxas-cod` SET `taxas-cod`.`vinculado` = 0 WHERE `2_un`.cliente_fk = " & Forms![3_GESTÃO DE RPC]![CxSelectCliente], semretorno)

    avatar
    miguel.serra
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 50
    Registrado : 20/01/2011

    [Resolvido]Consulta Pass-Through com parâmetros do Access Empty Re: [Resolvido]Consulta Pass-Through com parâmetros do Access

    Mensagem  miguel.serra em 9/11/2017, 20:32

    Acho que consegui!

    Código:
    Dim db As DAO.Database
    Dim qd As QueryDef
    Dim Sql As String

    Set db = CurrentDb

    Sql = "UPDATE `taxas-cod` SET `taxas-cod`.`vinculado` = 0 WHERE `taxas-cod`.codcli_fk = " & Forms![3_GESTÃO DE RPC]![CxSelectCliente]

    Set qd = db.CreateQueryDef("atualizavinculos", Sql)

    qd.Execute

    db.QueryDefs.Delete "atualizavinculos"

    Muito obrigado, Cláudio, sua resposta, além de resolver, fez melhorar ainda mais o que eu queria!
    Cláudio Más
    Cláudio Más
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1278
    Registrado : 21/01/2012

    [Resolvido]Consulta Pass-Through com parâmetros do Access Empty Re: [Resolvido]Consulta Pass-Through com parâmetros do Access

    Mensagem  Cláudio Más em 9/11/2017, 20:55

    Legal Miguel, valeu!

    Mas creio que a consulta criada "atualizavinculos" não será do tipo pass-trough.
    Parece que está faltando atribuir a string de conexão com o SQL Server no seu último código.
    Mais ou menos assim:

    strConnect = "DRIVER=SQL Server;SERVER=servidor;DATABASE=banco;Uid=sa;Pwd=senha;"
    qd.Connect = "ODBC;" & strConnect
    avatar
    miguel.serra
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 50
    Registrado : 20/01/2011

    [Resolvido]Consulta Pass-Through com parâmetros do Access Empty Re: [Resolvido]Consulta Pass-Through com parâmetros do Access

    Mensagem  miguel.serra em 10/11/2017, 01:33

    Tem razão! Testei agora e está dando erro...

    Ajustei o código mas não tá indo.

    Incluí o "qd.ReturnsRecords = False" porque tava dando "erro em tempo de execução 3065 / Não é possível executar uma consulta seleção"
    Mas agora dá outro erro "3146 / ODBC -- falha na chamada"

    Saberia dizer onde estou errando?

    Código:
    Dim strConnect As String
    Dim db As DAO.Database
    Dim qd As DAO.QueryDef
    Dim Sql As String

    Set db = CurrentDb

    Sql = "UPDATE `taxas-cod` SET `taxas-cod`.`vinculado` = 0 WHERE `taxas-cod`.codcli_fk = " & Forms![3_GESTÃO DE RPC]![CxSelectCliente]
    Set qd = db.CreateQueryDef("atualizavinculos", Sql)
    strConnect = "Driver={MySQL ODBC 5.3 Unicode Driver};server=192.168.1.6;DATABASE=basecli;UID=usuario;Pwd=senha;Port=3306;"
    qd.Connect = "ODBC;" & strConnect
    qd.ReturnsRecords = False
    qd.Execute
    db.QueryDefs.Delete "atualizavinculos"

    Obrigado!
    Cláudio Más
    Cláudio Más
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1278
    Registrado : 21/01/2012

    [Resolvido]Consulta Pass-Through com parâmetros do Access Empty Re: [Resolvido]Consulta Pass-Through com parâmetros do Access

    Mensagem  Cláudio Más em 10/11/2017, 02:14

    Creio que não poderá usar consulta do tipo pass-through para executar consultas do tipo ação.
    Poderá criar uma consulta atualização sobre a consulta pass-through.

    Se o erro se refere a conexão com o MySQL, desculpe mas não tenho como ajudar.
    avatar
    miguel.serra
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 50
    Registrado : 20/01/2011

    [Resolvido]Consulta Pass-Through com parâmetros do Access Empty Re: [Resolvido]Consulta Pass-Through com parâmetros do Access

    Mensagem  miguel.serra em 10/11/2017, 02:19

    Excelente, Cláudio, esta segunda parte era só uma curiosidade mesmo. Você já foi certeiro na questão e me ajudou muito!

    Muito obrigado!!

    avatar
    onfire
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 4
    Registrado : 18/09/2016

    [Resolvido]Consulta Pass-Through com parâmetros do Access Empty Consulta Pass-Through com parâmetros do Access

    Mensagem  onfire em 11/2/2020, 00:10

    Esse procedimento parece-me bastante interessante. Mas não entendi o procedimento.
    Poderiam ajudar-me?
    Onde colocam o código e como o fazem disparar? Eu conheço pouco de access.


    Coloquei um botão no formulário e fiz evento ao clicar. Onde estou a errar? O Objetivo é obter os dados para consulta.

    Private Sub seguinte_Click()
    Dim db As DAO.Database
    Dim qd As DAO.QueryDef
    Dim Sql As String

    Set db = CurrentDb


    Sql = "SELECT tblclientes.idCliente, tblclientes.cli_Nome, tblclientes.cli_Endereço, tblclientes.cli_Telefone"
    FROM tblclientes
    WHERE tblclientes.cli_Nome Like " & [Formulários]![frm1]![palavra] & " * ";"

    Set qd = db.CreateQueryDef("atualizavinculos", Sql)
    strConnect = "DSN=Teste_cadastro;"
    qd.Connect = "ODBC;" & strConnect
    End Sub
    avatar
    miguel.serra
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 50
    Registrado : 20/01/2011

    [Resolvido]Consulta Pass-Through com parâmetros do Access Empty Re: [Resolvido]Consulta Pass-Through com parâmetros do Access

    Mensagem  miguel.serra em 12/2/2020, 15:53

    Olá, onfire!

    A consulta passt-through, no meu humilde entendimento, é uma consulta feita com o código sql (na linguagem SQL/MySql/ Talvez Postgree, etc, não a do MS-Access) e ela vai retornar os dados no MS-Access como se fosse uma tabela vinculada do BD. Muito mais rápido!

    Você, primeiro, precisa ir em Criar/Design da Consulta e clicar no botão "Passagem", que é um ícone de globo.

    Irá aparecer uma tela em branco onde você deve colocar o código da consulta.

    Veja que não há aquela tela de construção, onde você consegue montar uma consulta colocando visualmente as tabelas e fazendo os relacionamentos. Precisa ser código mesmo.

    Coloque o código. Exemplo (supondo que vc tem uma tabela contatos e há os campos "nome" e "nacionalidade"):
    SELECT nome FROM contatos WHERE nacionalidade = 'brasileira';

    Você deve salvar esta consulta de passagem. Exemplo: pst_contatos_por_nacionalidade

    Sempre que você abrir a consulta pst_contatos_por_nacionalidade, aparecerão os contatos de brasileiros.

    Minha pergunta inicial era se havia como o código daquela consulta interagir com o campo de algum formulário, tornando ele dinâmico.

    Exemplo. Se tenho um campo no formulário chamado txt_nacionalidade e seleciono a opção "espanhola", o código abaixo deveria ler isso normalmente:
    'SELECT nome FROM contatos WHERE nacionalidade = ' & Me.txt_nacionalidade (deveria entender como "espanhola")

    Assim, ao clicar em algum botão, o evento iria abrir a consulta baseando-se na nacionalidade do indivíduo escolhida previamente no formulário.

    Mas o Access não facilitou para nós... Não dá para deixar dinâmico o código da consulta pass-through.

    Todavia nosso amigo Cláudio Más deu uma saída de mestre: fez o com que a ação do botão, por meio do VBA, alterasse o código contido em pst_contatos_por_nacionalidade baseando-se no valor que está no formulário, antes de dar sequência aos eventos do botão em si

    Ou seja, se está salvo agora como: SELECT nome FROM contatos WHERE nacionalidade = 'brasileira';
    Ele irá alterar para: SELECT nome FROM contatos WHERE nacionalidade = 'espanhola';
    Salvará e dará sequência nas ações seguintes do botão.

    Note que, agora, se você abrir a consulta pst_contatos_por_nacionalidade, irá ver os contatos de espanhóis


    Aqui coloquei o "conceito" que entendo pela tabela pass-through e que me ajuda bastante
    avatar
    onfire
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 4
    Registrado : 18/09/2016

    [Resolvido]Consulta Pass-Through com parâmetros do Access Empty pass trough com parametros

    Mensagem  onfire em 12/2/2020, 23:41

    Obrigado pelo enquadramento.

      Data/hora atual: 19/9/2020, 10:58