[ACCESS] Audit trail/bij houden deleted rows in MS Access

Pagina: 1
Acties:
  • 254 views

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik zit met het volgende probleem. Ik ontwikkel een nieuw systeem wat voor een deel van dezelfde data gebruik maakt als een legacy systeem. Om dit goed te laten verlopen ontwikkel ik een synchronisatie module die bideirectioneel is. De situatie is alsvolgt:

1. het nieuwe systeem maakt gebruik van een sql server 2008 database en heeft op iedere table een history table die automatisch wordt gevuld dmv triggers (audit trail) hiermee kan de sync module precies zien wat er aan de nieuwe kant veranderd is.
2. het legacy systeem maakt gebruik van een ms access database en het systeem zelf houdt geen enkele wijzigingen in de database bij, op een datetime na. de db heeft een 2003 indeling en kant niet worden geupdate naar een nieuwere indeling.
3. de sync module checkt voor wijzigingen (create,update en delete) aan beide kanten en maakt de data aan weerszijde up to date. deze module heeft een eigen sql server 2008 database die koppeltabellen bevat voor de id's van de objecten van de legacy db en nieuwe db.

Voor create en update is er aan beide kanten geen probleem aangezien er in de nieuwe situatie een audit trail beschikbaar is en in de oude situatie een modify datetime in iedere table wordt bijgehouden. Echter voor de delete actions ontstaat er een probleem aan de legacy zijde omdat hier in de database niet wordt bijgehouden wat er verwijderd is. Aan de nieuwe zijde is ook het deleten geen probleem door de audit trail.

De eerste oplossing waar ik op kwam is om de id's van de koppeltabellen in de sync module te gaan vergelijken met de id's die in de tables van de legacy tables staan. wanneer er een id in de koppeltabel voorkomt maar niet in de legacy db dan is dit object dus verwijderd uit de legacy db. Dit werkt op zich perfect maar is natuurlijk verre van optimaal wanneer je een database hebt met miljoen plus records. 1 sync moment zou dan uren duren. Dus dit is uiteindelijk geen optie.

Ik ben toen verder gaan zoeken en kwam uit op een idee om triggers in de legacy db te bouwen zodat daar ook een audit trail zou ontstaan, ik zou me hier dan beperken tot 1 extra table waarin id's en tablename zou komen staan van verwijderde objecten. Maar dat kan dus niet in access!! Schijnbaar heeft access geen triggers en alle voorbeelden van VBA projecten om audit trails te maken werken alleen vanuit forms in access. En dat laatste wordt niet gebruikt, de legacy app is een delphi application die met datacomponenten gebruik maakt van een access db.

mijn vraag is dus eigenlijk heeft iemand een idee of dit toch wel kan? of een andere goede oplossing of idee om te weten te komen welke objecten er uit de legacy db zijn verwijderd. Er kunnen absoluut geen aanpassingen in de legacy app worden gemaakt.

Alle input is meer dan welkom :)

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Waarom vervang je de access-tabel niet door een link naar sql server ('linked table')? Dan is er ook geen synchronisatie meer nodig lijkt me zo. :p

Ways to work with SQL Server data in Access

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Volgens mij snap je zelf niet helemaal goed wat een linked table in Access is. Dat is namelijk een link vanuit Access naar bijvoorbeeld een SQL Server Database zodat je de data uit de SQL Server database ook kunt querien binnen Access. Dit is dus helaas absoluut geen oplossing voor mij, maar toch bedankt voor je input.

Verder is de synchronisatie altijd nodig, mijn post beschrijft duidelijk dat ik te maken heb met een legacy application en een nieuwe application. Datamodellen zullen natuurlijk verre van gelijk zijn..

Veder mijn excuses voor het verkeerd plaatsen van de thread..

Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Verwijderd schreef op woensdag 19 mei 2010 @ 15:39:
Volgens mij snap je zelf niet helemaal goed wat een linked table in Access is.
Sure. Het gaat toch over Jet?
Linking a table from an external database allows you to read data, update and add data (in most cases), and create queries that use the table, in the same way as you would with a table native to the database. With the Microsoft Jet database engine, you can create links to tables in Access databases as well as other data formats supported by Microsoft Jet's installable ISAM drivers (Excel, dBase, Paradox, Exchange/Outlook, Lotus WKS, Text, and HTML) and ODBC drivers.
Datamodellen zullen natuurlijk verre van gelijk zijn..
Queries/views zijn meestal volledig updateable, dus dit lijkt me geen probleem.

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
zucht nogmaals.. linking in access betekend dat je tables van een andere db in access kunt gebruiken niet andersom! lees mijn post nog maar eens zorgvuldig door...

Acties:
  • 0 Henk 'm!

  • Marko_J
  • Registratie: Maart 2010
  • Laatst online: 15-03-2024
Verwijderd schreef op dinsdag 18 mei 2010 @ 23:58:Ik ben toen verder gaan zoeken en kwam uit op een idee om triggers in de legacy db te bouwen zodat daar ook een audit trail zou ontstaan, ik zou me hier dan beperken tot 1 extra table waarin id's en tablename zou komen staan van verwijderde objecten. Maar dat kan dus niet in access!! Schijnbaar heeft access geen triggers en alle voorbeelden van VBA projecten om audit trails te maken werken alleen vanuit forms in access. En dat laatste wordt niet gebruikt, de legacy app is een delphi application die met datacomponenten gebruik maakt van een access db.

mijn vraag is dus eigenlijk heeft iemand een idee of dit toch wel kan? of een andere goede oplossing of idee om te weten te komen welke objecten er uit de legacy db zijn verwijderd. Er kunnen absoluut geen aanpassingen in de legacy app worden gemaakt.
Met die laatste zin wordt het wel heel moeilijk gemaakt. Al schrijf je eerder dat je wel triggers aan die database toegevoegd zou hebben, als dat mogelijk zou zijn, dus in beperkte mate zijn wijzigingen mogelijk? :)

Is het een optie om de data van de legacy database te verhuizen naar een SQL-server database? Dan heb je wél triggers. De Delphi applicatie kan gewoon gebruik blijven maken van dezelfde Access MDB, alleen worden de tabellen daarvan dan gekoppeld naar de nieuwe SQL server tabellen, met ODBC bijvoorbeeld. Voor de werking maakt dat geen enkel verschil. Dan heb je wat je wil; meer controle en mogelijkheden vanuit SQL server, en de delphi applicatie werkt nog steeds onveranderd.

Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Verwijderd schreef op zondag 23 mei 2010 @ 13:18:
zucht nogmaals.. linking in access betekend dat je tables van een andere db in access kunt gebruiken niet andersom! lees mijn post nog maar eens zorgvuldig door...
Misschien is het een idee om niet het antwoord in twijfel te trekken, maar het zelf eens beter te bestuderen... Jet ondersteund zelf geen triggers, maar ondersteund wel links naar databases die triggers ondersteunen. Sowieso gaat jouw vraag niet over acces, maar over Jet (of je hebt wel een hele bijzondere app te pakken). Dus je kan de data migreren naar zeg SQL Server en daar de triggers laten werken. Het is ook mogelijk dat je de connectionstring die die delphi-app gebruikt kan veranderen, dan kun je jet/.mdb misschien helemaal achterwege laten. Waarschijnlijk maken ze gewoon gebruik van TADOConnection, en dat kan ook gewoon werken met een andere db (hier is dat even afhankelijk van hoe Jet-specifiek de boel geschreven is).

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
oke dit wordt te zinloos aangezien je nog altijd niet mijn eerste post fatsoenlijk hebt gelezen.. Je hebt totaal geen idee wat mijn probleem is. Sluit deze thread maar ik heb al een oplossing bedacht buiten de legacy applicatie om..

Acties:
  • 0 Henk 'm!

  • Marko_J
  • Registratie: Maart 2010
  • Laatst online: 15-03-2024
Ja dat heb je nu een aantal keer gezegd, echter steeds zonder de situatie verder toe te lichten. Je vraagt om feedback en suggesties, maar dan moet je wel uitleggen waarom iets niet kan en/of de situatie (nog) duidelijker omschrijven. Want kennelijk is het ons niet duidelijk genoeg. Met alleen maar zaniken dat men je niet snapt, komen we geen steek verder ;)

Ik zie het hele probleem met de aangedragen oplossing namelijk niet. Zowel pedorus als ik suggereren om de data van de legacy database over te hevelen naar sql server. Om die delphi app happy te houden, is het een kwestie van tabellen daar naartoe linken, zodat die normaal kan blijven werken. Terwijl die app niet beter weet dan dat hij met z'n vertrouwde MDB werkt, wordt de data ondertussen rechtstreeks weggeschreven en opgehaald in SQL server. En dáár kan je je vervolgens uitleven met triggers. En dat is waar je om vroeg. (waar die triggers uiteindelijk voor bedoeld zijn, daar heb ik me niet in verdiept)

Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op maandag 24 mei 2010 @ 15:18:
oke dit wordt te zinloos aangezien je nog altijd niet mijn eerste post fatsoenlijk hebt gelezen.. Je hebt totaal geen idee wat mijn probleem is. Sluit deze thread maar ik heb al een oplossing bedacht buiten de legacy applicatie om..
deze draad is inderdaad zinloos geworden aangezien jij blijkbaar weigert te lezen wat hulpvaardige gotters voorstellen :(
Pagina: 1

Dit topic is gesloten.