Centralizare Date

Închis
catalin743
Mesaje: 34
Membru din: Joi Oct 15, 2009 9:06 am

Centralizare Date

Mesaj de catalin743 » Dum Aug 26, 2012 12:28 am

Am urmatoarea probelma, mai multe fisiere Access de tip mdb si denumire zz-ll-aa (zz zi,ll luna,aa an),datele gasindu-se intr-o tabela numita InA .As vrea sa centralizez toate aceste tabele specifice unei luni si sa le export intr-un fisier Excell, fiecare zi corespunzand unui Sheet. Asa ca orice idee, sugestie sau punct de plecare ar fi bine venite, mai ales ca desi am cunostinte de VBA nu prea folosit Access-ul pina in prezent. Multumesc anticipat.

catalin743
Mesaje: 34
Membru din: Joi Oct 15, 2009 9:06 am

Re: Centralizare Date

Mesaj de catalin743 » Lun Sep 17, 2012 9:51 pm

Sa incercam altfel. Am o baza de date cu 30 de tabele (1,2,3,....30) toate de structura identica. Ce posibilitati de lipire(concatenare) a datelor din aceste tabele exista?

Dr.Windows
Moderator
Moderator
Mesaje: 4570
Membru din: Vin Iul 31, 2009 7:32 am

Re: Centralizare Date

Mesaj de Dr.Windows » Mie Sep 19, 2012 8:10 pm

In cazul asta este ceva mai simplu... pentru ca se oate face o centralizare cu SELECT... UNION.

Pentru a parcurge toate tabelele tale se poate folosi un cod VBA care sa "adune" datele din toate tabelele care de ex au forma "TABLEnn" si va generea un "query string" pe care vedem mai tarziu cum il folosim:

Cod: Selectaţi tot

Sub unionall()
    qryStr = ""
    nTables = CurrentDb.TableDefs.Count - 1
    For i = 0 To nTables
        tblName = UCase(CurrentDb.TableDefs(i).Name)
        If tblName Like "TABLE#*" Then
            If Len(qryStr) > 0 Then
                qryStr = qryStr & " UNION SELECT * from " & tblName
            Else
                qryStr = "SELECT * from " & tblName
            End If
        End If
    Next i
    Debug.Print qryStr
End Sub
Codul de mai sus va cauta in baza de date TOATE tabelele care sunt de forma "TABLE#*" (adica au o cifra si inca ceva sau nu) - conditia o poti modifica sa corespunda cu denumirile tabelelor tale.

Acum pentru ca avem SELECTUL pregatit in qryStr sunt mai multe variante in care il putem folosi - una din ele ar fi sa il "scriem" intr-un query din baza de date pe care apoi il putem rula de oricate ori (daca un se modifica numarul/numele tabelelor).
Mai intai putem crea un query "dummy" care sa contina de ex. numai

Cod: Selectaţi tot

SELECT 1=1
Orice - nu conteaza doar sa existe "ceva" in el - in cazul meu l-am denumit qryMyQuery. In acest caz putem completa codul de mai sus cu cateva instructiuni care vor actualiza comanda SQL de executat cu stringul corect, care ne intereseaza pe noi - qryStr si apoi putem executa acel query actualizat.

Cod: Selectaţi tot

Sub unionall()
    qryStr = ""
    nTables = CurrentDb.TableDefs.Count - 1
    For i = 0 To nTables
        tblName = UCase(CurrentDb.TableDefs(i).Name)
        If tblName Like "TABLE#*" Then
            If Len(qryStr) > 0 Then
                qryStr = qryStr & " UNION SELECT * from " & tblName
            Else
                qryStr = "SELECT * from " & tblName
            End If
        End If
    Next i
    Debug.Print qryStr
    
    Dim qdf As DAO.QueryDef
    Set qdf = CurrentDb.QueryDefs("qryMyQuery")
    qdf.SQL = qryStr
    DoCmd.OpenQuery ("qryMyQuery")
    Set qdf = Nothing
    
End Sub
Dupa aceea doar mai trebuie sa faci exportul in Excel... in masura timpului disponibil, poate reusesc a completez codul si cu restul...

Închis

Înapoi la “Visual Basic for Application (VBA) - Intrebari tehnice”