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

    parâmetro que informe o fim do registro

    avatar
    Wagner Nunes
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3
    Registrado : 27/10/2021

    parâmetro que informe o fim do registro Empty parâmetro que informe o fim do registro

    Mensagem  Wagner Nunes Seg 01 Nov 2021, 11:39 pm

    Senhores,

    Este é meu primeiro post, um prazer me juntar com tantos especialistas.
    Estou necessitando encontrar uma forma de ter um feedback do Access referente ao termino de um registro.
    Eu tenho uma rotina que troca dados de uma tabela para outra, e esta rotina busca por um numero em uma coluna que se repete em 80 registros sequenciais.
    Assim como utilizamos o parametro EOF para indicar que chegamos ao final da tabela, haveria algum parâmetro que eu moritorasse o seu status indicando que o registro foi concluido, para que eu seguisse para o próximo registro?

    Segue o código aplicado, aonde eu retiro de um vetor o valor e direciono para gravar em uma tabela do access.

    While Not rs.EOF
    If rs.Fields("NI").Value = NumeroNI Then
    iValuePA = GetVariableValue("arPaPadraoTemp[" & iCounter & "]")
    iValuePR = GetVariableValue("arPrPadraoTemp[" & iCounter & "]")
    rs!PAValorPadrao = iValuePA
    rs!PRValorPadrao = iValuePR

    'rs!Indexador = iCounter
    iCounter = iCounter + 1
    rs.Update
    End If
    rs.MoveNext
    Wend

    O problema é que há eventos de duplicidade na gravação, são poucos eventos, de oitenta registros duplicou 3.
    Existe algum parâmetro de controle que eu possa monitorar o fim da ação de gravar o registro?
    DamascenoJr.
    DamascenoJr.
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

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

    parâmetro que informe o fim do registro Empty Re: parâmetro que informe o fim do registro

    Mensagem  DamascenoJr. Ter 02 Nov 2021, 4:20 am



    While Not rs.EOF
    If rs.Fields("NI").Value = NumeroNI Then
    iValuePA = GetVariableValue("arPaPadraoTemp[" & iCounter & "]")
    iValuePR = GetVariableValue("arPrPadraoTemp[" & iCounter & "]")
    rs!PAValorPadrao = iValuePA
    rs!PRValorPadrao = iValuePR

    'rs!Indexador = iCounter
    iCounter = iCounter + 1
    rs.Update
    'bem aqui significa que o registro foi salvo, aqui está seu feedback
    End If
    rs.MoveNext
    Wend


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

    Wagner Nunes gosta desta mensagem

    avatar
    Wagner Nunes
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3
    Registrado : 27/10/2021

    parâmetro que informe o fim do registro Empty parâmetro que informe o fim do registro

    Mensagem  Wagner Nunes Ter 02 Nov 2021, 9:37 am

    Damasceno, muito obrigado pelo retorno.

    Se voce me permite, ainda faço outro questionamento.

    O rs.Update não é um comando? Ou seja, ele que manda validar a informação no banco de dados, portanto ele não me produz um feedback.

    Na minha imaginação, eu penso que o certo seria eu ter alguma forma de validar os valores lançados antes de mandar o comando Update, e essa é a minha questão.

    Na imagem abaixo eu tenho um extrato do que acontece na real que quero eliminar, essa duplicidade do valor, quando deveria ser 15, 16, 17, e assim por diante.

    parâmetro que informe o fim do registro Extrat11


    Eu até cheguei a pensar, em colocar um delay em algum momento para dar tempo de ocorrer as mudanças de valor na variável que recebe o valor a ser gravado. Em especial este valor repetido pertence a Coluna Indexador tratada no código, que ao final vai conter a contagem de 1 até 80.
    DamascenoJr.
    DamascenoJr.
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

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

    parâmetro que informe o fim do registro Empty Re: parâmetro que informe o fim do registro

    Mensagem  DamascenoJr. Ter 02 Nov 2021, 6:19 pm

    É sim um feedback, apenas não é o feedback que servirá pro seu caso.

    O código mostrado é o código completo?
    Já experimentou usar pontos de interrupção e saber exatamente o ponto que o código está trabalhando como não deveria? Se você acha que um delay resolveria, então usar pontos de interrupção certamente vai escancarar o problema.

    Seu código tem uma condicional, e pelo código que mostrou apenas dentro dessa condicional o iCounter é iterado. Pela ordem das linhas, o campo Indexador recebe o valor de iCounter antes de nele ser adicionado uma unidade, se o problema acontece só quando rs.Fields("NI").Value = NumeroNI (os 3 casos) então aí está o problema.

    Nada resolvendo, anexe um exemplo que certamente acharemos a solução.


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

    Wagner Nunes gosta desta mensagem

    avatar
    Wagner Nunes
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3
    Registrado : 27/10/2021

    parâmetro que informe o fim do registro Empty parâmetro que informe o fim do registro

    Mensagem  Wagner Nunes Ter 16 Nov 2021, 11:16 am

    Muito obrigado Damasceno,

    Pensei muito a respeito deste problema, e só vi uma solução para o meu caso, seria confirmar o registro após realizado, varrendo assim o resultado, de maneira a garantir que ele atendeu ao esperado.

    Ainda não implantei as correções por estar com outra demanda, mas atendendo ao solicitado, segue o código completo para quem sabe auxiliar a outros também.

    Este script é integrado a um software Scada utilizado em Automação, e para este caso fiz uma rotina para transportar informações de uma tabela para uma ARRAY, e em outro momento o script abaixo pega as informações da ARRAY e guarda em uma tabela, além de montar uma coluna como indexador, para ao final gerar um relatorio com graficos e análise de dados pertinente ao equipamento.

    Sub Main()
    Dim Conn1 As ADODB.Connection
    Set Conn1 = New ADODB.Connection
    Dim rs As ADODB.Recordset
    Set rs = New ADODB.Recordset
    Dim sQuery As String
    Dim NumeroNI As Variant
    Dim iValuePA As Integer
    Dim iValuePR As Integer
    Dim iCounter As Integer

    ConectarBanco Conn1
    sQuery = "SELECT tblReport.* FROM tblReport;"
    rs.Open sQuery, Conn1,adOpenKeyset, adLockOptimistic, ADODB.adCmdText

    SetVariableValue("xScriptRecPaReport", 1)

    NumeroNI = ValorNI
    NumeroNI = GetVariableValue("ValorNI")

    'Ação prevista para inserir
    iCounter = 0
    iValuePA = [arPaPadraoTemp.e0]
    iValuePR = [arPrPadraoTemp.e0]
    While Not rs.EOF
    If rs.Fields("NI").Value = NumeroNI Then
    iValuePA = GetVariableValue("arPaPadraoTemp[" & iCounter & "]")
    iValuePR = GetVariableValue("arPrPadraoTemp[" & iCounter & "]")
    rs!PAValorPadrao = iValuePA
    rs!PRValorPadrao = iValuePR
    'rs!Indexador = iCounter
    iCounter = iCounter + 1
    rs.Update
    End If
    rs.MoveNext
    Wend
    SetVariableValue("xScriptRecPaReport", 0)
    rs.Close
    Set rs = Nothing
    Conn1.Close
    Set Conn1 = Nothing
    End Sub

    Function ConectarBanco(Conn1 As ADODB.Connection)

    Dim Provider As String
    Dim dataSource As String
    Dim caminho As String
    Dim sAccessConnect As String

    Provider = "Provider=Microsoft.Jet.OLEDB.4.0;"
    'Comando para levantar o caminho até o arquivo mdb.
    caminho = GetDataLoggerRecipePath
    caminho = caminho & "banca_teste_cilindro_rev0_DLR.mdb"
    dataSource = "Data Source=" & caminho

    sAccessConnect = Provider & dataSource
    Conn1.ConnectionString = sAccessConnect
    Conn1.Open

    End Function


    Quando eu implantar a mudança e testar eu retorno para compartilhar.

    Muito obrigado.

      Data/hora atual: Sab 01 Out 2022, 7:39 pm