“Bewerking moet een updatebare query gebruiken”-fout in MS Access

Ik krijg een foutmelding: “Bewerking moet een updatebare query gebruiken” wanneer ik mijn SQL probeer uit te voeren. Voor zover ik weet, gebeurt dit wanneer joins worden gebruikt in update/verwijder-query’s in MS Access. Ik ben echter een beetje in de war omdat ik een andere vraag heb die bijna identiek is in mijn database en die prima werkt.

Dit is mijn lastige vraag:

UPDATE [GS] INNER JOIN [Views] ON 
    ([Views].Hostname = [GS].Hostname) 
    AND ([GS].APPID = [Views].APPID) 
    SET 
        [GS].APPID = [Views].APPID, 
        [GS].[Name] = [Views].[Name], 
        [GS].Hostname = [Views].Hostname, 
        [GS].[Date] = [Views].[Date], 
        [GS].[Unit] = [Views].[Unit], 
        [GS].[Owner] = [Views].[Owner];

Zoals ik al eerder zei, ben ik in de war omdat ik een andere soortgelijke vraag heb, die perfect werkt. Dit is die vraag:

UPDATE [Views] INNER JOIN [GS] ON 
[Views].APPID = [GS].APPID 
SET 
    [GS].APPID = [Views].APPID, 
    [GS].[Name] = [Views].[Name], 
    [GS].[Criticial?] = [Views].[Criticial?], 
    [GS].[Unit] = [Views].[Unit], 
    [GS].[Owner] = [Views].[Owner];

Wat is er mis met mijn eerste vraag? Waarom werkt de tweede zoekopdracht als de eerste dat niet doet?


Antwoord 1, autoriteit 100%

Er is geen fout in de code, maar de fout wordt veroorzaakt door het volgende:

- Please check whether you have given Read-write permission to MS-Access database file.
 - The Database file where it is stored (say in Folder1) is read-only..? 

stel dat u de database (MS-Access-bestand) in de alleen-lezen map hebt opgeslagen, terwijl u uw toepassing uitvoert, wordt de verbinding niet geforceerd volledig geopend. Wijzig daarom de bestandsmachtiging / de mapmachtiging die erin zit, zoals in C:\Program filesalle bijna alle c-schijfbestanden zijn ingesteld op alleen-lezendus het wijzigen van deze machtiging lost dit probleem op.


Antwoord 2, autoriteit 92%

Of dit antwoord universeel waar is of niet, ik weet het niet, maar ik heb dit opgelost door mijn vraag iets te wijzigen.

In plaats van een selectiequery aan een tabel toe te voegen en te verwerken, heb ik de selectiequery gewijzigd om een tijdelijke tabel te maken. Ik heb toen die tijdelijke tafel gebruikt voor de echte tafel en het werkte allemaal perfect.


Antwoord 3, autoriteit 79%

Ik had dezelfde fout toen ik de gekoppelde tabel probeerde bij te werken.

Het probleem was dat de gekoppelde tabel geen PRIMARY KEY had.

Na het toevoegen van een primaire sleutelbeperking aan de databasezijde en het opnieuw koppelen van deze tabel aan het toegangsprobleem was het probleem opgelost.

Ik hoop dat het iemand zal helpen.


Antwoord 4, autoriteit 67%

Ik had precies hetzelfde probleem, en ik kan me niet herinneren hoe ik deze oplossing zo leuk vond, maar het toevoegen van DISTINCTROWloste het probleem op.

In uw code ziet het er als volgt uit:

UPDATE DISTINCTROW [GS] INNER JOIN [Views] ON <- the only change is here
    ([Views].Hostname = [GS].Hostname) 
    AND ([GS].APPID = [Views].APPID) 
 ...

Ik weet niet zeker waarom dit werkt, maar voor mij deed het precies wat ik nodig had.


Antwoord 5, autoriteit 12%

toestemming instellen op applicatiemap los dit probleem met mij op

Om deze machtiging in te stellen, klikt u met de rechtermuisknop op de map App_Data (of in een andere map waarin u het bestand hebt geplaatst) en selecteert u Eigenschappen. Zoek naar het tabblad Beveiliging. Als u het niet kunt zien, gaat u naar Deze computer, klikt u op Extra en kiest u Mapopties…. en klikt u vervolgens op het tabblad Weergave. Scroll naar beneden en verwijder het vinkje bij “Gebruik eenvoudig delen van bestanden (aanbevolen)”. Terug naar het tabblad Beveiliging, moet u het relevante account toevoegen aan het vak Groeps- of Gebruikersnamen. Klik op Toevoegen…. klik vervolgens op Geavanceerd en vervolgens op Nu zoeken. Het juiste account moet worden vermeld. Dubbelklik erop om het toe te voegen aan het vak Groeps- of Gebruikersnamen en vink vervolgens de optie Wijzigen in de machtigingen aan. Dat is het. Je bent klaar.


Antwoord 6, autoriteit 12%

Als u records wilt bijwerken, moet u wijzigingen naar het .mdb-bestand op schijf schrijven. Als uw web-/gedeelde toepassing niet naar schijf kan schrijven, kunt u bestaande records niet bijwerken of nieuwe records toevoegen. Schakel dus lees-/schrijftoegang in de databasemap in of verplaats de database naar een andere map waar uw toepassing schrijfrechten heeft… voor meer details, kijk op:

http://www. beansoftware.com/ASP.NET-FAQ/Operation-Must-Use-An-Updateable-Query.aspx


Antwoord 7, autoriteit 8%

Ik heb een tijdelijke tabel gebruikt en heb dit uiteindelijk werkend gekregen. Hier is de logica die wordt gebruikt zodra u de tijdelijke tabel hebt gemaakt:

UPDATE your_table, temp
SET your_table.value = temp.value
WHERE your_table.id = temp.id

Antwoord 8, autoriteit 4%

Ik kreeg dezelfde fout en het gebruik van een primaire sleutel maakte geen verschil. Het probleem was dat de tabel een gekoppelde Excel-tabel is. Ik weet dat er instellingen zijn om dit te wijzigen, maar mijn IT-afdeling heeft dit vergrendeld, dus we kunnen het niet wijzigen. In plaats daarvan heb ik een make-tabel gemaakt van de gekoppelde tabel en die in plaats daarvan in mijn Update-query gebruikt en het werkte. Let op: alle query’s in uw query die ook zijn gekoppeld aan dezelfde gekoppelde Excel-tabel, veroorzaken dezelfde fout, dus u moet deze ook wijzigen, zodat ze niet rechtstreeks aan de gekoppelde Excel-tabel zijn gekoppeld. HTH


Antwoord 9

Dit is een schot in de roos, maar probeer de twee operanden voor de AND tussen haakjes te zetten

Aan ((A = B) en (C = D))


Antwoord 10

Ik had toegang tot de database via het UNC-pad en af en toe werd deze uitzondering gegenereerd. Toen ik de computernaam verving door het IP-adres, was het probleem plotseling opgelost.


Antwoord 11

Je moet de IMEX=1 verwijderen als je wilt updaten. 😉

“IMEX=1; vertelt de bestuurder om “vermengde” (getallen, datums, tekenreeksen, enz.) gegevenskolommen altijd als tekst te lezen. Merk op dat deze optie de schrijftoegang van Excel-bladen negatief kan beïnvloeden.”
https://www.connectionstrings.com/excel/


Antwoord 12

UPDATE [GS] INNER JOIN [Views] ON 
([Views].Hostname = [GS].Hostname) 
AND ([GS].APPID = [Views].APPID) <------------ This is the difference 
SET 
    [GS].APPID = [Views].APPID, 
    [GS].[Name] = [Views].[Name], 
    [GS].Hostname = [Views].Hostname, 
    [GS].[Date] = [Views].[Date], 
    [GS].[Unit] = [Views].[Unit], 
    [GS].[Owner] = [Views].[Owner];

Other episodes