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


    [Resolvido]Adicionar Registros com Insert Into...

    avatar
    rgondim
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 229
    Registrado : 24/02/2012

    [Resolvido]Adicionar Registros com Insert Into... Empty [Resolvido]Adicionar Registros com Insert Into...

    Mensagem  rgondim 4/7/2012, 10:49

    Recentemente utilizei uma função selecionar vários registros em um subformulário de acordo com as opções marcadas numa listbox múltipla escolha. (A função monta RecordSource e SQL do subformulário).
    Agora, preciso que os registros selecionados sejam copiados para registros, com algumas alterações. Cada registro possui um campo Data e Valor. Estes campos deverão ser atualizados: a nova data será digitada no formulário principal e o campo valor deve ser multiplicado por 1,8(p.ex.).
    A quantidade de registros selecionados deverá ser a quantidade de registros criados.

    A dificuldade que estou tendo é que os registros em questão vem de duas tabelas diferentes.
    Em cada uma existe o campo de ligação CodDataSal. Na primeira tabela, ele é Autonumeração e na campo numérico.
    Todas as minhas tentativas geraram erro. Agradeço muito, se puderem me ajudar.

    No link, deixo um exemplo do meu BD. O formulário em questão é frmTrab_AlteraSal e a consulta é qryTrab_AlteraSal.
    https://skydrive.live.com/redir?resid=65D5D5D149DBFDAF!256&authkey=!ACBW-MvVP7Oru_c


    Última edição por rgondim em 7/7/2012, 18:26, editado 1 vez(es)
    avatar
    Convidado
    Convidado


    [Resolvido]Adicionar Registros com Insert Into... Empty Re: [Resolvido]Adicionar Registros com Insert Into...

    Mensagem  Convidado 4/7/2012, 17:14

    Teu BD está em 2010?

    Caso sim, poste em versão anterior, 2003 ou 2007


    Cumprimentos.
    avatar
    rgondim
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 229
    Registrado : 24/02/2012

    [Resolvido]Adicionar Registros com Insert Into... Empty Re: [Resolvido]Adicionar Registros com Insert Into...

    Mensagem  rgondim 4/7/2012, 19:47

    Piloto, neste está o arquivo na versão 2003.
    O outro é versão 2007/2010.

    https://skydrive.live.com/redir?resid=65D5D5D149DBFDAF!258&authkey=!ANwdxbkv2VNhkBE

    Até breve.
    avatar
    Convidado
    Convidado


    [Resolvido]Adicionar Registros com Insert Into... Empty Re: [Resolvido]Adicionar Registros com Insert Into...

    Mensagem  Convidado 4/7/2012, 23:35

    Amigão estou a observar a logica do form citado por si.

    Ja entendi a logica da montagem do recordsource, agora:

    De detalhes do que deseja, alterar o que?
    lancar onde? e de que forma...

    >>>> Se for lancar em tabelas separadas, especifique a ID relacionada entre as tabelas.


    Cumprimentos.
    avatar
    rgondim
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 229
    Registrado : 24/02/2012

    [Resolvido]Adicionar Registros com Insert Into... Empty Re: [Resolvido]Adicionar Registros com Insert Into...

    Mensagem  rgondim 5/7/2012, 16:21

    Grande Harysohn,

    no BD tenho o formulário frmTrabalhador e, na aba Alteração Salarial, o subform. frmTrab_SalarioData. Nele, é registrada a data de um novo salário do trabalhador. Dentro deste subform, há o subform. frmTrab_SalarioLanc (modo folha de dados), onde são lançados as verbas correspondentes ao salário.

    Cada form. possui sua tabela correspondente.
    || tblTrabalhador > tblTrab_SalarioData > tblTrab_SalarioLanc

    Campos vinculados nos (sub)formulários:
    -- frmTrabalhador (CodTrabalhador::CodTrabalhador2) frmTrab_SalarioData
    -- frmTrab_SalarioData (CodTrabalhador::CodTrabalhador3||CodSalData::CodSalData) frmTrab_SalarioLanc

    Minha intenção é realizar em bloco uma nova alteração salarial, fazendo isso para vários ou todos os trabalhadores ao mesmo tempo.

    O que é preciso?
    * Para cada trabalhador selecionado, é necessário criar um novo registro em tblTrab_SalarioData. A nova data será digitada em um campo do formulário frmTrab_Alterasal.
    * As novas verbas deveram ser inseridas em tblTrab_SalarioLanc e devem receber o CodSalData (da tabela tblTrab_SalarioData) para serem associados corretamente. O campo ValorLST deve ser atualizado através de uma multiplicação com o campo Porcentagem no formulário frmTrab_Alterasal.

    (O campo CodSalData de tblTrab_SalarioData é a chave primária e é autonumeração. Facilitaria torna-lo numérico e inserir um novo código através da função DMax(“CodSalData”,”tblTrab_SalarioData”)+1?)

    Desde já, muito obrigado pela sua ajuda.
    Até breve.
    avatar
    Convidado
    Convidado


    [Resolvido]Adicionar Registros com Insert Into... Empty Re: [Resolvido]Adicionar Registros com Insert Into...

    Mensagem  Convidado 5/7/2012, 21:42

    Bem.. vamos tentar entender primeiro.. pois é mais facil para si que o fez visualizar isto...

    Observe este Print.

    Para cada Trabalhador voce tem >>>>> N's Registros em tblTrab_SalarioLanc

    Para Os registro na tblTrab_SalarioLanc voce tem registros de AlteracaoSalarial (Data)


    Pergunto:

    QUando fizer alteração voce substituirá os registros que estão na tblTrab_SalarioLanc ou adicionará novos?


    Explique com relacão ao print que segue:
    [Resolvido]Adicionar Registros com Insert Into... Rgodin


    Cumprimentos.
    avatar
    Convidado
    Convidado


    [Resolvido]Adicionar Registros com Insert Into... Empty Re: [Resolvido]Adicionar Registros com Insert Into...

    Mensagem  Convidado 5/7/2012, 22:03

    Veja se eu entendi...

    O salario do trabalhador é composto de X registros..

    Trabalhador Fulano:
    10 registros na tblTrab_SalarioLanc (Estes registro compõe o salário do funcionario)
    Estes 10 registros foram criados na data xx/xx/yyyy (Data essa que está na tblTrab_SalarioData)


    Se o salario do trabalhador alterar.. voce quer lancar novos registros na tblTrab_SalarioLanc e que a data
    de alteracao fique gravada na tblTrab_SalarioData devidamente relacionado ao registro na tbl_TrabSalarioLanc


    Assim:

    Os 10 registros anteriores ficarao relacionados a data xx/xx/yyyy
    e os novos inseridos relacionados a nova data yy/yy/yyyy


    Estou certo?


    Cumprimentos
    avatar
    rgondim
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 229
    Registrado : 24/02/2012

    [Resolvido]Adicionar Registros com Insert Into... Empty Re: [Resolvido]Adicionar Registros com Insert Into...

    Mensagem  rgondim 5/7/2012, 22:27

    Correto, você está certo.

    Só complementando, a hierarquia correta das tabelas é:

    1. tblTrabalhador
    |
    2. tblTrab_SalarioData ----> a cada ano, p.ex., é registrado uma nova alteração (com nova data dd/mm/yyyy)
    |
    3. tblTrab_SalarioLanc ----> registrado um nova alteração, são feitos os lançamentos com valores.

    QUando fizer alteração voce substituirá os registros que estão na tblTrab_SalarioLanc ou adicionará novos?
    Serão adicionados novos registros.
    avatar
    Convidado
    Convidado


    [Resolvido]Adicionar Registros com Insert Into... Empty Re: [Resolvido]Adicionar Registros com Insert Into...

    Mensagem  Convidado 5/7/2012, 22:33

    Levando em conta esta hierarquia que me passaste, creio que os relacionamentos estão equivocados...

    VOu rever isso e posto o relacionamento para que atualize o seu bd, depois passamos a insercao dos salarios..

    Tudo bem?
    avatar
    Convidado
    Convidado


    [Resolvido]Adicionar Registros com Insert Into... Empty Re: [Resolvido]Adicionar Registros com Insert Into...

    Mensagem  Convidado 5/7/2012, 22:49

    Os relacionamentos estão OK...

    So acho que não precisa relacionar a tblTrab_SalarioLanc diretamente com a tabela do trabalhador, pois ta esta relacionada com a data e esta por vez à do trabalhador.


    Entao será assim..

    Adiciona Nova data a tblTrab_SalarioData e varios registros para esta data.

    Agora.. Quais registros irá inserir para a nova data?

    Ao selecionar varios trabalhadores, clicar em um botão:

    1 - na tblData inserir a nova data
    2 = ba tblTrab_SalarioLancamento inserir quais registros para esta data e onde estão estas informações?


    Cumprimentos.
    avatar
    rgondim
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 229
    Registrado : 24/02/2012

    [Resolvido]Adicionar Registros com Insert Into... Empty Re: [Resolvido]Adicionar Registros com Insert Into...

    Mensagem  rgondim 5/7/2012, 23:10

    So acho que não precisa relacionar a tblTrab_SalarioLanc diretamente com a tabela do trabalhador, pois ta esta relacionada com a data e esta por vez à do trabalhador.
    Fiz esse relacionamento com uma ideia, já desisti dela. Ele realmente é supérfluo.

    Quais registros irá inserir para a nova data?
    Estou enviando um link com uma atualização do BD. No formulário frmTrab_AlteraSal, há um exemplo. Nele, seleciono os empregadores numa listbox e uma data (que corresponde as datas em tblTrab_SalarioData). Então, clico em um botão e ele seleciona os lançamentos dos trabalhadores daqueles empregadores da data selecionada. São estes que quero inserir.
    Um detalhe: os novos registros deverão ser inseridos com uma nova data e um acréscimo no valor. Então, este mesmo formulário tem os campos NovaData e Porcetagem (para adicionar ao valor de cada lançamento).

    No BD, tem uma consulta adição (qryTrab_AdcionaSal) que demonstra o que pretendo adicionar.
    https://skydrive.live.com/redir?resid=65D5D5D149DBFDAF!261&authkey=!AFMoPTQxzSko6Vc

    Muito obrigado pela grande ajuda!
    avatar
    Convidado
    Convidado


    [Resolvido]Adicionar Registros com Insert Into... Empty Re: [Resolvido]Adicionar Registros com Insert Into...

    Mensagem  Convidado 6/7/2012, 21:24

    Agora me diz uma coisa.. So pra compreender...

    Voce escolhe o empregador e altera o salário de todos os empregados deste. Certo...

    O novo salario será extraido de onde?

    Por exemplo o Trab, Antonio Napoleao Silva Braga
    Ele tem 8 lancamentos na tblTrab_SalarioLanc, sendo que dois estão em branco.

    Me defina quais paramentros eu utilizarei na nova inserção e em quais aplico a porcentagem...

    Cumprimentos.
    avatar
    Convidado
    Convidado


    [Resolvido]Adicionar Registros com Insert Into... Empty Re: [Resolvido]Adicionar Registros com Insert Into...

    Mensagem  Convidado 6/7/2012, 22:11

    Boas Rgodim.... Vamor por parte assim ficara melhor para alcancarmos o nosso objetivo

    No form "frmTrab_AlteraSal", crie:

    1 - Botão e o nomeeie btnAtualiza
    2 - a cbo DataAlt, transforme em caixa texto e coloque o seu formato como data abreviada

    A variável StrWhwre que está no seu Comando69 a coloque nas declarações do módulo do form e exclua do comando69
    Assim nos poderemos a utilizar em qualquer evento do form


    Option Compare Database
    Option Explicit
    Dim strWhere As String


    Crie uma Sub: SelecionaEmpregadores, aqui carregaremos a variável StrWhere

    Sub SelecionaEmpregadores()
    Dim ctl As Control, frm As Form, lngContador As Long
    Dim StrSQL As String

    Set frm = Forms!frmTrab_AlteraSal
    Set ctl = frm!lstEmpregador

    strWhere = ""
    For lngContador = 0 To ctl.ListCount - 1
    If ctl.Selected(lngContador) Then
    strWhere = strWhere & "," & ctl.Column(0, lngContador)
    End If
    Next
    strWhere = Mid(strWhere, 2)
    MsgBox strWhere

    If ctl.ItemsSelected.Count = 0 Then
    Me.frmTrab_AlteraSalSub.Visible = False
    MsgBox "Selecione os Empregadores e uma data em DataAlt."
    End If
    End Sub

    Crie outra Sub InsereNovaData, nesta será executada a inclusao de nova data para os trabalhadores cujo empregadores serão selecionados na lista, atraves da variável StrWhere


    Sub InsereNovaData()
    Dim StrSQL As String
    Dim Rs As DAO.Recordset
    Dim Db As DAO.Database

    'Chama a rotina SelecionaEmpregadores para filtrar a tblTrabalhador de acordo com os Empregadores selecionados na lista
    Me.SelecionaEmpregadores

    'Instrução SQL para uso no recordset aqui selecionamos apenas os trabalhadores cujo empregadores estarão selecionados na lista
    StrSQL = "SELECT * FROM tblTrabalhador WHERE CodEmpregador In (" & strWhere & ");"

    'Seta o Db
    Set Db = CurrentDb
    'Seta o Recordset com a SQL
    Set Rs = CurrentDb.OpenRecordset(StrSQL)

    'Percorre todos os registros do recordset adicionando a cada loop o registro na tblTrab_SalarioData, para o Respectivo CodTrabalhador
    Criando o novo registro com a nova data e o Codtrabalhador proveniente do recordset, assim relacionando a nova data com o trabalhador selecionado a cada loop de recordset

    Do While Not Rs.EOF
    CurrentDb.Execute "INSERT INTO tblTrab_SalarioData ( CodTrabalhador2, DataAlt)" _
    & " SELECT """ & Rs!CodTrabalhador & """, """ & Me.DataAlt & """;"
    'Vai para o proximo registro do recordset
    Rs.MoveNext
    Loop
    End Sub


    Nos eventos do tbnAtualiza:
    Private Sub btnAtualiza_Click()
    Call InsereNovaData
    End Sub


    Ative a referencia
    Microsoft DAO 3.6 Object Library

    Pois Bem selecione alguns empregadores na lista e execute esta rotina, e abra as tabelas e observe.
    Aqui ja temos a qustão da data ja resolvida, teste e passamos para o proximo passo que é inserir os dados do novo salario na data criada



    Abraços.
    avatar
    rgondim
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 229
    Registrado : 24/02/2012

    [Resolvido]Adicionar Registros com Insert Into... Empty Re: [Resolvido]Adicionar Registros com Insert Into...

    Mensagem  rgondim 7/7/2012, 07:49

    Grande, fico imensamente agradecido pela sua disposição de compartilhar conhecimento.

    Vi seu retorno e já estou testando. Um pouco antes - depois de muitas pestanas na madrugada - eu havia conseguido, muito semelhante a sua solução (botão cmdInserir).

    Private Sub cmdInserir_Click()
    Dim db As DAO.Database
    Dim rsDe As DAO.Recordset, rsPara As DAO.Recordset

    strSQL = "SELECT * FROM qryTrab_AlteraSal WHERE CodEmpregador In (" & SelecMult(1) & ")" & _
    "AND DataAlt =#" & Format(Me.DataAlt, "mm/dd/yyyy") & "#"
    Set db = CurrentDb()
    Set rsDe = db.OpenRecordset(strSQL)
    Set rsPara = db.OpenRecordset("qryTrab_NovoSal")

    Do While Not rsDe.EOF
    rsPara.AddNew
    rsPara!CodTrabalhador2 = rsDe!CodTrabalhador2
    rsPara!DataAlt = Forms!frmTrab_AlteraSal!NovaData
    rsPara.Update 'Aqui termina a inserção do registro na tabela tblTrab_SalarioData
    rsPara.AddNew
    rsPara!CodSalData = DMax("CodSalData1", "tblTrab_SalarioData")
    rsPara!CodEvento2 = rsDe!CodEvento2
    rsPara!RefValor = rsDe!RefValor
    rsPara!RefValor2 = rsDe!RefValor2
    rsPara!ValorLST = rsDe!ValorLST * Forms!frmTrab_AlteraSal!Porcent + rsDe!ValorLST
    rsPara.Update 'Aqui termina a inserção do registro na tabela tblTrab_SalarioLanc
    rsDe.MoveNext
    Loop

    rsDe.Close
    rsPara.Close
    Set rsDe = Nothing
    Set rsPara = Nothing
    Set db = Nothing
    End Sub


    'Call SelecMult(1): o procedimento para capturar a seleção da listbox foi posta nesta.função.
    avatar
    Convidado
    Convidado


    [Resolvido]Adicionar Registros com Insert Into... Empty Re: [Resolvido]Adicionar Registros com Insert Into...

    Mensagem  Convidado 7/7/2012, 14:47

    Conseguiste resolver então??


    Cumprimentos.
    avatar
    rgondim
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 229
    Registrado : 24/02/2012

    [Resolvido]Adicionar Registros com Insert Into... Empty Re: [Resolvido]Adicionar Registros com Insert Into...

    Mensagem  rgondim 7/7/2012, 18:26

    Ainda vou testar tua solução. Mas, vejo que usamos o mesmo raciocínio.

    Tua ajuda foi essencial.
    avatar
    Convidado
    Convidado


    [Resolvido]Adicionar Registros com Insert Into... Empty Re: [Resolvido]Adicionar Registros com Insert Into...

    Mensagem  Convidado 7/7/2012, 19:35

    Boas Rgondim, não quero parecer pretencioso, mas as consultas que utiliza no Código VBA eu faria todas em SQLVba, não utilizaria uma consulta gráfica, o projeto ficaria muito mais enxuto

    strSQL = "SELECT * FROM qryTrab_AlteraSal WHERE CodEmpregador In (" & SelecMult(1) & ")" & _
    "AND DataAlt =#" & Format(Me.DataAlt, "mm/dd/yyyy") & "#"
    Set db = CurrentDb()
    Set rsDe = db.OpenRecordset(strSQL)
    Set rsPara = db.OpenRecordset("qryTrab_NovoSal")


    Eu gostaria se possível que seguindo o meu raciocinio na solução postada por mim acima, me falasse quais linhas de salario iria utilizar para inserir por data. Eu gostaria de tentar concluir o que comecei. SO pra satisfação pessoal mesmo se é que me entende hehehe


    Abraços.

    avatar
    rgondim
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 229
    Registrado : 24/02/2012

    [Resolvido]Adicionar Registros com Insert Into... Empty Re: [Resolvido]Adicionar Registros com Insert Into...

    Mensagem  rgondim 8/7/2012, 05:09

    Grande Harysohn, vou ver como vai ficar o uso do select da consulta no próprio VBA. Sou amador em programação e toda dica é válida.

    Quanto as linhas de salário a serem inseridas, todas elas serão, com exceção daquela com CodEvento=48. Esta linha corresponde ao Salário Família. Para ela, realizarei um cálculo baseado nas regras de pagamento do mesmo.
    Então, será mais ou menos:

    ...
    Do While Not rsDe.EOF
    ...
    If rsPara!CodEvento = 48 e ValorCotaSalFamilia > 0 Then rsPara!ValorLST = FunçãoCalculaSalFamilia
    ...
    Loop

    FunçãoCalculaSalFamilia: esta função soma as verbas do salário e compara com a cota correspondente, registrada numa na tabela tblEvento_Indices. Por fim, caso o valor da cota NÃO seja R$0,00, multiplica pelo número de dependentes do empregado, informação registrada na tabela tblTrabalhador.

    Valeu.

    Conteúdo patrocinado


    [Resolvido]Adicionar Registros com Insert Into... Empty Re: [Resolvido]Adicionar Registros com Insert Into...

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 22/11/2024, 09:58