Access <> SQL fout melding na filter

Status
Niet open voor verdere reacties.

RobertJB66

Gebruiker
Lid geworden
2 feb 2022
Berichten
132
Form leden.

Ik heb een Access app dit via ODBC een verbinding maakt met een SQL server.

Zolang er door een andere app geen data wordt toegevoegd aan de SQL ken ik in mijn Access app gewoon data filteren.
Echter zodra een andere app data toevoegd aan de SQL DB dan krijg ik een fout melding in access zodra ik iets meer wil filteren.

The data has been changed
Anaother user edited this record and saved the changes before you attempted to save your changes
Re-edit the record.


De melding krijg ik ook als ik van table view naar grafiek view ga.
De tabel en de grafiek staan beide op een andere Tab maar de data van beide is het zelfde.

Ik kan natuurlijk mijn app delen maar dan moet ik de SQL importeren en dan doet het probleem zich niet voor:eek:.

Heeft iemand een suggestie?
 
Dank je wel.

Ik ga hier naar kijken.

Wat ik bedoel als ik mijn app deel met de ODBC verbinding dan kunnen jullie er weining tot niets mee omdat de achter liggen SQL tabellen er niet zijn.
Bovendien als ik wel de SQL tabellen mee lever dan updaten niet dus zal het probleem zich bij jullie niet voordoen lijkt mij.
 
Om een SQL database te posten:
-maak een nieuwe database op SQL server met een 'light versie' (alleen testdata zonder GDPR gevoelige gegevens) van de nodige tabellen,
- maak daar een back-up van,
- zip de BU file en stuur deze door.
Best ook je SQL versie en de naam van de database meegeven.
 
Ik heb even wat meer onderzoek gedaan.

Als ik de applicatie uitzet die data in de SQL database schrijft uitzet komt de melding niet voor.
Zodra ik hem aanzet dan heb ik nagenoeg direct de melding.

Dit bevestigt dat de applicatie die de data van de systemen ophaalt er voor zorgt dat access de foutmelding geeft :D

Mijn app hoeft alleen te lezen niet te schijven in SQL.
In mijn ODBC heb ik het ook zo aanstaan dat deze op alleen lezen staat.

Wat wordt met het onderstaande bedoelt?
Als je alleen wil lezen kan je op de SQL server read uncommitted werken. https://learn.microsoft.com/en-us/sq...l-server-ver16.

Is dit iets dat ik in SQL moet instellen of moet ik dit in mijn access code opnemen
:eek::eek:

Ik heb het bestand met de data local bijgesloten. Als er wat in de VBA code moet gebeuren misschien kan iemand het hier als voorbeeld in geven.
Het form waar de fout optreed is in frmEECSelectie. met de locale data komt het probleem niet voor.
Als er een voorbeeld gegeven kan worden dan graag
:d:d
 

Bijlagen

  • TLE V0.f.accdb.zip
    669,6 KB · Weergaven: 10
Laatst bewerkt:
Hoi Robert,

Als de foutmelding uit access komt kan het misschien zijn dat je er een bit veld in de dataset zit? In SQL server kan die leeg zijn (NULL), en daar kan access niet goed weg mee. Om dit op te lossen kan je alle lege waarden in dit veld op 0 zetten (SQL expressie: update [MyTable] set [MyField]= 0 where [MyField] is null, en op SQL server can je dan 0 als default waarde zetten voor dat veld.
Meer info https://www.isladogs.co.uk/write-conflict-errors/index.html.

Wat readuncommitted betreft: dat is een isolatie level voor transacties in SQL server. Op SQL server kan je per transactie instellen hoe deze met locking moet omgaan. Hoe hoger het level, hoe meer locks worden vastgehouden.
Het laagste level Readuncommitted negeert alle locks en leest zelfs gegevens die door andere transacties met een update lock worden vastgehouden.
Het hoogste level SERIALIZABLE legt locks op de geselecteerde records en laat zelfs niet toe dat er nieuwe records worden toegevoegd die binnen de geselecteerde serie zouden vallen.

Syntax:
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
dit plaats je aan het begin van de transactie

Je kan ook je SQL statement opbouwen als
Select a, b, c from [MyTable] with (nolock)
Dan worden geen locks gelegd door dit statements. Dit heeft natuurlijk geen zin bij updates of deletes.
 
Hi NoellaG,

Kan jij aangeven wat ik hier fout doe in de VBA code voor dat ik de SQL tabellen gaan lopen aanpassen.

Door "with (nolock)" er achter te zetten krijg ik bij het laen een fout melding. Ik heb het natuurlijk niet goe dgedaan:confused:


If sFilter = "" Then
Me.Grafiek1.RowSource = "SELECT Gemm,REFW, DatumTijd FROM EECQChart with (nolock)"
Else
Me.Grafiek1.RowSource = "SELECT Gemm, REFW, DatumTijd FROM EECQChart WHERE " & sFilter & " with (nolock)"
End If


Ik neem even aan dat ik bij de onderstaande regel dit ook moet toevoegen?

Set rs = CurrentDb.OpenRecordset("SELECT DISTINCT Locatie FROM JMDQ WHERE " & sFilter)
 
Ik vermoed dat je nolock in Access wil gebruiken. Dat zijn echter instructies die je alleen op SQL server kan gebruiken. Dus moet je een pasthrough query gebruiken. Je kan ook een procedure met parameters op SQL server schrijven die een recorset teruggeeft als output parameter en die dan vanuit access aanroepen
 
NoellaG,

Zodat ik het goed begrijp.

Als ik de https://www.youtube.com/watch?v=JCeEBb3mR7E volg dan lijkt het erop dat ik de tabellen die ik nu met een ODBC gelinkt heb moet laten varen en dat de boel om gezet moet worden naar een Pass-through.
Als ik het dan goed begrijp, is het niet Access die de Query doet, maar deze gebeurt dan op de SQL server.

De query's die ik nu al heb kan ik die hergebruiken of hoe moet ik dit zien.
Mijn query's zorgen er voor dat data uit diverse tabellen gekoppeld worden en daarop gefilterd wordt.
Is het b.v. mogelijk om iedere tabel als een pass-through query te doen en dan de bestaande query's naar deze pass-through query te verwijzen.

Of is dit juist net de bedoeling.

Capture.JPG

Moet ik dan volgen wat wordt weergegeven in de onderstaande link?
https://support.microsoft.com/nl-nl...ked_Table_Manager_(Access_voor_Microsoft_365)
 
1- Voor je iets anders doet: check als er bit velden (ja/nee velden) in je tabellen zitten en zorg ervoor dat deze niet leeg (kunnen) zijn. Misschien is je probleem daar al mee opgelost. Het is een gekend probleem dat access moeite heeft met SQL bit velden. zie ook de link die ik je doorstuurde.
2- de tabellen moet je laten. Passthrough query is een type query, dus het zijn eerder je queries en niet de tabellen die je moet herbekijken. Passthrough queries test je best eerst uit in de management studio voor je ze in de Access query definitie plakt.
3- de queries die de gegevens uit verschillende SQL tabellen combineren kan je beter vervangen door één view op SQL server. Als het veel gegevens betreft kan je ook een idexed view aanmaken, afhankelijk van je rechten op de SQL server. Dit kan je best in de management studio van SQL server doen. Een gelijkaardige oplossing is het gebruiken van SQL procedures, afhankelijk van je kennis van T-SQL.
 
Dank je wel.

Ik denk dat het geen NULL probleem is.

Als ik de tool die data in de SL stopt uitzet kan ik filteren in ACCESS tot ik een ons weeg zonder een fout melding. Zodra ik de tool weer aanzet dan is het naar 1 klik weer een probleem.

Ik ga eens naar de ander twee punten die jij heb aangegeven kijken.:thumb:
 
Ik heb er uiteindelijk voor gekozen om van de tabellen een passtrough query te maken.
De Queries in Access heb ik vervolgens gelinkt naar deze passtrough Queries. ip.v. de gelinkte tabellen.
Het probleem is nu over. Is dit een verstandige methode of kleven hier andere problemen aan?
 
Als het werkt een goede manier. Maar als je toch de gegevens via pass-through queries ophaalt is het een beetje gek om eerst de complete tabellen naar Access over te halen en daar dan queries op te baseren die daar een gefilterde set uithalen. Kan je dan niet vlugger gewoon alleen de nodige gegevens rechtstreeks met passtrough queries ophalen en de tabellen weglaten? Kwestie van niet eerst alle gegevens over het netwerk te sleuren en dan pas te filtreren en combineren.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan