Centralizare Date
-
- Mesaje: 34
- Membru din: Joi Oct 15, 2009 9:06 am
Centralizare Date
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.
-
- Mesaje: 34
- Membru din: Joi Oct 15, 2009 9:06 am
Re: Centralizare Date
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?
-
- Moderator
- Mesaje: 4570
- Membru din: Vin Iul 31, 2009 7:32 am
Re: Centralizare Date
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:
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
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.
Dupa aceea doar mai trebuie sa faci exportul in Excel... in masura timpului disponibil, poate reusesc a completez codul si cu restul...
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
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
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