MaximoAccess

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

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração


Participe do fórum, é rápido e fácil

MaximoAccess

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

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração

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

    Stored procedure do SQL Server no Access

    avatar
    ifahidalgo
    Avançado
    Avançado

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 381
    Registrado : 13/10/2011

    Stored procedure do SQL Server no Access Empty Stored procedure do SQL Server no Access

    Mensagem  ifahidalgo 28/5/2020, 22:43

    Senhores

    Boa Noite

    Precisando de ajuda.

    Tenho 3 Stored procedure criadas no sql server;

    - dbo.GetCompany = retorna as empresas cadastradas e o código que eu deverei informar nas demais procedures
    - dbo.GetUserSetup = retorna os usuários e e-mail cadastrado dentro da Empresa informada na procedure anterior
    - dbo.GetAdditionalApprovers = retorna os aprovadores do respectivo centro de custo (1º parâmentro código da Empresa, 2º Parâmetro código do Centro de Custo) ordenado pela a sequência dos Aprovadores [Approval Sequence No_]

    Precisaria entender como é o funcionamento de uma stored, e como utilizar o retorno desses dados para compor uma tabela dentro do access.

    o esperado é;
    uma tabela com o retorno de uma tabela com as empresas
    uma tabela com o retorno dos usuários cadastrado na empresa anterior
    uma tabela com o retorno dos aprovadores dos centros de custos da empresa retornada na primeira procedure.
    DamascenoJr.
    DamascenoJr.
    Moderador
    Moderador

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 2817
    Registrado : 22/11/2016

    Stored procedure do SQL Server no Access Empty Re: Stored procedure do SQL Server no Access

    Mensagem  DamascenoJr. 29/5/2020, 00:19


    Precisaria entender como é o funcionamento de uma stored...

    Ao trabalhar com banco de dados nos deparamos com os termos front-end e back-end. O front-end é onde inserimos, alteramos e excluímos informações. O back-end é onde as informações que sofrem as ações do front-end ficam.

    Nesse ambiente, uma stored procedure é um procedimento armazenado do lado do back-end para ser chamado pelo front-end.

    Como assim procedimento armazenado?

    Imagine o front-end se conectando ao back-end para inserir um produto vendido em uma tabela de itens vendidos. Depois ter que enviar também do front-end um comando para a baixa no estoque do item vendido. E se for feito um controle dos itens mais vendidos do mês, ter também que enviar um comando para contabilizar nela a venda do tal produto. Imaginou isso? São três comandos enviados pela rede. Dependendo do desenvolvimento e do controle das informações, poderiam ser muito mais. Ou seja, seriam muitos comandos trafegando na rede. Em uma base de dados robusta onde muitos usuários podem estar conectando, essa sobrecarga de comandos na conexão deve ser evitada.

    E é aí que entram stored procedures.

    Você pode programar nela diversos comandos e chamar a execução dela uma única vez e tudo acontece lá do lado do back-end, sem necessidade de constantes comandos sendo enviados do front-end para o back-end.

    --------------------------------------------

    Sobre chamar uma stored procedure através do access, veja os tópicos abaixo encontrados com a ferramenta de busca do site
    https://www.maximoaccess.com/t14600-resolvidoenvio-de-relatorio-diario-automatico-store-procedure
    https://www.maximoaccess.com/t36169-resolvidoaccess-vba-como-chamar-stored-procedure-do-mysql
    https://www.maximoaccess.com/t19677-modo-correto-de-executar-store-procedure-sql-server-com-vba
    https://www.maximoaccess.com/t14260-chamar-stored-procedure-do-sql-server-a-partir-do-ms-access
    https://www.maximoaccess.com/t33378-executar-uma-store-procedure-do-sql-atraves-do-vba
    https://www.maximoaccess.com/t20654-resolvidoconexao-com-procedure
    https://www.maximoaccess.com/t10264-access-sql-server



    .................................................................................
    Ajude-se a ser ajudado, anexe seu projeto.
    Sempre tente entender o código,
    não somente copie e cole.
    Positive as mensagens que achar útil clicando no '+' no canto superior direito delas.
    avatar
    ifahidalgo
    Avançado
    Avançado

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 381
    Registrado : 13/10/2011

    Stored procedure do SQL Server no Access Empty Re: Stored procedure do SQL Server no Access

    Mensagem  ifahidalgo 3/6/2020, 23:31

    Obrigado Damasceno.

    olhei os links do resultado das pesquisas, mas ainda fiquei cheio de duvidas.

    temporariamente o DBA, me disponibilizou 2 viwer, do banco onde faço o vinculo com o access via odbc, pelo assistente. tenho lá as tabelas no meu access, sem mistério

    agora quando se fala em SP, não significar está lá na lista da conexão odbc como a viwer. essa minha duvida

    o access precisa se conectar ao sql server e ter acesso a essa SP, ou eu via código envio os parâmetros para a SP e ela me retorna uma tabela que eu vinculo ao access?

    por exemplo, chamo a SP dbo.GetCompany, via codigo e retorna a tebela dessa SP?

    estou muito confuso.
    DamascenoJr.
    DamascenoJr.
    Moderador
    Moderador

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 2817
    Registrado : 22/11/2016

    Stored procedure do SQL Server no Access Empty Re: Stored procedure do SQL Server no Access

    Mensagem  DamascenoJr. 4/6/2020, 02:49

    o access precisa se conectar ao sql server e ter acesso a essa SP...
    O acesso a stored procedure é via código, como mostrado nos links.

    ...ou eu via código envio os parâmetros para a SP e ela me retorna uma tabela que eu vinculo ao access?
    Sim, via código é que você acessa e chama pelas stored procedures. Elas podem ser usadas para retornar um conjunto de registros (recordsets). Mas também podem só executar ações sem retornar nada.
    Não, stored procedures não retornam tabelas para serem vinculadas.

    por exemplo, chamo a SP dbo.GetCompany, via codigo e retorna a tabela dessa SP?
    Stored procedures podem retornar um conjunto de registros (recordsets), ou seja, os registros da tabela, mas não o objeto tabela. Se você já usa tabelas vinculadas então não precisa usar stored procedures para retornar conjunto de registros.

    --------------------------------------------------------------------------

    Vou tentar mais uma vez explicar o funcionamento de uma stored procedure

    Parte 1 - Contexto
    Imagine que nesse período de pandemia você é o gerente de um supermercado e pertence ao grupo de risco. Nesse caso, você está em casa resolvendo tudo via mensagem.

    Parte 1 - Explicação
    Em banco de dados, não estar no supermercado equipara-se a não usar tabelas vinculadas.

    Parte 2 - Contexto
    No supermercado que você gerencia existem dois funcionários especialistas em executar determinadas tarefas. Eles são acionados via mensagem celular.

    O primeiro funcionário se chama Sérgio Portela, ele é mais conhecido por SP1.
    O segundo funcionário se chama Simão Pacheco, ele é mais conhecido por SP2.

    Parte 2 - Explicação
    Em banco de dados, os funcionários seriam stored procedures.

    Parte 3 - Contexto
    O SP1 é fiscal de prateleira. Ele foi contratado para receber mensagem com o nome de um produto e avaliar se esse produto ainda tem na prateleira. Após verificar o status do tal produto ele responde a mensagem relatando a situação.
    O SP2 é repositor. Ele foi contratado para receber mensagem com o nome de um produto e repor esse produto na prateleira.

    Parte 3 - Explicação
    Em banco de dados, o SP1 é do tipo que retorna registros. Já o SP2 é do tipo que apenas executa.

    Com tudo isso estruturado, basta enviar uma mensagem com "álcool em gel" para o SP1, ele retorna "não há nas prateleiras". Você então envia uma mensagem com "álcool em gel" para o SP2 e ele repõe o produto.

    --------------------------------------------------------------

    Como eu já disse lá atrás escreveu:Se você já usa tabelas vinculadas então não precisa usar stored procedures para retornar conjunto de registros.
    Imagine agora que você não é do grupo de risco. Ou seja, nesse caso você já estaria no supermercado. Em banco de dados, nesse contexto você usa tabelas vinculadas.

    Já estando no supermercado você não precisaria do SP1. Você mesmo pode fazer a verificação da situação de determinado produto na prateleira e acionar o SP2.

    Em banco de dados, já que você usa tabelas, você pode criar uma consulta.

    ---------------------------------------------------------------

    As possibilidades são infinitas. Por exemplo, no contexto do supermercado, você poderia ter um funcionário que consultasse a prateleira e dependendo da situação do produto então ele mesmo reporia o estoque.

    Bom, se não tiver entendido minha explicação prática, segue o link com explicações técnicas
    devmedia.com.br/introducao-aos-stored-procedures-no-sql-server/7904
    devmedia.com.br/forum/o-que-sao-e-para-que-realmente-servem-as-stored-procedures/274013
    pt.wikipedia.org/wiki/Procedimento_armazenado
    docs.microsoft.com/pt-br/sql/relational-databases/stored-procedures/stored-procedures-database-engine?view=sql-server-ver15


    .................................................................................
    Ajude-se a ser ajudado, anexe seu projeto.
    Sempre tente entender o código,
    não somente copie e cole.
    Positive as mensagens que achar útil clicando no '+' no canto superior direito delas.
    DamascenoJr.
    DamascenoJr.
    Moderador
    Moderador

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 2817
    Registrado : 22/11/2016

    Stored procedure do SQL Server no Access Empty Re: Stored procedure do SQL Server no Access

    Mensagem  DamascenoJr. 24/9/2020, 01:07

    ifahidalgo, avançou? Entendeu? Aguardamos...


    .................................................................................
    Ajude-se a ser ajudado, anexe seu projeto.
    Sempre tente entender o código,
    não somente copie e cole.
    Positive as mensagens que achar útil clicando no '+' no canto superior direito delas.
    avatar
    ifahidalgo
    Avançado
    Avançado

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 381
    Registrado : 13/10/2011

    Stored procedure do SQL Server no Access Empty Re: Stored procedure do SQL Server no Access

    Mensagem  ifahidalgo 24/9/2020, 18:42

    Damasceno.

    Ainda estudando sobre esse assunto, mas quebrando a cabeça, a baixo tenho a SP;

    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO

    CREATE PROCEDURE dbo.GetCompany

    As
    Select [CDSOCIEDAD] as 'Codigo Empresa', [Name] as 'Nome' from dbo.[Company]

    GO

    no access estou tulizando o codigo;

    Option Compare Database
    Private Const ConnectString = "Provider=SQL Server Native Client 11.0;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=[nomedobanco];UID=[integra-nav];Password=[xxxx];Data Source=[xxx.xxx.x.x]"

    Sub ExecuteStoredProc()
    Dim cmd As ADODB.Command
    Set cmd = New ADODB.Command

    Dim rst As ADODB.Recordset
    With cmd
    .ActiveConnection = ConnectString
    .CommandText = "exec dbo.GetCompany"
    .CommandType = adCmdStoredProc
    Set rst = .Execute
    End With

    Do Until rst.EOF
    Debug.Print rst("[Codigo Empresa]") & ", " & rst("nome")
    rst.MoveNext
    Loop
    Set rst = Nothing
    Set cmd = Nothing
    End Sub

    e na linha em vermelho apresenta erro de conecção;
    named pipe provider: Could not open a connection to SQL SERVER [53]

    avatar
    ifahidalgo
    Avançado
    Avançado

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 381
    Registrado : 13/10/2011

    Stored procedure do SQL Server no Access Empty Re: Stored procedure do SQL Server no Access

    Mensagem  ifahidalgo 24/9/2020, 18:44

    tentei tambem uma consulta passagem configurando o odbc, mas não consegue se comunicar. mas estranho que tenho uma tabela vinculada no mesmo servidor.
    marcelo3092
    marcelo3092
    Avançado
    Avançado

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 249
    Registrado : 19/08/2010

    Stored procedure do SQL Server no Access Empty Re: Stored procedure do SQL Server no Access

    Mensagem  marcelo3092 24/9/2020, 23:14

    Boa noite amigo entao eu uso o mysql porem creio que so deve mudar a instrução de conexão abaixo segue os códigos que uso para acessar e usar as store procedures. como exemplo usando uma procedure de consulta fazendo a inclusao dos dados na tabela.

    aqui estão em um modulo_conexão
    1- Aqui esta os dados para conexão

    Public Function MySQL_Server()

    MyslqServidor = DLookup("[Servidor]", "_parametros") 'Servidor Web
    MyslqUsuario = DLookup("[Usuario]", "_parametros") 'Usuário do banco de dados
    MyslqSenha = DLookup("[Senha]", "_parametros") 'Senha do banco de dados
    MyslqDatabase = DLookup("[Banco_Dados]", "_parametros") 'Database
    MyslqDriver = DLookup("[Driver]", "_parametros")

    End Function


    2- aqui abre a conexão


    Public Function Conecta()

    On Error GoTo trata_erro
    Dim blnConn As Boolean
    Dim myDriver As String


    'se a conexão estiver aberta e o nome do DB for igual ao nome do DB do parâmetro
    'Então está conectado
    If cn.State = 1 And cn.DefaultDatabase = MyslqDatabase Then
    Conecta = True
    Exit Function
    End If

    'Se a conexão estiver fechada então vá para seção de abertura
    If cn.State = 0 Then
    blnConn = True
    GoTo CONECTA_DB
    End If

    If cn.State = 0 And (IsNull(cn.DefaultDatabase) Or Trim(cn.DefaultDatabase) = Empty) Then
    blnConn = True
    ElseIf cn.State = 1 And (IsNull(cn.DefaultDatabase) Or Trim(cn.DefaultDatabase) = Empty) Then
    Call Desconecta
    blnConn = True
    Else
    blnConn = False
    End If

    CONECTA_DB:

    Call MySQL_Server 'Carrega parametros do servidor

    myDriver = "driver={" & MyslqDriver & "}"

    If blnConn = True Then
    With cn
    .CursorLocation = adUseClient
    .ConnectionTimeout = 0
    .CommandTimeout = 0
    .ConnectionString = "" & myDriver & ";" & _
    "SERVER=" & MyslqServidor & ";" & _
    "DATABASE=" & MyslqDatabase & ";" & _
    "USER=" & MyslqUsuario & ";" & _
    "PASSWORD=" & MyslqSenha & ";" & _
    "OPTION=3;"
    .Open
    End With
    End If

    Exit Function

    trata_erro:

    blnConn = True

    GoTo CONECTA_DB

    MsgBox "Erro gerado: " & Err.Number & " - " & Err.Description & "" & _
    vbCrLf & " O sistema será encerrado.", vbCritical + vbOKOnly + vbApplicationModal, "Erro de Conexão"
    Set cn = Nothing

    Exit Function

    End Function


    3- aqui e a função no formulario que estão em um botão detalhe que
    no cabeçalho do formulário:
    Option Explicit
    Option Compare Database

    Dim cSQL As String
    Dim strWhere As String
    Dim strColunas As String
    Dim rsdao As DAO.Recordset
    Dim DB As DAO.Database
    'Dim x As Integer
    'Dim strNomeCol As String
    'Dim strTamCol As String
    'Dim wsql As String
    Dim rsvarios As New ADODB.Recordset
    Dim rsvoucher As New ADODB.Recordset
    Dim rsadiantamento As New ADODB.Recordset
    Dim blnAchou As Boolean
    Dim blnAchou2 As Boolean
    Dim SSQLEN

    Dim taxacom As Double
    Dim sSQL As String
    Dim rst As DAO.Recordset
    Dim nReg As Long
    Dim nReg1 As Long
    Dim objRSC



    Private Sub MontaLista()

    Dim sqlDAO As String
    'On Error GoTo trata_erro

    CurrentDb.Execute "delete * from Grid_Conta;"

    Rem abrindo tabela temporária somente para adição de dados
    Set objRSC = CurrentDb.OpenRecordset("Grid_Conta", , Cool

    Me.Grid_Conta_Acerto.Requery



    strWhere = " WHERE "
    strColunas = Empty


    If Not IsNull(CBXGUIA) Or Trim(CBXGUIA) <> Empty Then
    strWhere = strWhere & " idfornecedor = ''" & CBXGUIA & "''"
    strWhere = strWhere & " AND "
    End If

    strWhere = Mid(Trim(strWhere), 1, Len(Trim(strWhere)) - 3)

    Call Conecta aqui abre a conexão

    cSQL = "CALL sp_conta_relatorio (' " & strWhere & "') " aqui e onde chama a procedure e passa os parametros da consulta.
    rsvarios.Open cSQL, cn, adOpenKeyset, adLockReadOnly

    'Informa a variavel booleana conforme a contagem de registros
    blnAchou = IIf((rsvarios.RecordCount) > 0, True, False)



    While (Not rsvarios.EOF)

    objRSC.AddNew
    objRSC.Fields("idconta").Value = rsvarios.Fields("idconta").Value
    objRSC.Fields("status").Value = rsvarios.Fields("status").Value
    objRSC.Fields("datalancamento").Value = rsvarios.Fields("datalancamento").Value
    objRSC.Fields("idfornecedor").Value = rsvarios.Fields("idfornecedor").Value
    objRSC.Fields("fornecedor").Value = rsvarios.Fields("fornecedor").Value
    objRSC.Fields("datavencimento").Value = rsvarios.Fields("datavencimento").Value
    objRSC.Fields("valorconta").Value = rsvarios.Fields("valorconta").Value
    objRSC.Fields("obs").Value = rsvarios.Fields("obs").Value
    objRSC.Fields("datapago").Value = rsvarios.Fields("datapago").Value
    objRSC.Fields("valorpago").Value = rsvarios.Fields("valorpago").Value

    objRSC.Update
    rsvarios.MoveNext 'vai para o proximo registro

    Wend

    Call FN_FechaRst(rsvarios)


    Me.Grid_Conta_Acerto.Requery
    'End If


    Exit Sub

    'trata_erro:

    'Call FN_FechaRst(rsdados)

    'Exit Sub


    End Sub

    espero ter ajudado e como falei acho que so muda a instrução do sql serve essa aqui
    .ConnectionString = "" & myDriver & ";" & _
    "SERVER=" & MyslqServidor & ";" & _
    "DATABASE=" & MyslqDatabase & ";" & _
    "USER=" & MyslqUsuario & ";" & _
    "PASSWORD=" & MyslqSenha & ";" & _
    "OPTION=3;"
    .Open
    detalhe que eu uso uma tabela para guardar os dados de conexão
    avatar
    ifahidalgo
    Avançado
    Avançado

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 381
    Registrado : 13/10/2011

    Stored procedure do SQL Server no Access Empty Re: Stored procedure do SQL Server no Access

    Mensagem  ifahidalgo 25/9/2020, 13:18

    Essa sp, é somente para retornar os códigos e nomes de empresas, e precisaria em uma consulta. depois terei mais duas SP, que terá o parâmetro de retorno o código dessa empresa.
    avatar
    ifahidalgo
    Avançado
    Avançado

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 381
    Registrado : 13/10/2011

    Stored procedure do SQL Server no Access Empty Re: Stored procedure do SQL Server no Access

    Mensagem  ifahidalgo 29/9/2020, 13:38

    Senhores

    fiz a utilização de uma consulta passagem, e executei o select da SP

    Select [CDSOCIEDAD] as 'Codigo Empresa', [Name] as 'Nome' from dbo.[Company]

    bingo.


    agora executando essa, vou testar as outras duas que precisa do codigo da empresa passada por essa em questão.

      Data/hora atual: 17/6/2021, 19:16