Avatar billede sigyn Seniormester
06. december 2018 - 12:14 Der er 12 kommentarer og
1 løsning

Opdateringsforespørgsel der driller

Jeg er ved at lave en opdateringsforespørgsel, og umiddelbart mener jeg, at den burde virke, men jeg får beskeden "Handlingen skal bruge en opdaterbar forespørgsel", så hvad gør jeg galt?
Jeg har en anden i samme database, og den virker, og jeg kan ikke rigtigt gennemskue hvorfor denne ikke gør
06. december 2018 - 12:17 #1
Det er ofte på grund af manglende primærnøgle, så opdateringen ikke er entydig, men det er svært ud fra det oplyste at sige mere...
Avatar billede sigyn Seniormester
06. december 2018 - 12:48 #2
Der er en primær nøgle i den tabel der skal opdateres, en slags id, og feltet der skal opdateres, er en lidt mere forklarende tekst. Og forespørgslen der skal opdateres fra, indeholder de to samme felter, samt et enkelt med en udgave.
der er grupperet på ID'en, maks på udgvenummeret og sidste på den forklarende tekst.
Avatar billede terry Ekspert
06. december 2018 - 13:33 #3
can we see the sql?
Avatar billede sigyn Seniormester
06. december 2018 - 13:45 #4
UPDATE tblAlleAnalyser INNER JOIN qryFindGyldigeQS28Version ON tblAlleAnalyser.StDataKT = qryFindGyldigeQS28Version.StDataKT SET tblAlleAnalyser.Korttekst = [qryFindGyldigeQS28Version].[Korttekst];


Primærnøglen er StDataKT
06. december 2018 - 13:52 #5
Hvad med

UPDATE tblAlleAnalyser  SET tblAlleAnalyser.Korttekst = [qryFindGyldigeQS28Version].[Korttekst] where tblAlleAnalyser.StDataKT = qryFindGyldigeQS28Version.StDataKT;

(fra hoften...)
Avatar billede terry Ekspert
06. december 2018 - 15:49 #6
SQL Actually looks OK, so I suspect that what Thor suggests in #1 is probably the issue
Avatar billede terry Ekspert
06. december 2018 - 15:51 #7
and if you still cant find problem then I think it will be necessary to look at the dB or at least the relevant objects to see what the problem is.

you can send to ekspertenATsanthell.dk
AT = @
Avatar billede terry Ekspert
06. december 2018 - 16:05 #8
first try making a simple select query where you inner join the table and query

Then run the select query to get a result set. Now try changing the data directly in the result set. If you can not update here, then an update query will fail. I suspect that its the data from the query qryFindGyldigeQS28Version which is the issue
Avatar billede sigyn Seniormester
07. december 2018 - 10:40 #9
terry, jeg har lige sendt en test til dig, den virker heller ikke
Jeg har også prøvet som du skrev sidst, også uden held. Jeg tænker også, at det er forespørgslen der er problemet. Jeg kan bare ikke gennemskue det. Jeg har prøvet forskellige andre versioner også

Thor, når jeg prøvede med dit forslag, kom beskeden "Handlingen skal bruge en opdaterbar forespørgsel" ikke, men den opdaterede heller ikke noget som helst.

Et andet forsøg fik fjernet alle korttekster, men ikke indsat dem igen.

Det er en gammel database, oprindeligt lavet i en ældre version af Access, som jeg er ved at give et facelift, og lige præcis den tekst her, har altid været et issue, når der blev rettet i den, derfor opdateringsforespørgslen
En anden opdateringsforespørgsel i samme database, bare fra en anden tabel og anden forespørgsel virker fint, den er dog lavet i den gamle version for lang tid siden.
Avatar billede terry Ekspert
07. december 2018 - 18:26 #10
well as we suspected the query qryFindGyldigeQS28Version is the issue. Its using a GROUP with MAX and LAST so there are no true unique records and therefore the query is not updateable.
So a couple of solutions:

1:
Change query so it uses a Dlookup to find value from the query qryFindGyldigeQS28Version

EG:
UPDATE tblAlleAnalyser AS T SET T.Korttekst = DLookup("Korttekst", "qryFindGyldigeQS28Version", "StDataKT='" & StDataKT & "'")

2:
Make a MakeTable query which creates a table containing result data from qryFindGyldigeQS28Version, then use this table in your update query in place of qryFindGyldigeQS28Version.

EG:
SELECT qryFindGyldigeQS28Version.StDataKT, qryFindGyldigeQS28Version.Korttekst INTO tblTemp
FROM qryFindGyldigeQS28Version

and update query is now
UPDATE DISTINCTROW tblAlleAnalyser INNER JOIN tblTemp ON tblAlleAnalyser.StDataKT = tblTemp.StDataKT SET tblAlleAnalyser.Korttekst = [tblTemp].[Korttekst];
Avatar billede terry Ekspert
07. december 2018 - 18:31 #11
The first solution using Dlookup is OK where there is a limited number of records to update, for each record to be updated the Dlookup runs the query qryFindGyldigeQS28Version to find the new text, so this will have an impact on performance.
Avatar billede sigyn Seniormester
10. december 2018 - 12:23 #12
Mange tak.
Jeg brugte løsning to. Jeg havde prøvet med en ekstra forespørgsel på qryFindGyldigeQS28Version, men også konstateret, at det ikke heller ikke duede, og troede så egentlig heller ikke, at tabelløsningeng gjorde. Jeg havde tænkt tanken, men ikke prøvet.
Så rigtigt mange tak for hjælpen :-)
Avatar billede terry Ekspert
10. december 2018 - 12:44 #13
Selv tak ;-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester