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


2 participantes

    Sql Server no access pegar o numero incremental

    avatar
    sergiosdl
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 143
    Registrado : 04/12/2009

    Sql Server no access pegar o numero incremental Empty Sql Server no access pegar o numero incremental

    Mensagem  sergiosdl 22/5/2023, 15:37

    Salve amigos, estou batendo cabeça, inclusive com o chatgpt e não consegui

    Estou migrando meu banco de dados do Access 2003 para o Sql Server 2014, continuarei usando o Front do Access
    O problema é que no access ao gravar um registro ele ja me devolve o conteúdo de um campo autonumeração antes da gravação do registro para que eu possa utiliza-lo, e no sql server ele só devolve este numero depois da gravação.

    Segue um exemplo que eu uso no access e funciona, onde na tabela colaborador que possui o campo codigo com autonumeração, utilizo o valor gerado no campo codigogeradoauto que é do tipo numero

    Dim tabel As Recordset
    Set tabel = CurrentDb.OpenRecordset("Colaborador")

    tabel.AddNew
    tabel("nome") = "joao da silva"
    tabel("codigogeradoauto ") = tabel("codigo")
    tabel.Update
    tabel.Close
    Set tabel = Nothing

    Abraços
    Alexandre Fim
    Alexandre Fim
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3492
    Registrado : 13/12/2016

    Sql Server no access pegar o numero incremental Empty Re: Sql Server no access pegar o numero incremental

    Mensagem  Alexandre Fim 23/5/2023, 14:35

    Olá Sergio,

    Neste caso, é necessário usar uma conexão ADO para pegar o campo com autonumeração (IDENTITY), e seria mais viável utilizar instrução SQL para gravar registros também.

    Copie e cole a função abaixo, e execute-a através de slgum botão Gravar/Salvar do seu formulário:

    Código:


    Function GravarDados()
    On Error GoTo trata_erro
    Dim sSQL        As String
    Dim cnn         As New ADODB.Connection
    Dim rs          As New ADODB.Recordset

        '-- Se conexão estiver fechada, abre
        If cnn.State = 0 Then
            With cnn
                .ConnectionString = "Provider=MSOLEDBSQL;Server=NOME_DO_SERVIDOR;Database=NOME_DO_BANCO_DE_DADOS;UID=USUARIO;PWD=SENHA;"
                .Open
            End With
        End If
        
        '-- Inclusão de dados na tabela colaborador
        sSQL = "INSERT INTO Colaborador (nome) VALUES ('JOAO DA SILVA')"
        cnn.Execute sSQL
        
        
        '-- Após inclusão, obter o valor do campo autonumérico (IDENTITY)
        sSQL = "SELECT @@IDENTITY FROM Colaborador"
        '-- Abre recordset, usando instrução SQL com a conexão aberta
        rs.Open sSQL, cnn, adOpenKeyset, adLockReadOnly
        
        '-- Carrega campo no formulário com o valor autonumérico
        [CAMPO_DO_FORMULARIO] = rs(0).Value
        
        '-- Fecha e destroi recordset
        rs.Close
        Set rs = Nothing
        
        '-- Fecha e destroi conexão
        cnn.Close
        Set cnn = Nothing
        
        Exit Function
        
    trata_erro:
        If rs.State = 1 Then rs.Close: Set rs = Nothing
        If cnn.State = 1 Then cnn.Close: Set cnn = Nothing
        
        MsgBox "Erro ocorrido: " & Err.Number & " - " & Err.Description & "", vbCritical, "Erro"
        Exit Function
        
    End Function



    No botão Gravar ou Salvar, coloque assim:
    Call GravarDados

    Não esqueça de informar os valores que estão em COLCHETES na instrução.

    OBS: é necessário marcar a referencia abaixo:
    Sql Server no access pegar o numero incremental Refere16

    OBS2: Você informou que a versão SQL Server é a 2014, e eu busquei o Provider referente à esta versão, e caso não funcione, pesquise no link abaixo:
    "https://www.connectionstrings.com/sql-server-2014/"

    Acredito que irá funcionar.

    Espero ter ajudado

    Boa sorte

    Att,

    Alexandre Fim


    .................................................................................
    Arrow  Marcar tópico como Resolvido: clique aqui
    Arrow  Postar anexos no fórum: clique aqui

    Sql Server no access pegar o numero incremental Setinf11
    Sistemas e Tecnologia Ltda
    avatar
    sergiosdl
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 143
    Registrado : 04/12/2009

    Sql Server no access pegar o numero incremental Empty Re: Sql Server no access pegar o numero incremental

    Mensagem  sergiosdl 23/5/2023, 19:57

    Obrigado pelo retorno Alexandre.
    no meu caso preciso armazenar no registro que foi inserido o valor que foi gerado pelo campo autonumeração em um outro campo mas no mesmo registro gerado:

    tabel.AddNew
    tabel("nome") = "joao da silva"
    tabel("codigogeradoauto ") = tabel("codigo") 'sql server nao consegue obter este numero durante a gravação
    tabel.Update
    tabel.Close
    Set tabel = Nothing

    no exemplo acima o registro gerado ficaria assim:

    codigo = 1
    nome = joao da silva
    codigogeradoauto = 1

    no access funciona assim, mas no sqlserver ele nao armazenar no mesmo registro gerado o valor autonumeracao
    Alexandre Fim
    Alexandre Fim
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3492
    Registrado : 13/12/2016

    Sql Server no access pegar o numero incremental Empty Re: Sql Server no access pegar o numero incremental

    Mensagem  Alexandre Fim 23/5/2023, 21:31

    Sérgio,

    Você testou a rotina que te mandei?
    Vc não vai obter o valor do campo IDENTITY do SQL com tabelas vinculadas. Vai conseguir através do ADO.

    Att,

    FIM


    .................................................................................
    Arrow  Marcar tópico como Resolvido: clique aqui
    Arrow  Postar anexos no fórum: clique aqui

    Sql Server no access pegar o numero incremental Setinf11
    Sistemas e Tecnologia Ltda
    avatar
    sergiosdl
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 143
    Registrado : 04/12/2009

    Sql Server no access pegar o numero incremental Empty Re: Sql Server no access pegar o numero incremental

    Mensagem  sergiosdl 23/5/2023, 21:45

    testei sim alexandre, porem ele me devolve a informação no seu exemplo no campo1 do formulário, mas eu precisaria que ele ficasse gravado junto com a inserção do colaborador joao, como sao varios registros adicionandos atraves de um loop eu nao consegurei jogar o valor para o formulário para depois editar o registro já lançado, pois seria muito pesado. aí eu teria que fazer 2 loops.
    primeiro loop´: gravo o registro
    segundo loop: vou editando os registros alterando fazendo com que o campo codigogeradoauto receba a informacao do campo codigo(que foi gerado pelo sistema automaticamente)

    Abraços

    Conteúdo patrocinado


    Sql Server no access pegar o numero incremental Empty Re: Sql Server no access pegar o numero incremental

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 22/11/2024, 11:38