[MSSQL/Access] Nieuwe records vreemd toegevoegd in SQL

Pagina: 1
Acties:

  • Skins
  • Registratie: November 2003
  • Laatst online: 30-07 10:27

Skins

CCIEx3 #21946, JNCIE-M #851

Topicstarter
Sinds een tijdje heb ik hier een probleem met een MS SQL back-end en MS Access front-end.
De SQL tabellen zijn gekoppeld in Access.

Ik heb dit probleem slechts in 1 tabel en in een back-up van een aantal dagen geleden kwam het probleem nog niet voor, echter is het geen optie deze terug te draaien, omdat er teveel nieuwe data is ingevoerd wat veel tijd zal kosten om opnieuw te genereren.

Het blijkt een soort bug van Access te zijn, maar als ik de omschrijving mag geloven van een artikel wat ik op Google vond had ik dit probleem al met alle tabellen moeten hebben.

Ik heb een screen-capture filmpje gemaakt om het probleem te laten zien:
http://muronline.nl/accessproblem.wmv

Zoals te zien is in het filmpje wordt er een nieuw record toegevoegd (direct in de tabel). Zodra ik de cursor buiten het record plaats gaat Access het nieuwe record toevoegen in SQL en zal hem gaan updaten, omdat de Primary Key wordt toegevoegd, echter veranderd het complete record door een andere willekeurige uit de tabel. Als ik vervolgens dit venster sluit en opnieuw open staat het nieuwe record wel goed in de tabel.

Wat kan dit zijn en/of hoe is dit op te lossen?
Alvast heel erg bedankt

CCIE3 #21946 (Routing & Switching / Service Provider / Storage), JNCIE-M #851


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Volgens mij ligt dat aan de manier waarop je key wordt samengesteld; als dat gewoon een 'native' autonummering is ofzo gaat het goed maar als je er bijvoorbeeld een functie achter hangt (select max(veld) from sometable ofzo) dan krijg je dit verschijnsel bij mijn weten.

Is er toevallig iets veranderd in je datamodel sinds je dit probleem hebt?

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


  • Skins
  • Registratie: November 2003
  • Laatst online: 30-07 10:27

Skins

CCIEx3 #21946, JNCIE-M #851

Topicstarter
De datamodellen zijn identiek, dat heb ik regel voor regel gecontroleerd.
De primary key is een simpele identity

Het enigste wat achter de INSERT zit is een trigger, maar deze zit er al ongeveer 2 maanden in en deze doet ook nog steeds zijn werk zodra er een record wordt toegevoegd.

[ Voor 7% gewijzigd door Skins op 08-05-2007 14:57 ]

CCIE3 #21946 (Routing & Switching / Service Provider / Storage), JNCIE-M #851


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Skins schreef op dinsdag 08 mei 2007 @ 14:56:
De datamodellen zijn identiek, dat heb ik regel voor regel gecontroleerd.
Regel voor regel? Kun je dat uitleggen?
Skins schreef op dinsdag 08 mei 2007 @ 14:56:
De primary key is een simpele identity
En ook niet op een ander veld iets 'geks' hangen?
Skins schreef op dinsdag 08 mei 2007 @ 14:56:Het enigste wat achter de INSERT zit is een trigger, maar deze zit er al ongeveer 2 maanden in en deze doet ook nog steeds zijn werk zodra er een record wordt toegevoegd.
Kan dus prima aan deze trigger liggen. Haal die (voor de test) eens weg en kijk eens wat 'ie dan doet.

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


  • JJvG
  • Registratie: Juli 2003
  • Laatst online: 31-05 13:43
Ik heb het filmpje ook bekeken. Een paar vragen die ik had zijn:
- Hoe groot is je dataset in de tabel (hij toont iets van 50 records, maar ik vermoed dat je er een 20.000 records in hebt zitten)
- Kun je tracing op SQL Server aanzetten om te kijken welke SQL statement er worden uitgevoerd? Hiermee kun je kijken wat er wordt ge-insert (en wanneer) en wat er weer teruggegeven wordt. Misschien kun je dat hier ook posten?
- Trigger uitzetten kijken of het dan nog steeds een probleem is, misschien dat dat nog een aanwijzing oplevert?

Laat maar weten of je hier nog bruikbare informatie uit kunt halen.

  • Skins
  • Registratie: November 2003
  • Laatst online: 30-07 10:27

Skins

CCIEx3 #21946, JNCIE-M #851

Topicstarter
Ben weer iets verder gekomen.
Het bleek toch de trigger te zijn die voor problemen zorgt.

Na het inserten van het nieuwe record doet Access een SELECT @@IDENTITY, hij krijgt dan het ID van de record terug die door de trigger wordt toegevoegd in een andere database, dit ID komt terug in de tabel in access en deze vult dan keurig het bijbehorende record in.

@JJvG: - De dataset bestaat uit bijna 24000 records, de tabel achter de trigger ongeveer 500
- De tracing heb ik gebruikt om het gedrag van Access te bekijken

[ Voor 47% gewijzigd door Skins op 08-05-2007 22:54 ]

CCIE3 #21946 (Routing & Switching / Service Provider / Storage), JNCIE-M #851


  • Skins
  • Registratie: November 2003
  • Laatst online: 30-07 10:27

Skins

CCIEx3 #21946, JNCIE-M #851

Topicstarter
Het probleem is opgelost!
Dit is een bug in Access 2003 (heb het nog niet geprobeerd in 2007) door het gebruiken van een ongeschikte instructie (@@IDENTITY ipv SCOPE_IDENTITY() ).

De work-around voor deze bug wordt in het volgende artikel uitgelegd:
http://jagbarcelo.blogspo...dentity-fields-in-ms.html

CCIE3 #21946 (Routing & Switching / Service Provider / Storage), JNCIE-M #851


  • JJvG
  • Registratie: Juli 2003
  • Laatst online: 31-05 13:43
Blij dat het is opgelost.

Interessant artikel; is voor mij ook handig om als achtergrond kennis te hebben. Tnx voor de link!
Pagina: 1