variabele tabel naam

Status
Niet open voor verdere reacties.

jwaque

Verenigingslid
Lid geworden
16 aug 2006
Berichten
443
ik heb van verschillende jaren een zelfde tabel. In de naam van de tabel is de datum opgenomen. bv detaillijst 120101 en detaillijst 110101. Nu wil ik deze twee tabellen in een query gebruiken. Nu hernoem ik steeds de tabellen naar huidig en vorig jaar (volgende keer wil ik 120201 en 110201 gebruiken) maar dat lijdt tot veel werk en fouten. dus wil ik dat de query 'automatisch' de tabel van ditjaar en vorigjaar bij elkaar zoekt.

in een vba code kan ik de tabellen die bij elkaar horen openen. (nog klein probleem dat januari een 1 en niet 01 oplevert)

Maar kan ik deze variabele naam ook in een query gebruiken.

ik heb dit geprobeert met runSQL maar dat lijdt tot fouten. Hij kan de tabel resultaatvorig niet vinden. De DoCmd.Opentable werkt wel.

Graag jullie hulp. Wellicht hoef ik niet naar een vba code en kan het ook direct in de query alleen weet ik niet hoe.

alvast bedankt.

Code:
Dim db As Database
'Dim rs As Recordset
Dim sql As String

Set db = CurrentDb()

resultaatNu = "resultaat" & jaargetal & maandgetal & "01"
resultaatVorig = "resultaat" & vorigjaargetal & maandgetal & "01"

DoCmd.OpenTable resultaatNu, acViewPreview
DoCmd.OpenTable resultaatVorig, acViewPreview


sql = "SELECT ResultaatVorig.Instelling, Sum(ResultaatVorig.[SomVanTotaal incl]) AS [SomVanSomVanTotaal incl], ResultaatVorig.Expr1, ResultaatVorig.MinVanFaktdat, ResultaatVorig.MaxVanFaktdat, Sum(ResultaatNu.[SomVanTotaal incl]) AS [SomVanSomVanTotaal incl2] INTO test FROM ResultaatVorig INNER JOIN ResultaatNu ON (ResultaatVorig.Expr1 = ResultaatNu.Expr1) AND (ResultaatVorig.Instelling = ResultaatNu.Instelling)GROUP BY ResultaatVorig.Instelling, ResultaatVorig.Expr1, ResultaatVorig.MinVanFaktdat, ResultaatVorig.MaxVanFaktdat;"

DoCmd.RunSQL sql
DoCmd.OpenTable "test", acViewNormal, acReadOnly
vba code tabellen openen
Code:
Dim jaargetal As String
Dim maandgetal As String
Dim vorigjaargetal As String

jaargetal = Right(DatePart("yyyy", Now()), 2)
maandgetal = DatePart("m", Now())
vorigjaargetal = jaargetal - 1


'DetailNu = "detaillijst" & jaargetal & maandgetal & "01"
'DetailVorig = "detaillijst" & vorigjaargetal & maandgetal & "01"

'DoCmd.OpenTable DetailNu, acViewNormal
'DoCmd.OpenTable DetailVorig, acViewNormal
 
ik heb van verschillende jaren een zelfde tabel

Als ik zoiets lees vraag ik me altijd weer af, waarom in vredesnaam?
Er is geen enkele reden om meer dan 1 tabel te gebruiken als de tabellen identiek zijn qua structuur.

Wat houd je tegen om 1 tabel te gebruiken?
Maakt je queries/formulieren/rapporten en onderhoud veel makkelijker, simpeler en overzichtelijker.

Tardis
 
Als je een variable tabelnaam genereert, moet je die wel als zodanig definiëren en als variabele opnemen in je query.

Code:
Jaargetal = Right(Year(Date), 2)
Maandgetal = Format(Date, "MM")
Vorigjaargetal = Jaargetal - 1

ResultaatNu = "resultaat" & Jaargetal & Maandgetal & "01"
ResultaatVorig = "resultaat" & Vorigjaargetal & Maandgetal & "01"

SQL = "SELECT rVorig.Instelling, Sum(rVorig.[Totaal incl]) AS [Som Totaal incl], rVorig.Expr1, " _
    & "rVorig.MinVanFaktdat, rVorig.MaxVanFaktdat, Sum(rNu.[Totaal incl]) AS [Som Totaal incl2] " _
    & "INTO test FROM " & ResultaatVorig & " AS rVorig INNER JOIN " & ResultaatNu & " AS rNu ON (rVorig.Expr1 = rNu.Expr1)  " _
    & "AND (rVorig.Instelling = rNu.Instelling)GROUP BY rVorig.Instelling, rVorig.Expr1,  " _
    & "rVorig.MinVanFaktdat, rVorig.MaxVanFaktdat;"

DoCmd.RunSQL SQL

Omdat je eigenlijk vaste tabelnamen nodig hebt in je query, en je die niet hebt, zul je die moeten maken in de query. Dat doe je met Aliasssen. daarbij kun je elke willekeurige tabel een vaste naam geven, en dat is exact wat er gebeurt in de code.
 
Als ik zoiets lees vraag ik me altijd weer af, waarom in vredesnaam?
Er is geen enkele reden om meer dan 1 tabel te gebruiken als de tabellen identiek zijn qua structuur.

Wat houd je tegen om 1 tabel te gebruiken?
Maakt je queries/formulieren/rapporten en onderhoud veel makkelijker, simpeler en overzichtelijker.

Tardis

de data wordt overgehaald via een txt bestand uit een ander pakket en is zonder datum. De datum in de tabel naam is dus de enige identificatie die ik heb om de tabel te herkennen. Heb ook wel gedacht om een datum veld toe te voegen maar hoe dat te automatiseren heb ik nog niet bedacht. en om dan vervolgens de totalen per groep en verschil tov vorig jaar te berekeken is denk ook weer een heel gedoe.

daarbij is de data erg veel waardoor de tabel op den duur enorm zou worden (of ik zou de 2 jaar oude data weer moeten verwijderen)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan