Avatar billede zaydn Nybegynder
18. september 2008 - 15:16 Der er 5 kommentarer

Update hvis findes ellers Insert

Hej.

I en Access database har jeg 4 koloner: Navn, email, antal og dato(ugenummer)

Data kommer fra et website hvor brugere registrere sig på forskellige ting ved at afgive navn og email. Jeg vil gerne have lavet det sådan, at man max kan registrere en email 25 gange om ugen og til at holde styr på det ville jeg bruge ”antal” kolonnen.

Altså i stil med :
Hvis email findes og antal er < 25 så antal = antal +1

ellers

Insert Navn, email, …

Er der nogen der kan hjælpe med det kode?
Avatar billede softspot Forsker
18. september 2008 - 15:30 #1
Noget med:

' tjek først om der findes en række med dne pågældende email
sql = "SELECT COUNT(*) FROM tabel WHERE email = ?"
set cmd = Server.CreateObject("ADODB.Command")
set cmd.ActiveConnection = dit_connectionobjekt
cmd.Parameters.Append cmd.CreateParameter("@email", adVarChar, adParamInput, 255, email)
set rs = cmd.Execute()
doInsert = (clng(rs(0)) = 0)
rs.close
set rs = nothing

' Udfør derefter indsæt eller opdater alt efter udfaldet af ovenstående tjek.
set cmd = Server.CreateObject("ADODB.Command")
set cmd.ActiveConnection = dit_connectionobjekt

if doInsert then
  sql = "INSERT INTO tabel(navn,email,antal,dato) VALUES(?,?,1,now)"
  cmd.Parameters.Append cmd.CreateParameter("@navn", adVarChar, adParamInput, 255, navn)
  cmd.Parameters.Append cmd.CreateParameter("@email", adVarChar, adParamInput, 255, email)
else
  sql = "UPDATE tabel SET antal = antal + 1 WHERE email = ?"
  cmd.Parameters.Append cmd.CreateParameter("@email", adVarChar, adParamInput, 255, email)
end if

cmd.Execute


For at dette skal fungere, skal du have denne linie ind i enten global.asa (så skal du ikke tænke på den mere) eller i den fil hvor du benytter ADO-konstanter:

<!-- METADATA TYPE="typelib" uuid="00000205-0000-0010-8000-00AA006D2EA4"  -->
Avatar billede softspot Forsker
18. september 2008 - 15:33 #2
Ups! Jeg mangler lidt at tildele sql-sætningen til command-objektet - soorwy!

' tjek først om der findes en række med dne pågældende email
sql = "SELECT COUNT(*) FROM tabel WHERE email = ?"
set cmd = Server.CreateObject("ADODB.Command")
set cmd.ActiveConnection = dit_connectionobjekt
cmd.CommandText = sql
cmd.CommandType = adCmdText
cmd.Parameters.Append cmd.CreateParameter("@email", adVarChar, adParamInput, 255, email)
set rs = cmd.Execute()
doInsert = (clng(rs(0)) = 0)
rs.close
set rs = nothing

' Udfør derefter indsæt eller opdater alt efter udfaldet af ovenstående tjek.
set cmd = Server.CreateObject("ADODB.Command")
set cmd.ActiveConnection = dit_connectionobjekt
cmd.CommandType = adCmdText

if doInsert then
  sql = "INSERT INTO tabel(navn,email,antal,dato) VALUES(?,?,1,now)"
  cmd.CommandText = sql
  cmd.Parameters.Append cmd.CreateParameter("@navn", adVarChar, adParamInput, 255, navn)
  cmd.Parameters.Append cmd.CreateParameter("@email", adVarChar, adParamInput, 255, email)
else
  sql = "UPDATE tabel SET antal = antal + 1 WHERE email = ?"
  cmd.CommandText = sql
  cmd.Parameters.Append cmd.CreateParameter("@email", adVarChar, adParamInput, 255, email)
end if
cmd.Execute
Avatar billede bauerdata Nybegynder
18. september 2008 - 21:13 #3
det er enklere blot at slette
og derefter lave insert.

delete from tabel where email = ?
insert into tabel (navn,email,antal,dato) VALUES(?,?,1,now)
commit
Avatar billede softspot Forsker
19. september 2008 - 08:50 #4
bauerdata >> da ikke hvis antallet skal opdateres for eksisterende!?
Avatar billede bauerdata Nybegynder
19. september 2008 - 09:17 #5
Okey
så er det lettere at prøve update først
hvis den fejler
så lav en insert.
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
Kategori
Kurser inden for grundlæggende programmering

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