MaximoAccess

Caro Usuário, não tire as suas duvidas nas Salas de Repositório, abra sempre um novo tópico relacionado, nas salas destinadas para o efeito, como Sala de Tabelas, Consultas, Formulários, Relatórios, Macros, Módulos e VBA.

Obrigado

Administração do MaximoAccess

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

    [Resolvido]Somar campo no Recordset

    Compartilhe

    wesleymeim
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 47
    Registrado : 20/08/2014

    [Resolvido]Somar campo no Recordset

    Mensagem  wesleymeim em Seg 27 Out 2014, 17:03

    Boa tarde!

    Tenho uma consulta em SQL através de VBA que me mostra o resultado de um recodset em 8 campos, um deles é um campo de valores.

    Como faço para somar esse campo em uma caixa de texto no Access através de VBA.

    Alguém poderia me ajudar?


    Obrigado.

    Marcelo David
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 2287
    Registrado : 21/04/2011

    Re: [Resolvido]Somar campo no Recordset

    Mensagem  Marcelo David em Seg 27 Out 2014, 18:00

    Olá! Somar ao quê?


    .................................................................................
    Marcelo David
    [Você precisa estar registrado e conectado para ver este link.] (em construção)

    wesleymeim
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 47
    Registrado : 20/08/2014

    Campo

    Mensagem  wesleymeim em Seg 27 Out 2014, 18:24

    Tenho uma consulta em VBA que retorna para um formulário dados de uma consulta de uma fonte de dados que está em SQL Server 2008.

    Um desses campos retorna valores de nota fiscal.

    O que eu preciso:

    Criei uma caixa de texto no formulário e a ideia é que ela mostre o total desse campo que retorna as informações de valores de notas fiscais.


    No aguardo....


    Valeu....

    Marcelo David
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 2287
    Registrado : 21/04/2011

    Re: [Resolvido]Somar campo no Recordset

    Mensagem  Marcelo David em Seg 27 Out 2014, 19:25

    Poderia usar na fonte de controle do campo:
    =Soma([NomeDoControle])

    Ou usar um DSUM, dependendo que queira somar.


    .................................................................................
    Marcelo David
    [Você precisa estar registrado e conectado para ver este link.] (em construção)

    wesleymeim
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 47
    Registrado : 20/08/2014

    Somar Recordset

    Mensagem  wesleymeim em Ter 28 Out 2014, 12:04

    Bom dia!

    Fiz isso, mais o mesmo acusa erro, será que é porque estou buscando os dados do SQL?

    Segue o Código que eu estou usando abaixo.


    Obrigado.

    Código:
    Private Sub bt_visualizar_dados_teste_Click()

    Dim cn As ADODB.Command 'Declarando variável de conexão
    Dim rss As New ADODB.Recordset
    Dim rs_rrdetail As ADODB.Recordset
    Dim sql As String
    Dim cns As New ADODB.Connection
    Set cn = New ADODB.Command 'Variável de conexão recebendo a conexão


    On Error GoTo Tratamento

    DoCmd.OpenForm "frm_carregando_registros"
    Form_frm_carregando_registros.Repaint

        'No bloco abaixo temos o procedimento de conexão e execução da SP
        With cn
            .ActiveConnection = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=True;Data Source=11.111.111.19;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=DEBRBRG310F27X;Use Encryption for Data=False;Tag with column collation when possible=False;Initial Catalog=Base"
            .CommandType = adCmdText
            .CommandText = "" & "datas_view " & "'" & Right(Form_frm_View_notas_fiscais.txt_dtini, 4) & "-" & Mid(Form_frm_View_notas_fiscais.txt_dtini, 4, 2) & "-" & Left(Form_frm_View_notas_fiscais.txt_dtini, 2) & "'" & " , " & "'" & Right(Form_frm_View_notas_fiscais.txt_dtfim, 4) & "-" & Mid(Form_frm_View_notas_fiscais.txt_dtfim, 4, 2) & "-" & Left(Form_frm_View_notas_fiscais.txt_dtfim, 2) & "'" & ""
            .Execute
        End With
     
    cn.ActiveConnection.Close 'Fecha a conexão com o Banco de Dados
     
    Set cn = Nothing

    cns.Provider = "SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=True;Data Source=11.111.111.19;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=DEBRBRG310F27X;Use Encryption for Data=False;Tag with column collation when possible=False;Initial Catalog=Base"
    cns.Open

    Set rss = New ADODB.Recordset
    Set rss.ActiveConnection = cns

    sqls = "select dtemi_nf, numdoc_nf, id_produto, num_pedido, cfop_nf, num_nf, cpagto_nf, id_cliente, id_estab,prliq_nf from teste_datas_nf order by dtemi_nf desc"

    rss.CursorLocation = adUseClient
    rss.Open sqls, cns, adOpenForwardOnly 'adLockPessimistic (Permitir alteração)

    txt_tot_registros = rss.RecordCount


    Set rs_rrdetail = rss
    Set rss = Nothing
    Set cns = Nothing
    Set Me.Recordset = rs_rrdetail



    With rs_rrdetail
        If .BOF And .EOF Then
            MsgBox "Não temos registros para exibição", vbInformation
        Else
            Form_frm_View_notas_fiscais.txt_dtemi_nf.ControlSource = .Fields("dtemi_nf").Name
            Form_frm_View_notas_fiscais.txt_numdocnf.ControlSource = .Fields("numdoc_nf").Name
            Form_frm_View_notas_fiscais.txt_Id_Produto.ControlSource = .Fields("id_produto").Name
            Form_frm_View_notas_fiscais.txt_num_pedido.ControlSource = .Fields("num_pedido").Name
            Form_frm_View_notas_fiscais.txt_cfop_nf.ControlSource = .Fields("cfop_nf").Name
            Form_frm_View_notas_fiscais.txt_num_nf.ControlSource = .Fields("num_nf").Name
            Form_frm_View_notas_fiscais.txt_cpagto_nf.ControlSource = .Fields("cpagto_nf").Name
            Form_frm_View_notas_fiscais.txt_cod_cliente.ControlSource = .Fields("id_cliente").Name
            Form_frm_View_notas_fiscais.txt_id_estab.ControlSource = .Fields("id_estab").Name
            Form_frm_View_notas_fiscais.txt_pr_liq_nf.ControlSource = .Fields("prliq_nf").Name
           

        End If
    End With


    Form_frm_View_notas_fiscais.txt_dtini.SetFocus

    DoCmd.Close acForm, "frm_carregando_registros", acSaveYes

    Exit Sub

    Tratamento:
     
    MsgBox Err.Number & " - " & Err.Description
     
    End Sub

    Marcelo David
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 2287
    Registrado : 21/04/2011

    Re: [Resolvido]Somar campo no Recordset

    Mensagem  Marcelo David em Ter 28 Out 2014, 13:09

    É um formulário normal ou continuo/folha de dados?

    Não entende o que quer somar ainda... Você quer somar o campo
    valores ao que? Somar a ele mesmo? Então é form continuo?


    .................................................................................
    Marcelo David
    [Você precisa estar registrado e conectado para ver este link.] (em construção)

    wesleymeim
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 47
    Registrado : 20/08/2014

    Somar campo no Recordset

    Mensagem  wesleymeim em Ter 28 Out 2014, 13:17

    Estou enviando em anexo o a tela do meu Form.

    Obrigado.
    Anexos
    TelaForm.docx
    Você não tem permissão para fazer download dos arquivos anexados.
    (48 Kb) Baixado 6 vez(es)

    Marcelo David
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 2287
    Registrado : 21/04/2011

    Re: [Resolvido]Somar campo no Recordset

    Mensagem  Marcelo David em Ter 28 Out 2014, 13:25

    Mas é um formulário com subformulário ou apenas um formulário contínuo?
    Como é o nome da caixa de texto que pretende somar?
    Como é o nome do campo da tabela que contem os valores que devem serem somados?
    Como é o nome da tabela que contem o campo que irá somar?
    Como é o nome do campo que usa como critério de data inicial e final na tabela?


    .................................................................................
    Marcelo David
    [Você precisa estar registrado e conectado para ver este link.] (em construção)

    wesleymeim
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 47
    Registrado : 20/08/2014

    Somar campo no Recordset

    Mensagem  wesleymeim em Ter 28 Out 2014, 13:37

    Mas é um formulário com subformulário ou apenas um formulário contínuo?
    Apenas Formulário contínuo, a parte de cima é o cabeçalho do formulário.

    Como é o nome da caixa de texto que pretende somar?
    txt_tot_faturado

    Como é o nome do campo da tabela que contem os valores que devem serem somados?
    A tabela está no SQL server, eu estou trazendo os dados através do Recordset mas o nome do campo é prliq_nf

    Como é o nome da tabela que contem o campo que irá somar?
    A tabela está no SQL server, o nome dela é teste_datas_nf (na verdade no SQL Server a mesma é uma View

    Como é o nome do campo que usa como critério de data inicial e final na tabela?
    Na View do SQL Server o se chama dtemi_nf e as caixas de texto no access um tem o nome de txt_dtini e o outro o nome de txt_dtfim

    Marcelo David
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 2287
    Registrado : 21/04/2011

    Re: [Resolvido]Somar campo no Recordset

    Mensagem  Marcelo David em Ter 28 Out 2014, 13:55

    Vamos ao primeiro teste:

    Na fonte do controle do campo txt_tot_faturado:

    =Soma([prliq_nf])


    Segundo teste:

    Na fonte do controle do campo txt_tot_faturado:

    =DSum("prliq_nf";"teste_datas_nf";"dtemi_nf Between [txt_dtini] And [txt_dtfim]")


    .................................................................................
    Marcelo David
    [Você precisa estar registrado e conectado para ver este link.] (em construção)

    wesleymeim
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 47
    Registrado : 20/08/2014

    Somar campo no Recordset

    Mensagem  wesleymeim em Ter 28 Out 2014, 14:06

    O primeiro teste eu já havia feito e não tinha funcionado.

    O segundo não funcionou.

    Avelino Sampaio
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3348
    Registrado : 04/04/2010

    Re: [Resolvido]Somar campo no Recordset

    Mensagem  Avelino Sampaio em Ter 28 Out 2014, 17:44

    Olá!

    Vc pode somar criando um loop pelo recordset. Algo assim:


    ...
    Dim dblSoma as Double
    ...
    ...
    Set rs_rrdetail = rss
    Set rss = Nothing
    Set cns = Nothing
    Set Me.Recordset = rs_rrdetail

    Do While Not rs_rrdetail.EOF
    dblSoma = dblSoma + rs_rrdetail!prliq_nf
    rs_rrdetail.MoveNext
    loop
    me!txt_tot_faturado = dblSoma
    ...


    Sucesso!


    .................................................................................
    ============ Quer aprender Access em alta velocidade ? ============

    || [Você precisa estar registrado e conectado para ver esta imagem.] Acesse o site UsandoAccess.com.br e veja um ótimo kit de ensino que tenho para você.

    ===========================================================

    wesleymeim
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 47
    Registrado : 20/08/2014

    Somar Compo no Recordset

    Mensagem  wesleymeim em Ter 28 Out 2014, 18:04

    Obrigado Mestre Avelino, funcionou.

    Porém percebi que o mesmo fazer uma varredura em toda a tabela e o processo ficou um pouco mais lento.

    Teria outra forma de fazer para obter o mesmo resultado.

    Exemplo: No excel eu tenho a linha de comando abaixo para agilizar o processo da macro.

    Teria algo assim dentro do Access VBA.

    Application.ScreenUpdating = False


    Agradeço muito a atenção.

    Obrigado

    Avelino Sampaio
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3348
    Registrado : 04/04/2010

    Re: [Resolvido]Somar campo no Recordset

    Mensagem  Avelino Sampaio em Ter 28 Out 2014, 18:33

    Olá!

    Vc pode testar a técnica de passar todos os registros para variável, utilizando o GetRows().  Não sei se ganhará muito pois leva um tempo também para passar todos os registros para variável.

    Dim varTabela as variant
    Dim k as long, j as long

    k= rs_rrdetail.RecordCount
    varTabela = rs_rrdetail.GetRows(k)

    Crie o loop com o FOR

    For j= 0 to (k-1)
      dblSoma = dblSoma + varTabela(9, j)
    next


    Uma outra opção seria usar o recordsetClone.  Não sei se funcionaria no teu caso.

    set rsClone = me.recordsetClone

    Poderia também abrir um recordset com apenas o campo que será somado e no modo somente leitura

    Sucesso!


    .................................................................................
    ============ Quer aprender Access em alta velocidade ? ============

    || [Você precisa estar registrado e conectado para ver esta imagem.] Acesse o site UsandoAccess.com.br e veja um ótimo kit de ensino que tenho para você.

    ===========================================================

    Avelino Sampaio
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3348
    Registrado : 04/04/2010

    Re: [Resolvido]Somar campo no Recordset

    Mensagem  Avelino Sampaio em Ter 28 Out 2014, 18:41

    E se poscionar abaixo como fica


    With rs_rrdetail
    If .BOF And .EOF Then
    MsgBox "Não temos registros para exibição", vbInformation
    Else
    Form_frm_View_notas_fiscais.txt_dtemi_nf.ControlSource = .Fields("dtemi_nf").Name
    Form_frm_View_notas_fiscais.txt_numdocnf.ControlSource = .Fields("numdoc_nf").Name
    Form_frm_View_notas_fiscais.txt_Id_Produto.ControlSource = .Fields("id_produto").Name
    Form_frm_View_notas_fiscais.txt_num_pedido.ControlSource = .Fields("num_pedido").Name
    Form_frm_View_notas_fiscais.txt_cfop_nf.ControlSource = .Fields("cfop_nf").Name
    Form_frm_View_notas_fiscais.txt_num_nf.ControlSource = .Fields("num_nf").Name
    Form_frm_View_notas_fiscais.txt_cpagto_nf.ControlSource = .Fields("cpagto_nf").Name
    Form_frm_View_notas_fiscais.txt_cod_cliente.ControlSource = .Fields("id_cliente").Name
    Form_frm_View_notas_fiscais.txt_id_estab.ControlSource = .Fields("id_estab").Name
    Form_frm_View_notas_fiscais.txt_pr_liq_nf.ControlSource = .Fields("prliq_nf").Name


    End If
    End With
    Do While Not rs_rrdetail.EOF
    dblSoma = dblSoma + rs_rrdetail!prliq_nf
    rs_rrdetail.MoveNext
    loop
    me!txt_tot_faturado = dblSoma


    No aguardo


    .................................................................................
    ============ Quer aprender Access em alta velocidade ? ============

    || [Você precisa estar registrado e conectado para ver esta imagem.] Acesse o site UsandoAccess.com.br e veja um ótimo kit de ensino que tenho para você.

    ===========================================================

    wesleymeim
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 47
    Registrado : 20/08/2014

    Somar Campo no Recordset

    Mensagem  wesleymeim em Ter 28 Out 2014, 18:57

    Posicionado embaixo ficou a mesma coisa.

      Data/hora atual: Qua 07 Dez 2016, 18:13