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

    [Resolvidos]Referência cruzada com incremento de função entre 2 tabelas

    avatar
    Augusto
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 17
    Registrado : 26/01/2010

    [Resolvidos]Referência cruzada com incremento de função entre 2 tabelas Empty [Resolvidos]Referência cruzada com incremento de função entre 2 tabelas

    Mensagem  Augusto 26/1/2010, 16:15

    Olá a todos,
    Tenho uma tabela que recebo toda semana que preciso analisar, mas antes preciso organizá-la. O nome da tabela e suas colunas são: Tab1 - linha,data,c1,c2,...c15. Onde os valores da linha são seqüencias, mas os valores da C1 até c15 são valores que variam de 1 até 25.
    Tab1 - 1, 1/1/10, 25, 17, 3, 1, 5, 7, 21, 8, 10, 11, 2, 13, 20, 15, 4
    O que gostaria de fazer é criar uma Tab2 assim:
    Tab2 - linha,data,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25
    Tab2 - 1, 1/1/10, 1, 2, 3, 4, 5, , 7, 8, ,10,11,,,,15,...,25. Os valores não encontrados em Tab1 não são preenchidos em tab2.

    Adaptei um codigo que preenche todas as linhas e datas corretamente, mas nas colunas da Tab2 de 1 até 25, ele organiza a primeira linha corretamente, mas repete estes valores para as outras linhas

    sql = "SELECT * FROM " & Tab1 & ";"
    Set rst = CurrentDb.OpenRecordset(sql)
    With rst
    Do While Not .EOF
    With .Fields
    t1 = Me!c1
    ...
    t15 = Me!c15
    sql = "INSERT INTO " & Tab2 & " (Linha,Data," & t1 & ",...,," & t15 & ") VALUES ('" & .Item(0).Value & "','" & .Item(1).Value & "','" & t1 & "',...','" & t15 & "');"
    CurrentDb.Execute (sql)
    End With
    .MoveNext
    Loop

    Talvez o caminho não seja este, alguém teria um outro exemplo onde eu possa adaptar. Basicamente, preciso ler as linhas e colunas e criar uma estrutura de decisão...
    Desde já agradeço a atenção de vocês.
    Obrigado,
    Augusto
    JPaulo
    JPaulo
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 10661
    Registrado : 04/11/2009

    [Resolvidos]Referência cruzada com incremento de função entre 2 tabelas Empty Re: [Resolvidos]Referência cruzada com incremento de função entre 2 tabelas

    Mensagem  JPaulo 26/1/2010, 18:18

    Ola Augusto seja bem vindo ao fórum.

    Não tenho a certeza se é o que pretende, mas vamos tentar assim;


    Public Function AtualizaTab2()
    strSQL = "SELECT * FROM Tab1"
    Set rst = CurrentDb.OpenRecordset(strSQL)
    With rst
    Do While Not .EOF
    With .Fields
    t1 = Nz(rst!c1, 0)
    t2 = Nz(rst!c2, 0)
    t3 = Nz(rst!c3, 0)
    t4 = Nz(rst!c4, 0)
    t5 = Nz(rst!c5, 0)
    t6 = Nz(rst!c6, 0)
    t7 = Nz(rst!c7, 0)
    t8 = Nz(rst!c8, 0)
    t9 = Nz(rst!c9, 0)
    t10 = Nz(rst!c10, 0)
    t11 = Nz(rst!c11, 0)
    t12 = Nz(rst!c12, 0)
    t13 = Nz(rst!c13, 0)
    t14 = Nz(rst!c14, 0)
    t15 = Nz(rst!c15, 0)
    t16 = Nz(rst!c16, 0)
    t17 = Nz(rst!c17, 0)
    t18 = Nz(rst!c18, 0)
    t19 = Nz(rst!c19, 0)
    t20 = Nz(rst!c20, 0)
    t21 = Nz(rst!c21, 0)
    t22 = Nz(rst!c22, 0)
    t23 = Nz(rst!c23, 0)
    t24 = Nz(rst!c24, 0)
    t25 = Nz(rst!c25, 0)
    strSQL = "INSERT INTO Tab2 (Linha, Data, c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16,c17,c18,c19,c20,c21,c22,c23,c24,c25" _
    & ") VALUES ('" & .Item(0).Value & "',#" & .Item(1).Value & "#," & t1 & "," & t2 & "," & t3 _
    & "," & t4 & "," & t5 & "," & t6 & "," & t7 & "," & t8 & ", " & t9 & "," & t10 & "," & t11 & "," & t12 _
    & "," & t13 & "," & t14 & "," & t15 & "," & t16 & "," & t17 & "," & t18 & "," & t19 & "," & t20 & "," & t21 _
    & "," & t22 & "," & t23 & "," & t24 & "," & t25 & ");"
    CurrentDb.Execute (strSQL)
    End With
    .MoveNext
    Loop
    End With
    End Function


    .................................................................................
    Contribua com o maximoaccess nos links abaixo, ajude a melhorar este que é o seu site na NET.

    Pay-Pal R$ Aqui
    Pay-Pal € Aqui

    Ou ainda: Aqui (Novo)

    Sucesso e Bons Estudos
    Success and Good Studies

    [Resolvidos]Referência cruzada com incremento de função entre 2 tabelas Folder_announce_new Utilize o Sistema de Busca do Fórum...
    [Resolvidos]Referência cruzada com incremento de função entre 2 tabelas Folder_announce_new 102 Códigos VBA Gratuitos...
    [Resolvidos]Referência cruzada com incremento de função entre 2 tabelas Folder_announce_new Instruções SQL como utilizar...
    avatar
    Augusto
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 17
    Registrado : 26/01/2010

    [Resolvidos]Referência cruzada com incremento de função entre 2 tabelas Empty Re: [Resolvidos]Referência cruzada com incremento de função entre 2 tabelas

    Mensagem  Augusto 26/1/2010, 20:12

    Olá! Obrigado pela dica.
    Só precisei fazer duas adaptações:
    Formatos das Tabelas:
    Tab1 - Linha, Data, C1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15 => total de colunas 17
    Tab2 - Linha, Data, 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25 => total de colunas 27
    Qual foi a lógica, como os valores da Tab1 variavam em C1,..c15 de 1 até 25 em 15 colunas, criei as colunas em Tab2 de 1 até 25.
    Como t1 ...t15 recebem os valores de c1 ...c15, no Insert into as colunas irão receber os valores de 1 ... 25.
    Com isto, só precisava de t1 até t15, e no Insert into, substitui o c1 por " & t1 & " e assim sucessivamente...
    Funcionou legal, agora só preciso de um teste para saber qual foi a última atualização, pq semana que vem tenho que atualizar novamente, com este código as linhas ficarão duplicadas.

    t1 = Nz(rst!c1, 0)
    t2 = Nz(rst!c2, 0)
    t3 = Nz(rst!c3, 0)
    t4 = Nz(rst!c4, 0)
    t5 = Nz(rst!c5, 0)
    t6 = Nz(rst!c6, 0)
    t7 = Nz(rst!c7, 0)
    t8 = Nz(rst!c8, 0)
    t9 = Nz(rst!c9, 0)
    t10 = Nz(rst!c10, 0)
    t11 = Nz(rst!c11, 0)
    t12 = Nz(rst!c12, 0)
    t13 = Nz(rst!c13, 0)
    t14 = Nz(rst!c14, 0)
    t15 = Nz(rst!c15, 0)

    strSQL = "INSERT INTO Tab2 (Linha, Data," & t1 & "," & t2 & "," & t3 & "," & t4 & "," & t5 & "," & t6 & "," & t7 _
    & "," & t8 & "," & t9 & "," & t10 & "," & t11 & "," & t12 & "," & t13 & "," & t14 & "," & t15 & ") VALUES ('" _
    & .Item(0).Value & "',#" & .Item(1).Value & "#," & t1 & "," & t2 & "," & t3 _
    & "," & t4 & "," & t5 & "," & t6 & "," & t7 & "," & t8 & ", " & t9 & "," & t10 & "," & t11 & "," & t12 _
    & "," & t13 & "," & t14 & "," & t15 & "," & t16 & "," & t17 & "," & t18 & "," & t19 & "," & t20 & "," & t21 _
    & "," & t22 & "," & t23 & "," & t24 & "," & t25 & ");"
    CurrentDb.Execute (strSQL)
    End With
    .MoveNext
    Loop
    End With
    End Function
    JPaulo
    JPaulo
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 10661
    Registrado : 04/11/2009

    [Resolvidos]Referência cruzada com incremento de função entre 2 tabelas Empty Re: [Resolvidos]Referência cruzada com incremento de função entre 2 tabelas

    Mensagem  JPaulo 26/1/2010, 21:03

    Fico feliz por se ter atingido o objectivo.

    Minha opinião para não duplicar, seria na Tab2 colocar um ou mais campos com duplicação não autorizada.


    .................................................................................
    Contribua com o maximoaccess nos links abaixo, ajude a melhorar este que é o seu site na NET.

    Pay-Pal R$ Aqui
    Pay-Pal € Aqui

    Ou ainda: Aqui (Novo)

    Sucesso e Bons Estudos
    Success and Good Studies

    [Resolvidos]Referência cruzada com incremento de função entre 2 tabelas Folder_announce_new Utilize o Sistema de Busca do Fórum...
    [Resolvidos]Referência cruzada com incremento de função entre 2 tabelas Folder_announce_new 102 Códigos VBA Gratuitos...
    [Resolvidos]Referência cruzada com incremento de função entre 2 tabelas Folder_announce_new Instruções SQL como utilizar...
    avatar
    Augusto
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 17
    Registrado : 26/01/2010

    [Resolvidos]Referência cruzada com incremento de função entre 2 tabelas Empty Re: [Resolvidos]Referência cruzada com incremento de função entre 2 tabelas

    Mensagem  Augusto 26/1/2010, 21:57

    Obrigado.
    Bastou colocar no campo
    linha
    Indexado = Sim (Duplicação não autorizada)
    JPaulo
    JPaulo
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 10661
    Registrado : 04/11/2009

    [Resolvidos]Referência cruzada com incremento de função entre 2 tabelas Empty Re: [Resolvidos]Referência cruzada com incremento de função entre 2 tabelas

    Mensagem  JPaulo 27/1/2010, 09:17

    Perfeito e sucesso para o seu projeto.


    .................................................................................
    Contribua com o maximoaccess nos links abaixo, ajude a melhorar este que é o seu site na NET.

    Pay-Pal R$ Aqui
    Pay-Pal € Aqui

    Ou ainda: Aqui (Novo)

    Sucesso e Bons Estudos
    Success and Good Studies

    [Resolvidos]Referência cruzada com incremento de função entre 2 tabelas Folder_announce_new Utilize o Sistema de Busca do Fórum...
    [Resolvidos]Referência cruzada com incremento de função entre 2 tabelas Folder_announce_new 102 Códigos VBA Gratuitos...
    [Resolvidos]Referência cruzada com incremento de função entre 2 tabelas Folder_announce_new Instruções SQL como utilizar...
    avatar
    Augusto
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 17
    Registrado : 26/01/2010

    [Resolvidos]Referência cruzada com incremento de função entre 2 tabelas Empty Re: [Resolvidos]Referência cruzada com incremento de função entre 2 tabelas

    Mensagem  Augusto 27/1/2010, 13:29

    Obrigado pela ajuda.
    Segue solução:

    Rotina que organiza valores de uma tabela em outra tabela.
    Configuração das tabelas:
    Tab1 - Linha, Data, c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15
    Tab2 - Linha, Data, 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25
    Onde campo Linha de Tab2 é Indexado = Sim (Duplicação não autorizada)

    Dados da Tab1
    Linha Data c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15
    1 1/01/2010 18 20 25 23 10 11 24 14 6 2 13 9 5 16 3
    2 7/01/2010 23 15 5 4 12 16 20 6 11 19 24 1 9 13 7
    3 13/01/2010 20 23 12 8 6 1 7 11 14 4 16 10 9 17 24

    Resultado após aplicar a rotina
    Dados da Tab2
    Linha Data 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
    1 1/01/2010 0 2 3 0 5 6 0 0 9 10 11 0 13 14 0 16 0 18 0 20 0 0 23 24 25
    2 7/01/2010 1 0 0 4 5 6 7 0 9 0 11 12 13 0 15 16 0 0 19 20 0 0 23 24 0
    3 3/01/2010 1 0 0 4 0 6 7 8 9 10 11 12 0 14 0 16 17 0 0 20 0 0 23 24 0

    Public Function Atualiza()
    strSQL = "SELECT * FROM Tab1"
    Set rst = CurrentDb.OpenRecordset(strSQL)
    With rst
    Do While Not .EOF
    With .Fields
    t1 = Nz(rst!c1, 0)
    t2 = Nz(rst!c2, 0)
    t3 = Nz(rst!c3, 0)
    t4 = Nz(rst!c4, 0)
    t5 = Nz(rst!c5, 0)
    t6 = Nz(rst!c6, 0)
    t7 = Nz(rst!c7, 0)
    t8 = Nz(rst!c8, 0)
    t9 = Nz(rst!c9, 0)
    t10 = Nz(rst!c10, 0)
    t11 = Nz(rst!c11, 0)
    t12 = Nz(rst!c12, 0)
    t13 = Nz(rst!c13, 0)
    t14 = Nz(rst!c14, 0)
    t15 = Nz(rst!c15, 0)

    strSQL = "INSERT INTO Tab2 (Linha, Data," & t1 & "," & t2 & "," & t3 & "," & t4 & "," & t5 & "," & t6 & "," & t7 _
    & "," & t8 & "," & t9 & "," & t10 & "," & t11 & "," & t12 & "," & t13 & "," & t14 & "," & t15 & ") VALUES ('" _
    & .Item(0).Value & "',#" & .Item(1).Value & "#," & t1 & "," & t2 & "," & t3 _
    & "," & t4 & "," & t5 & "," & t6 & "," & t7 & "," & t8 & ", " & t9 & "," & t10 & "," & t11 & "," & t12 _
    & "," & t13 & "," & t14 & "," & t15 & ");"

    CurrentDb.Execute (strSQL)
    End With
    .MoveNext
    Loop
    End With
    End Function
    JPaulo
    JPaulo
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 10661
    Registrado : 04/11/2009

    [Resolvidos]Referência cruzada com incremento de função entre 2 tabelas Empty Re: [Resolvidos]Referência cruzada com incremento de função entre 2 tabelas

    Mensagem  JPaulo 27/1/2010, 16:26

    Perfeito, testado e a funcionar a 100%.

    Só recomendo duas unicas coisinhas e espero que não leve a mal.

    Renomeie o nome do campo Data, Data é uma palavra reservada do Access, e feche o recordset no final da função, pois pode vir a provocar erros de VBA ou até corromper o banco. set rs = Nothing


    .................................................................................
    Contribua com o maximoaccess nos links abaixo, ajude a melhorar este que é o seu site na NET.

    Pay-Pal R$ Aqui
    Pay-Pal € Aqui

    Ou ainda: Aqui (Novo)

    Sucesso e Bons Estudos
    Success and Good Studies

    [Resolvidos]Referência cruzada com incremento de função entre 2 tabelas Folder_announce_new Utilize o Sistema de Busca do Fórum...
    [Resolvidos]Referência cruzada com incremento de função entre 2 tabelas Folder_announce_new 102 Códigos VBA Gratuitos...
    [Resolvidos]Referência cruzada com incremento de função entre 2 tabelas Folder_announce_new Instruções SQL como utilizar...
    avatar
    Augusto
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 17
    Registrado : 26/01/2010

    [Resolvidos]Referência cruzada com incremento de função entre 2 tabelas Empty Re: [Resolvidos]Referência cruzada com incremento de função entre 2 tabelas

    Mensagem  Augusto 27/1/2010, 17:29

    Obrigado mais uma vez.
    O set rst=Nothing existia no código inicial, mas em algum momento se perdeu...
    Seguem alterações.

    Public Function Atualiza()
    strSQL = "SELECT * FROM Tab1"
    Set rst = CurrentDb.OpenRecordset(strSQL)
    With rst
    Do While Not .EOF
    With .Fields
    t1 = Nz(rst!c1, 0)
    t2 = Nz(rst!c2, 0)
    t3 = Nz(rst!c3, 0)
    t4 = Nz(rst!c4, 0)
    t5 = Nz(rst!c5, 0)
    t6 = Nz(rst!c6, 0)
    t7 = Nz(rst!c7, 0)
    t8 = Nz(rst!c8, 0)
    t9 = Nz(rst!c9, 0)
    t10 = Nz(rst!c10, 0)
    t11 = Nz(rst!c11, 0)
    t12 = Nz(rst!c12, 0)
    t13 = Nz(rst!c13, 0)
    t14 = Nz(rst!c14, 0)
    t15 = Nz(rst!c15, 0)

    strSQL = "INSERT INTO Tab2 (Linha, DataT," & t1 & "," & t2 & "," & t3 & "," & t4 & "," & t5 & "," & t6 & "," & t7 _
    & "," & t8 & "," & t9 & "," & t10 & "," & t11 & "," & t12 & "," & t13 & "," & t14 & "," & t15 & ") VALUES ('" _
    & .Item(0).Value & "',#" & .Item(1).Value & "#," & t1 & "," & t2 & "," & t3 _
    & "," & t4 & "," & t5 & "," & t6 & "," & t7 & "," & t8 & ", " & t9 & "," & t10 & "," & t11 & "," & t12 _
    & "," & t13 & "," & t14 & "," & t15 & ");"

    CurrentDb.Execute (strSQL)
    End With
    .MoveNext
    Loop
    End With
    Set rst = Nothing
    End Function
    JPaulo
    JPaulo
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 10661
    Registrado : 04/11/2009

    [Resolvidos]Referência cruzada com incremento de função entre 2 tabelas Empty Re: [Resolvidos]Referência cruzada com incremento de função entre 2 tabelas

    Mensagem  JPaulo 28/1/2010, 10:44

    Agora sim, tópico encerrado.


    .................................................................................
    Contribua com o maximoaccess nos links abaixo, ajude a melhorar este que é o seu site na NET.

    Pay-Pal R$ Aqui
    Pay-Pal € Aqui

    Ou ainda: Aqui (Novo)

    Sucesso e Bons Estudos
    Success and Good Studies

    [Resolvidos]Referência cruzada com incremento de função entre 2 tabelas Folder_announce_new Utilize o Sistema de Busca do Fórum...
    [Resolvidos]Referência cruzada com incremento de função entre 2 tabelas Folder_announce_new 102 Códigos VBA Gratuitos...
    [Resolvidos]Referência cruzada com incremento de função entre 2 tabelas Folder_announce_new Instruções SQL como utilizar...

      Data/hora atual: 19/1/2022, 01:02