13. september 2005 - 21:53Der er
11 kommentarer og 1 løsning
if exist update else insert
Hey!
Jeg har lavet følgende sql uden noget som helst kendskab til access' if/else.. Jeg tror ikke, det er nødvendigt at forklare, hvad denne query skal gøre, men spørg da endelig løs hvis i er i tvivl om noget.
IF (SELECT count(referid) FROM Time_spent where datediff('d',[Time_spent].[date],#2005-09-13#) = 0 AND referid = 5677) = 1 UPDATE Time_spent SET hours = 1 where datediff('d',[Time_spent].[date],#2005-09-13#) = 0 AND referid = 5677 ELSE INSERT INTO Time_spent (hours,date,referid) values(1,#2005-09-13#,5677) END IF
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
another idea is to make sure that yu have a primary key (unique) and then just INSERT. Then if you get an error do an UPDATE
Synes godt om
Slettet bruger
16. september 2005 - 18:41#8
jeg går ud fra at dit eksempel er visual basic i en accessdatabase? Jeg kører visual basic fra excel.. Det jeg leder efter er måde hvorpå jeg med 1 databaseforspørgsel kan indsætte/opdatere alt efter om den pågældende record eksisterer..
you can make a combined primary key in Access. In Table design mode choose View Indexes from the menu and then choose the fields which make up your primary key
Du behøver ikke at ændre din primære key. Som default bliver en tabel jo oprettet med Id (autonummerering) som det primære keyfelt. Og det er jo ganske udmærket. Det er der ingen grund til at ændre på. Heldigvis er det stadig muligt at oprette andre unikke indexer - også kombinationer af felter. Det er nok nemmest at gøre det med en SQL sætning:
CurrentDb.Execute("CREATE UNIQUE INDEX Indexnavn ON Time_spent ([date], [referid])")
Herefter vil du ikke kunne oprette rows, hvis der allerede er en row med de samme værdier i de angivne felter. Det er absolut den bedste måde at sikre sig mod dubletter, især i flerbrugersystemer.
Du kan slette et sådant index igen med en DROP INDEX sql:
CurrentDb.Execute("DROP INDEX Indexnavn ON Time_spent")
Hvis du udfører din INSERT INTO med en CurrentDb.Execute ser det ikke ud til, at der fremkommer en fejl, derfor burde du kunne udføre begge dine sætninger umiddelbart efter hinanden, hvis du bare på din INSERT INTO sætning angiver timeantallet til 0
CurrentDb.Execute("INSERT INTO Time_spent (hours,date,referid) values(0, #2005-09-13#, 5677)") CurrentDb.Execute("UPDATE Time_spent SET hours = hours + 1 where [date] = #2005-09-13# AND referid = 5677")
Synes godt om
Ny brugerNybegynder
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.