timestamp in formulier achterlaten als macro gedraaid heeft.

Status
Niet open voor verdere reacties.

mweiland

Nieuwe gebruiker
Lid geworden
25 mrt 2013
Berichten
4
Ik heb een macro(vba) gemaakt die in een Acccess database tabellen importeert, relaties weghaalt, tabellen hernoemt, weggooit en relaties weer opbouwt.
Waar ik niet uitkom is een stukje vba dat in een textbox, in het formulier een timestamp achterlaat als het script is uitgevoerd.
Tekst2 = Now() of zoiets. Ik heb niks werkends kunnen vinden, wie heeft er een tip?

mijn dank,
Martin
 
Ik voeg een Tekstvak in het formulier in. (Tekst55)
en de regel: Me.Tekst55 = Now() aan het script.
Dat eindigt dan met:
"Fout 2467 tijdens uitvoering.
De expressie verwijst naar een object dat is gesloten of dat niet bestaat."
Wat gaat er mis?
Het script sluit het formulier. verwijdert alle relaties. Importeert nieuwe tabellen (die een 1 achter de naam krijgen). Ik hernoem de oude tabellen met een # voor de naam. Ik hernoem de nieuwe tabellen zonder de 1. en verwijder de oude tabellen. Dan creer ik de relaties tussen de nieuwe tabellen. (als je dat hernoemen handmatig doet blijven wel de relaties behouden) Dan open ik het formulier weer en volgt "Me.Tekst55 = Now()"
Tekstvak is niet vergrendeld.
De msgbox hieronder geeft keurig een timstamp weer maar ik wil dat vastleggen zodat een volgende gebruiker ziet hoe oud de data is.
"MsgBox obj.DateModified"

script:

Private Sub Importeer()

DoCmd.Close acForm, "switchboard", acSaveYes 'formulier Switchboard wordt afgesloten, wegens koppelingen met tabellen die vervangen worden.

DeleteAllRelationships 'alle koppelingen tussen bestaande tabellen worden verwijderd.

'tabellen worden opgehaald uit MAWE database, de nieuwe versies krijgen een 1 achter de naam.
DoCmd.TransferDatabase acImport, "Microsoft Access", "G:\MedGen\Klinische_Genetica\Maatschappelijk_Werk\H MaatschappelijkWerk_Dev\mawe.accdb", acTable, "NAW_New", "NAW_New", False
DoCmd.TransferDatabase acImport, "Microsoft Access", "G:\MedGen\Klinische_Genetica\Maatschappelijk_Werk\H MaatschappelijkWerk_Dev\mawe.accdb", acTable, "MAWE", "MAWE", False
DoCmd.TransferDatabase acImport, "Microsoft Access", "G:\MedGen\Klinische_Genetica\Maatschappelijk_Werk\H MaatschappelijkWerk_Dev\mawe.accdb", acTable, "contact", "contact", False

'de oorspronkelijke tabellen hernoemen met # voor de naam.
DoCmd.Rename "#NAW_New", acTable, "NAW_New"
DoCmd.Rename "#MAWE", acTable, "MAWE"
DoCmd.Rename "#contact", acTable, "contact"

'De nieuwe tabellen de naam van de oude tabellen geven.
DoCmd.Rename "NAW_New", acTable, "NAW_New1"
DoCmd.Rename "MAWE", acTable, "MAWE1"
DoCmd.Rename "contact", acTable, "contact1"

'de oude tabellen weggooien
CurrentDb.TableDefs.Delete ("#NAW_New")
CurrentDb.TableDefs.Delete ("#MAWE")
CurrentDb.TableDefs.Delete ("#contact")

'de relaties opnieuw aanmaken tussen de vernieuwde tabellen
CreateRelationship1
CreateRelationship2

DoCmd.OpenForm "Switchboard" 'formulier weer openen.

Me.Tekst55 = Now()

'later te ontwikkelen timestamp op formulier
Dim obj As AccessObject, dbs As Object
'Dim Datum As Date
Set dbs = Application.CurrentData
Set obj = dbs.AllTables("MAWE")
Debug.Print obj.Name; " "; obj.DateModified; " "; obj.DateCreated
'MsgBox obj.DateModified

End Sub
 
Laatst bewerkt:
Kun je beginnen met de code op te maken met de CODE knop? Zo is het een lap tekst waar ik al moe van word alleen al van het kijken :)
 
als je je formulier sluit ben je je waarde 'kwijt'. Je zal ze dus moeten vastleggen, als het voor even is kan dat in een variabele maar met al het sluiten en nieuwe tabellen (kan je niet aanvullen ipv hernoemen en deleten) zou ik de datum wegschrijven in een tabel. deze tabel heeft dan dus maar 1 veld de laatste datum.
 
Jammer dat de code nog niet netjes is opgemaakt, maar misschien is TS net zo moe geworden van het typen als ik van het lezen ;). De procedure an sich is al erg ongelukkig gemaakt: waarom éérst de tabellen importeren, waardoor ze een foutieve naam krijgen, daarna de oude tabellen hernoemen, de nieuwe tabellen de oorspronkelijke naam geven en dan de hernoemde oude tabellen weggooien? Ik zou zeggen: tabellen weggooien, opnieuw importeren en klaar. Maar daarnaast is de vraag, waar vandaan de procedure wordt opgestart. Geen knop op een formulier, want het is geen Click event. Dus wellicht een extra procedure in een aparte module? En als dat zo is, werkt ME.Tekst55 natuurlijk nooit, want in een module kun je geen ME gebruiken, dat werkt alleen op een formulier/rapport. Bovendien: als het een niet-gebonden tekstvak is, dan schiet je er inderdaad zoals jwaque zegt weinig mee op tenzij je die waarde alsnog opslaat in een tabel. En dan kun je dat net zo goed gelijk doen. Bovendien is het dan veel slimmer op het tekstvak te vullen bij de gebeurtenis <Bij openen> van dat formulier. Kun je ook nog eens ME gebruiken :).
 
Dank,
hoe werkt dat? die code knop?
Ik begrijp dat mijn methode omslachtig is. Het werkte... Maar ga ik naar kijken. Het click event roept deze module inderdaaad aan.

Wat ik wil is de DateModified vastleggen op het formulier, zodat een volgende gebruiker ziet hoe up to date de informatie is. In de meeste gevallen is het een alleen-lezen gebruiker.

Kan een "gebeurtenis bij openen" de DateModified van een tabel in een textbox zetten?
Hoe Leg ik die waarde vast in een tabel?
Dank,
Martin
 
Dat zijn een hoop vragen :).
1. De CODE knop vind je als je berichten maakt via de knop <Ga geavanceerd>. Ziet er zo uit: ( # ). Wat ik meestal doe (en een hoop anderen) is de tag erbij typen. De spaties in tussen de rechte haken moet je niet overnemen, want anders werkt de tag natuurlijk als tag, en zie je de getypte tekst niet meer:
[ code] Hier staat je code [ /code]
En dan ziet code er dus netjes uit.
2. Private Sub Importeer() staat dus in een aparte module, en je roept hem vanaf een formulier aan? Dan gaat ME inderdaad niet werken.
Wat ik wil is de DateModified vastleggen op het formulier, zodat een volgende gebruiker ziet hoe up to date de informatie is.
3. Dat kan dus niet; een formulier koppel je ofwel aan een tabel/query (afhankelijk formulier) ofwel niet (niet-afhankelijk formulier). Op een afhankelijk formulier kun je uiteraard ook niet-afhankelijke objecten zetten zoals losse tekstvakken. Maar niet-afhankelijke objecten op een (niet-afhankelijk) formulier zijn bij openen altijd leeg. Tenzij je ze vult tijdens het openen van het formulier.
4. Ja. Met de code die je nu gebruikt.
5. Met een kleine procedure die je laat uitvoeren op het moment dat je 'm nodig hebt. Een voorbeeldje:
Code:
    'Handeling loggen
    sQuery = "INSERT INTO tLogin(UserID,Datum,Tijd,Actie)" & vbCrLf
    sQuery = sQuery & "VALUES('" & FnUser & "', CDate(" & CDbl(Date) & "), #" _
        & Format(Now, "HH:mm") & "#, 'Record bijgewerkt" & "')"
    DoCmd.SetWarnings False
    CurrentDb.Execute sQuery, dbFailOnError
    DoCmd.SetWarnings True
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan