MaximoAccess

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

Obrigado

Administração do MaximoAccess

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 : 1276
    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 : 1276
    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 : 1276
    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.

    Conteúdo patrocinado

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

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 24/2/2020, 11:52