none
Access + Excel - Contador de "revisões" RRS feed

  • Pergunta

  • Salve,
    Pessoal gostaria da ajuda de vcs. Estou interligando uma Planilha do Excel com um BD Access.
    Nele a pessoa faz os calculos no Excel e enviar para o BD. Até ai Blz. O problema é que preciso ou que o o Access encontre o "Modelo" que está sendo atuzalidado e faça o UPDATE das infos ou que o Access conte em um campo quantas ocorrencias daquele mesmo "Modelo" há no BD, sempre somando +1, para constar como revisão.

    Espero ter passado as informações de maneira clara.... vlw
    quinta-feira, 5 de junho de 2008 16:00

Respostas

  • Slot,

     

    não ficou claro para mim onde você vai rodar este código, se no Access ou no Excel.

     

    Pelo que entendi também, você tem um campo chamado Review, que em conjunto com SalesModel, compõe a chave primária da tabela. Ou seja, você até pode repetir o SalesModel, desde que o Review seja diferente.

     

    Minha sugestão é você fazer um SELECT trazendo o SalesModel e o Review em ordem decrescente. Se a consulta retornar registros, você vai ao primeiro, pega o número do Review (que será o maior, visto que foi ordenado de forma decrescente), soma 1 e gera um novo registro:

     

    [code]

    Dim db As DAO.Database

    Dim rstDest As DAO.Recordset

    Dim strSQL As String

    Dim lngReview As Long

     

    Set db=CurrentDB()

    strSQL="SELECT * FROM TuaTabela WHERE [SalesModel]='" & TeuSalesModel & "' ORDER BY Review DESC"

    Set rst=db.OpenRecordset(strSQL)

    With rst

       If .RecordCount > 0 Then

          .MoveFirst

          lngReview = Nz(!Review)+1

       Else

          lngReview=1

       End If

       .AddNew

       !SalesModel= TeuSalesModel

       !Family = TuaFamily

       !Box_Type = TeuBoxType

       'etc..., campo a campo

       !Review = lngReview

       .Update

    End With

     

    [/code]

     

    Os valores eu coloquei como TeuAlgumaCoisa porque não sei se eles vêm do Excel ou de uma tabela vinculada no Access.

     

     

     

     

     

    sexta-feira, 6 de junho de 2008 01:59
    Moderador

Todas as Respostas


  • Segue como está o código dentro do Excel para fazer a transferencia dos dados:

    Sub OK_Armazena()
    '
    ' Macro para armazenar balanciamento do modelo em um banco de dados.
     
        Dim db As database
        Dim rs As Recordset
        Dim XLTable As TableDef
        Dim strSQL As String
       
        If MsgBox("Deseja salvar balanciamento desse modelo?", 3 + 32 + 0 + 0, "LeanPack Analysis") = 6 Then
       
        ' seleciona a base de dados e copai na area de transferencia
        Range("A2:AK2").Select
        Selection.Copy
        Range("A5:AK5").Select
        Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
            xlNone, SkipBlanks:=False, Transpose:=False
        Selection.Interior.ColorIndex = xlNone
        Selection.Font.Bold = False
        'abrir database
          Set db = OpenDatabase("E:\LeanPack\Novo\RATES_V1.mdb")
        'carregar area de transferencia e criar uma pasta temporaria dentro da database
        Set XLTable = db.CreateTableDef("TEMP")
        XLTable.Connect = "Excel 8.0;DATABASE=E:\LeanPack\Novo\LeanPack_Analysis_Teste.xls"
        XLTable.SourceTableName = "BASE2"
        db.TableDefs.Append XLTable
        'enviar dados da tabela TEMP para a Tabela principal da database
        strSQL = "Insert into TABELA_BASE Select * from TEMP"
        'Execute the SQL statement.
        db.Execute strSQL
        'Remove the attached table because it's no longer needed.
        db.TableDefs.Delete "temp"
        db.Close

        MsgBox "Balanciamento salvo com sucesso!", 0 + 64 + 0 + 0, "LeanPack Analysis"
        Else
        Sheets("Analysis").Select
        'Range("C7").Select
      
       End If
       
    End Sub

    quinta-feira, 5 de junho de 2008 16:11
  • Olá....

     

    Code Snippet

    Dim VZ%
       VZ = 0
       If RS.RecordCount > 0 Then
           RS.MoveFirst
           Do While Not RS.EOF
               If RS.Fields("Campo") = "valor" Then
                   VZ = VZ + 1
               End If
           Loop
       End If

     

     

    Faz uma condição do valor que você que encontar dentro de um loop...

    No Final a variável vai conter quantas campos tem esta condição..

     

    Qualquer dúvida post denovo..

    quinta-feira, 5 de junho de 2008 18:44
  • Opa... não é bem isso que é preciso... vou tentar explicar melhor....

    Tenho uma Planilha que vc faz varios calculos malucos... e gera:

    SALES MODEL FAMILY

    BOX_TYPE ITEM RATE HEADCOUNT UPH DATE ANALYZER
    89543LYESA W243

    C_6 6 516 6 86 06/05/08 Andre

    o Index deve ser o Sales Model, porque deve existir apenas 1com sua numeração... seguido das configurações posteriores (demais campos). Preciso exportar isso para um BD no access que é o permitido na empresa.

    Aqui está o impasse... ou faço a transferencia de um modo que substitua o cadastro do SALES MODEL antigo ou incluo  + o Campo REVIEW, que deve contar quanto SALES MODEL existem, sempre somando mais um, para mostrar a mais recente revisão.

    Pelo modo de envio que estou fazendo, juntando a falta de experiencia em VBA Access não estou conseguindo interliga-los.
    Talvez outro modo de exportar do excel seja mais eficiente nesse caso... onde ele substituiria o registro mais antigo...
    Sabe outra maneira mais eficiente de exportar?
    quinta-feira, 5 de junho de 2008 20:53
  • Slot,

     

    não ficou claro para mim onde você vai rodar este código, se no Access ou no Excel.

     

    Pelo que entendi também, você tem um campo chamado Review, que em conjunto com SalesModel, compõe a chave primária da tabela. Ou seja, você até pode repetir o SalesModel, desde que o Review seja diferente.

     

    Minha sugestão é você fazer um SELECT trazendo o SalesModel e o Review em ordem decrescente. Se a consulta retornar registros, você vai ao primeiro, pega o número do Review (que será o maior, visto que foi ordenado de forma decrescente), soma 1 e gera um novo registro:

     

    [code]

    Dim db As DAO.Database

    Dim rstDest As DAO.Recordset

    Dim strSQL As String

    Dim lngReview As Long

     

    Set db=CurrentDB()

    strSQL="SELECT * FROM TuaTabela WHERE [SalesModel]='" & TeuSalesModel & "' ORDER BY Review DESC"

    Set rst=db.OpenRecordset(strSQL)

    With rst

       If .RecordCount > 0 Then

          .MoveFirst

          lngReview = Nz(!Review)+1

       Else

          lngReview=1

       End If

       .AddNew

       !SalesModel= TeuSalesModel

       !Family = TuaFamily

       !Box_Type = TeuBoxType

       'etc..., campo a campo

       !Review = lngReview

       .Update

    End With

     

    [/code]

     

    Os valores eu coloquei como TeuAlgumaCoisa porque não sei se eles vêm do Excel ou de uma tabela vinculada no Access.

     

     

     

     

     

    sexta-feira, 6 de junho de 2008 01:59
    Moderador

  • Pessoal, acho que preciso repensar esse projeto.... talvez transferir "o que " a planilha faz para access não seja o melhor, e sim "como" ela faz seja o caminho... vou postar aqui o que ela faz e anexar ela para quem quiser ver...

    Fiz para a empresa que trabalho uma planilha dentro do excel, usando macros, formulas e VBA.

    A planilha faz basicamente...
    (1ª)Ela tem um registro fixo de alguns item, tendo o NOME, TEMPO e DESCRIÇÂO:
    Ex.:
    A = 1,5minutos = item A
    B = 2,5minutos = item B
    n = n minutos = Item n

    Quando entra um pedido entra, ele tem uma configuração:
    82899LYESA = 2x A + 1xB+1xC...= Total de 7 Items.

    Os operadores então escolhem cada idem na Planilha PICK, colocando 1 para sim ou 0 para não , montando um PICK LIST do que deve ser separado...

    (2ª) Cada item tem um tempo associado a ele. Esse é o tempo que ele vai demorar para ser montado pela linha de produção.
    Assim, o operador faz o balanciamento da linha, na aba ANALYSIS, associando os itens escolhidos às posições de 1 a 9. Cada posição pode ter 4 itens associados n máximo.
    Nesse tempo a planilha mostra o tempo de cada operação quando cada item é colocado, mostrando se uma posição é mais rápida do a outra e também conta quantas posições ou pessoas será necessário para fazer aquele pedido. (no Minimo 5 no maximo 9)

    (3ª) Depois de encontrar uma configuração ideal ele clica em salvar, para que esse pedido, configuraçao das posições dos items e demais calculos fiquem gravados em uma planilha para consulta positerior (sheet!DADOS)

    Bem basicamente é isso... vou disponibilizar essa planilha aqui... fiz algumas mudanças por segurança da minha empresa:
    http://rapidshare.com/files/120422185/LeanPack_Analysis_SITE.xls.html

    Preciso da ajuda, suporte de vcs... sei programar no excel, mas no access só sei conceitos basicos das programações e ferramentas... 
    Sei que o sistema não vai ficar igual a planilha, nem de perto...
    Mas alguem poderia me dar um suporte durante esse projeto????
    Desde agradeço muito... segue meu email misterdomingues@gmail.com
    Grt SLOT
    sexta-feira, 6 de junho de 2008 14:26