Records kopieren binnen tabel, met toevoegquery?

Status
Niet open voor verdere reacties.

fmeca

Gebruiker
Lid geworden
7 sep 2009
Berichten
95
Voor de beeldvorming even een uitleg van het doel.
Binnen elektrische installaties (tabel: proj_Project..) bestaan meerdere elektrische verdeelkasten, zeg meterkasten of verdelers (tabel: 6verd_NENve….). Deze verdelers bestaan weer uit verschillende groepen (tabel: Groep_NENMeetstaat).
In de figuur ziet u de relatie tussen dezen (zie bijgevoegd doc).

Binnen een bestaande tabel “Groep_NENMeetstaat” wil ik records kopieren van eenzelfde Verdeler_ID. De laatste gelijknamige verdeler. Deze bepaal ik met volgende code:

Code:
LaatsteVerd_ID = DLast("Verdeler_ID", "6Verd_NENVerdelers", "Verd_Tagcode ='" & Me.Parent.Verd_TagCode & "' And Verdeler_ID <>" & Me.Parent.Verdeler_ID)

Binnen de tabel Verdelers was soortgelijke probleem. Dit heb ik geheel in VBA gedaan zonder Query’s. Echter dit werkte niet bij de Groep_NENMeetstaat niet

Hierbij dacht dit met een toevoegquery te doen. (zie bijgevoegd doc)
De query (het kopieren) wil ik uitvoeren als ik vanuit het formulier met de verdelers, van de gewenste verdeler, het subformulier open (knop) van de groepen als deze nog niet gevuld is.

Ik loop nu tegen twee problemen aan;
1) Hoe kan ik een variabele in de uit de VBA code in de criteria opnemen. (LaatsteVerd_ID) zodat de juiste records gekopieerd worden. Dit werkt als ik hier het verdeler_ID, handmatig, invul.
2) Het verdeler_ID van deze records moet het zelfde Verdeler_ID krijgen als de gekozen Verdeler. (Dus een ander nummer als de gekopieerde Record)

Onderstaande code zoals ik die nu toepas bij het laden van het formulier.
Code:
Private Sub Form_Load()

    Dim LaatsteVerd_ID As Integer

'Controle of er een indentiek Groepnummer bestaat.
If Meet_Groepnummer = DLookup("Meet_Groepnummer", "Groep_NENMeetstaat", "Verdeler_ID = " & Me.Parent.Verdeler_ID) Then
'Opzoeken laatste identieke verdeler
LaatsteVerd_ID = DLast("Verdeler_ID", "6Verd_NENVerdelers", "Verd_Tagcode ='" & Me.Parent.Verd_TagCode & "' And `	Verdeler_ID <>" & Me.Parent.Verdeler_ID)
 'Functie voor het kopieren van alle groepen met gelijk Verdeler_ID
        DoCmd.OpenQuery "TVGqry-Groepen"
         
End If
End Sub

Verder heb ik geprobeerd de Query in VBA te zetten maar dit lukte niet. (foutmelding ‘verwacht instructie einde)

De query Code:
Code:
INSERT INTO Groep_NENMeetstaat ( Verdeler_ID, Meet_Groepnummer, Meet_GroepType )
SELECT Groep_NENMeetstaat.Verdeler_ID, Groep_NENMeetstaat.Meet_Groepnummer, Groep_NENMeetstaat.Meet_GroepType
FROM Proj_Projectgegevens INNER JOIN (6Verd_NENVerdelers INNER JOIN Groep_NENMeetstaat ON [6Verd_NENVerdelers].Verdeler_ID = Groep_NENMeetstaat.Verdeler_ID) ON Proj_Projectgegevens.Project_ID = [6Verd_NENVerdelers].Project_ID
WHERE (((Groep_NENMeetstaat.Verdeler_ID)=[LaatsteVerd_ID]));

Wie kan mij opweg helpen?

BVD
 

Bijlagen

Probleem 2 opgelost

Het kopieren van de records doe ik nu in drie stappen.
- m.v.b. een tabelmaakquerie kopieer ik de gewenste records in een aparte tabel.
- vervolgens pas ik het ...ID aan met een Bijwerkquery,
- Daarna voeg ik tijdelijke tabel toe aan de oorspronkelijke tabel met een Toevoegquery.

Rest alleen nog het probleem van de juiste criteria. Deze komt uit een keuzelijst of VBA variabele.
Onderstaand de code van de Tabelmaakquery waarbij voor de 'WHERE' nog steeds en probleem opleverd. Deze komt uit een keuzelijst. De query wordt gestart in de procedure van de keuzelijst, na bijwerken.
Code:
Private Sub Keuzelijst_6NEN_Verd_OphalenGegevens_AfterUpdate()
    Dim strSQL As String
    
'Documenten van andere record kopieren
'Aanmaken tijdelijke tabel met verdelers van gekozen Project_ID
        'DoCmd.SetWarnings False
        strSQL = "SELECT [6Verd_NENVerdelers].Project_ID, [6Verd_NENVerdelers].Verd_TagCode, [6Verd_NENVerdelers].[Verd_ Omschrijving] INTO tmptbl_Verdelers "
        strSQL = strSQL & "FROM 6Verd_NENVerdelers "
        strSQL = strSQL & "WHERE ((([6Verd_NENVerdelers].Project_ID)=[Forms]![Tabform_6NEN_Verdelers]![Keuzelijst_6NEN_Verd_OphalenGegevens]));"
        DoCmd.RunSQL (strSQL)
'Nog toe te voegen        
        'DoCmd.OpenQuery "???????"       'Tijdelijke tabel, ...ID aanpassen
        'DoCmd.OpenQuery "???????"       'Voeg tijdelijke tabel toe aan tabel 
        'DoCmd.RunSQL "DROP TABLE tmptbl_Verdelers "     'Verwijder tijdelijke tabel
        DoCmd.SetWarnings True

End Sub
Er verschijnt telkens een Pop-up scherm met de vraag voor de waarde van;
< [Forms]![Tabform_6NEN_Verdelers]![Keuzelijst_6NEN_Verd_OphalenGegevens]>
Als ik hier manueel de juiste waarde invul functioneerd alles.

Wat gaat hier fout?
 
Dat is volkomen verklaarbaar: je bouwt nu een sql string op, die in zijn geheel wordt uitgevoerd. Echter, je wilt een waarde uit het formulier gebruiken. Die moet je dus uitlezen en in de query zetten, niet de verwijzing naar het formulier. Dat doe je zo:
Code:
"WHERE (Project_ID=" & Me.[Keuzelijst_6NEN_Verd_OphalenGegevens] & ");"
 
Probleem 1 ook opgelost

Bij gebruik van een keuzelijst, in VBA;

'Tabelaanmaakquery
Code:
        strSQL = "SELECT [6Verd_NENVerdelers].Project_ID, [6Verd_NENVerdelers].Verd_TagCode, [6Verd_NENVerdelers].[Verd_ Omschrijving] INTO tmptbl_Verdelers "
        strSQL = strSQL & "FROM 6Verd_NENVerdelers "
        strSQL = strSQL & "[COLOR="darkgreen"]WHERE (([6Verd_NENVerdelers].Project_ID)=Keuzelijst_6NEN_Verd_OphalenGegevens);"[/COLOR]
        DoCmd.RunSQL (strSQL)
'Bijwerkquery, ...ID aanpassen, waarbij Project_ID een variabele is.
Code:
[COLOR="darkgreen"]        strSQL = "UPDATE tmptbl_Verdelers SET tmptbl_Verdelers.Project_ID = '" & Project_ID & "'; "[/COLOR]        
        DoCmd.RunSQL (strSQL)
 
THX Michael,
We hebben elkaar gekruisd. Probleem opgelost.:thumb:

Waar zit de knop??? :cool:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan