Records creeren in VBA

Status
Niet open voor verdere reacties.

john64

Gebruiker
Lid geworden
12 jun 2011
Berichten
268
Goedemorgen/nacht
Dmv van een formulier wordt een Record toegevoegd aan tabel tblDiploma. Deze tabel heeft nog een aantal relaties met andere tabellen om de juiste gegevens bij elkaar te zoeken en te verwerken in record Diploma. Dit gaat allemaal prima.

Aan tblDiploma hangt een andere tabel (tblDatumCertificeren). Nu probeer ik in Visual Basic aan dit nieuwe Diploma-record een instantie te koppelen van tblDatumCertificeren.
Deze laatste tabel staat niet in het formulier voor aanmaken van Diploma maar moet "onderhuids" gevuld worden. Ik wil namelijk een historie aanleggen van data waarop het initiële diploma is behaald, en alle hercertificeringen.
tblDiploma ziet er als volgt uit (* geeft de sleutelvelden weer):
*PersoonID
*RichtingID
*OnderdeelID

tblDatumCertificeren ziet er als volgt uit (. zijn de vreemde sleutels uit tblDiploma):
*DatumCertificerenID
.PersoonID
.RichtingID
.OnderdeelID
Datum
TypeCertificeringID (gekoppeld aan tlkpType: 1=initeel, 2=her)

Er is dus een 1-op-veel relatie tussen tblDiploma en tblDatumCertificeren

Bij aanmaken moet er dus een record van type 1 komen. Bij de opdracht Hercertificering moet aan het zelfde Diploma-record een DatumCertificeren komen met type 2. Op deze manier wordt de historie opgebouwd. De tabel tblDatumCertificeren wordt dus niet door gebruiker gevuld, maar alleen in VBA. In ander formulier wil ik wel de historie kunnen laten zien.

Iemand een idee ?

mvg
John
 
Laatst bewerkt:
Maak toevoegqueries voor de twee varianten, met voorbeeld data. Kopieer de SQL van de twee queries, en zet die om naar VBA code. Voorbeeldje:
Een bijwerkquery ziet er bijvoorbeeld zo uit:
Code:
UPDATE tblDragListBox SET [Project 1] = False, [Project 2] = False, [Project 3] = False
In VBA wijs je de sql toe aan een variabele, en voer je de code uit:
Code:
strSQL = "UPDATE tblDragListBox SET [Project 1] = False, [Project 2] = False, [Project 3] = False"
CurrentDb.Execute strSQL
 
Goedemorgen Octafish,
Super, ook nog laat op, :D

In jouw voorbeeld: Project 1/2/3, zijn dat velden in tbLDraglistBox ?
In mijn geval zou ik dus voor PersoonID, RichtingID en OnderdeelID variabelen moeten gebruiken, en dus niet tussen "" zetten ?


We gaan het proberen, je hoort van me

thnx
John
 
Was ik weer

'Update DatumCertificeren object
strSQL = "UPDATE tblDatumCertificeren SET [PersoonID] = " & Me.CertificaathouderID & _
", [RichtingID] = " & Me.RichtingID & _
", [OnderdeelID] = " & Me.OnderdeelID & _
", [Datum] = " & DatumEersteUitgifte & _
", [TypeCertificeringID] = 1"
CurrentDb.Execute strSQL

levert volgende statement op in het Lokale Variabelen scherm van VBA
strSQL : "UPDATE tblDatumCertificeren SET [PersoonID] = 1, [RichtingID ] = 1, [OnderdeelID ] = 1, [Datum] = 31-12-2011, [TypeCertificeringID] = 1" : Variant/String

Er wordt echter geen instantie aangemaakt van DatumCertificeren

Mis ik iets ??

mvg
John
 
Ben vast aan het oefenen voor morgen :D
Mijn voorbeeldje werkt inderdaad op Ja/Nee veldjes. In jouw geval moet je de waarde False vervangen door de veldnaam van je formulier.
Zoals ik al zei: maak eerst via de query builder een query die de basis layout bevat, en vervang dan de waarden daaruit door je formuliernamen. Om bij mijn voorbeeldje te blijven: met onderstaande code doe ik ongeveer hetzelfde als in het eerdere voorbeeld, alleen worden de veldwaarden en gegevens uit een formulier gehaald (op een beetje ingewikkelde manier, maar daar gaat het hier niet om)

Code:
    If Not DropCtrl.Tag = "" Then
        SQL = "UPDATE tblDragListBox SET "
        'Check if Draglist Tag is empty; in which case only 2 fields must be updated
        If Not DragCtrl.Tag = "" Then
            'Dragfield and Dropfield values are reversed, so False --> True and True --> False
            SQL = SQL & "[" & DragCtrl.Tag & "] = Not [" & DragCtrl.Tag & "], [" & DropCtrl.Tag & "] = Not [" & DropCtrl.Tag & "]"
        Else
            'Dropfield value is reversed, so False --> True and True --> False
            SQL = SQL & "[" & DropCtrl.Tag & "]= Not [" & DropCtrl.Tag & "]"
        End If
    Else
        'Dragfield value is reversed, so False --> True and True --> False
        SQL = "UPDATE tblDragListBox SET [" & DragCtrl.Tag & "]= Not [" & DragCtrl.Tag & "]"
    End If
 
Ik gebruik onderstaande code om e.e.a. voor elkaar te krijgen
Code:
strSQL = "INSERT INTO tblDatumCertificeren ( PersoonID, RichtingID, OnderdeelID, Datum, TypeCertificeringID ) " & _
            "SELECT " & Me.PersoonID & ", " & Me.RichtingID & ", " & Me.OnderdeelID & _
            ", " & DatumEersteUitgifte & ", 1"
CurrentDb.Execute strSQL

In het lokale variabelen venster komt te staan:
Code:
  : strSQL : "INSERT INTO tblDatumCertificeren ( PersoonID, RichtingID, OnderdeelID, Datum, TypeCertificeringID ) SELECT 292, 2, 9, 31-12-2011, 2" : Variant/String

Dit is precies wat ik verwacht, omdat dat de gegevens zijn die ik op mijn formulier heb ingevuld.
Na uitvoeren van
Code:
CurrentDb.Execute strSQL
staat er in de database in de tblDatumCertificeren, resp.
7 (unieke identifier), 292, 2, 9, 17-07-1894, 2.
Alle waarden kloppen, behalve datum ???? Hoe kan dit ?

mvg
John

en voor een ieder een prettige jaarwisseling gewenst
 
Laatst bewerkt:
Je datum is geen datum, maar een getal (om precies te zijn: een berekening). Je moet datums altijd opmaken als een datum voordat je hem importeert met een SQL string. Daarbij heb je ook nog eens het probleem dat een Nederlandse datum een andere opmaak heeft dan met de opdracht wordt uitgevoerd (Amerikaans namelijk) zodat maanden en dagen soms worden omgedraaid. 7-9-2011 in Nederland wordt dan vertaald naar 9-7-2011. Dus die 'vertaalslag' moet je ook nog meenemen in het commando. Ik doe dat daarom vaak zo:

Code:
strSQL = "INSERT INTO tblDatumCertificeren ( PersoonID, RichtingID, OnderdeelID, Datum, TypeCertificeringID ) " & _
     "VALUES(" & Me.PersoonID & ", " & Me.RichtingID & ", " & Me.OnderdeelID & ", CDate(" & CDbl(DatumEersteUitgifte) & "), 1)"
 
Een hele goede morgen, deze mooie morgen.

Het jaar is goed begonnen, weer een probleem opgelost.
Deze suggestie werkt uitstekend.

Op naar de volgende uitdagingen.

mvg
John
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan