Avatar billede kagge Nybegynder
02. oktober 2003 - 12:31 Der er 4 kommentarer og
1 løsning

Datofelter i UPDATE-statement

Jeg har en masse datofelter i en formular som skal smides ned i en accessdb. jeg har set et andet eks. her på eksperten som bruger nedenstående måde: Det finder ud af hvor mange af datofelterne som er udfyldt og skal lægges i basen. Derefter opbygger den en SQL-streng hvor den kun medtager de datofelter hvor der reelt set var indhold (det er ikke et krav at udfylde datofelterne i formularen). Spørgsmålet er nu hvordan gør jeg nedenstående i en UPDATE-statement???

kolDato =""
dataDato =""

fodselsdat = Request.Form("fodselsdato")
stillingdato = Request.Form("stilling1startdato")

if fodselsdat <>"" then
  fodselsdatous = split(fodselsdat,"-")
  fodselsdat = fodselsdatous(2) & "-" & fodselsdatous(1) & "-" & fodselsdatous(0)
  kolDato = kolDato & ", Fodselsdato"
  dataDato = dataDato & ", #" & fodselsdat & "#"
end if

if stillingdato <>"" then
  stillingdatous = split(stillingdato,"-")
  stillingdato = stillingdatous(2) & "-" & stillingdatous(1) & "-" & stillingdatous(0)
  kolDato = kolDato & ", Stilling_startdato"
  dataDato = dataDato & ", #" & stillingdato & "#"
end if

connectionString = "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("Stamdata.mdb")
Set forbindelse = Server.CreateObject("ADODB.Connection")
Set recordSet = Server.CreateObject("ADODB.recordSet")
forbindelse.Open connectionString, CONN_USER, CONN_PASS
strSQL = "INSERT INTO Medarbejder (Medarbejdernr,Medarbejdernavn,Stillingsnr" & kolDato & ") VALUES ('" & request.Form("medarbejdernr") & "', '" & request.Form("medarbejdernavn") & "', " & request.Form("stilling1") & "" & dataDato & ")"
forbindelse.Execute(strSQL)
Avatar billede ellebaek Nybegynder
02. oktober 2003 - 14:38 #1
fodselsdat = Request.Form("fodselsdato")
stillingdato = Request.Form("stilling1startdato")
i=0
if fodselsdat <>"" then
  fodselsdatous = split(fodselsdat,"-")
  fodselsdat = fodselsdatous(2) & "-" & fodselsdatous(1) & "-" & fodselsdatous(0)

  kolDato = "Fodselsdato=#" & fodselsdat & "#"
  end if

if stillingdato <>"" then
  stillingdatous = split(stillingdato,"-")
  stillingdato = stillingdatous(2) & "-" & stillingdatous(1) & "-" & stillingdatous(0)
  kolDato = kolDato & ", Stilling_startdato = #" & stillingdato & "#"
end if

connectionString = "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("Stamdata.mdb")
Set forbindelse = Server.CreateObject("ADODB.Connection")
Set recordSet = Server.CreateObject("ADODB.recordSet")
forbindelse.Open connectionString, CONN_USER, CONN_PASS
strSQL = "UPDATE Medarbejder SET " & kolDato & " where id = " request("id")
forbindelse.Execute(strSQL)

Dette burde virke.
Det kræver bare at du selv definere for hvilket id det skal updateres...
Avatar billede kagge Nybegynder
03. oktober 2003 - 08:50 #2
=> ellebaek

Nu ser min kode sådan her ud, men jeg får følgende fejl:

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[Microsoft][ODBC Microsoft Access Driver] Syntax error in UPDATE statement.

/stamdata/medarbejder_redigering_godkend.asp, line 77



<%
CONST adOpenStatic = 3, adLockReadOnly = 1, adCmdText = &H0001
Dim connectionString, CONN_USER, CONN_PASS
Dim forbindelse
Dim strSQL
Dim fodselsdat, fodselsdatous, ansattelsesdato, ansattelsesdatous, fratradelsesdato, fratradelsesdatous
Dim proddato, proddatous, tjenestested1dato, tjenestested1datous
Dim tjenestested2dato, tjenestested2datous, stillingdato, stillingdatous
Dim kolDato, dataDato
Dim buffer


kolDato =""
dataDato =""

buffer = Session("medarbnummer")

fodselsdat = Request.Form("fodselsdato")
ansattelsesdato = Request.Form("ansattelsesdato")
fratradelsesdato = Request.Form("fratradelsesdato")
proddato = Request.Form("ophorproddato")
tjenestested1dato = Request.Form("tjenestested1startdato")
tjenestested2dato = Request.Form("tjenestested2startdato")
stillingdato = Request.Form("stilling1startdato")

if fodselsdat <>"" then
  fodselsdatous = split(fodselsdat,".")
  fodselsdat = fodselsdatous(2) & "-" & fodselsdatous(1) & "-" & fodselsdatous(0)
  kolDato = kolDato & ", Fodselsdato=#" & fodselsdat & "#"
end if

if stillingdato <>"" then
  stillingdatous = split(stillingdato,".")
  stillingdato = stillingdatous(2) & "-" & stillingdatous(1) & "-" & stillingdatous(0)
  kolDato = kolDato & ", Stilling_startdato=#" & stillingdato & "#"
end if

connectionString = "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("Stamdata.mdb")
Set forbindelse = Server.CreateObject("ADODB.Connection")
forbindelse.Open connectionString, CONN_USER, CONN_PASS
strSQL = "UPDATE Medarbejder SET Medarbejdernr = '" & request.Form("medarbejdernr") & "', Medarbejdernavn = '" & request.Form("medarbejdernavn") & "', Telefonnr = '" & request.Form("telefonnr") & "', Mobiltelefonnr = '" & request.Form("mobilnr") & "', Emailadresse = '" & request.Form("email") & "', Seniorordning = '" & request.Form("seniorordning") & "', Halnr = '" & request.Form("tjenestested1") & "', Halnr1_gl = '" & request.Form("tjenestested2") & "', Stillingsnr = " & request.Form("stilling1") & ", Arbejdstidsnorm = '" & request.Form("arbejdstidsnorm") & "', Andel_synsproduktion = '" & request.Form("synsproduktion") & "', Ovrige_bemarkninger = '" & request.Form("ovrigebemarkninger") & "', " & kolDato & " WHERE Medarbejdernr = '" & buffer & "'"
forbindelse.Execute(strSQL)
Avatar billede kagge Nybegynder
03. oktober 2003 - 10:23 #3
=> ellebaek

Jeg havde skrevet et , for meget i min strSQL så nu virker det når man ændrer dato i datofelterne, men der er stadig et lille problem:

Hvis man vil slette datofeltet helt så det er tomt hvad dælen skal man så gøre?

Man kan jo ikke give datofelter ""

Men tak for hjælpen
Avatar billede kagge Nybegynder
03. oktober 2003 - 10:34 #4
Har fundet ud af det:

Puttede det her ind i mine if-sætninger:

else
  kolDato = kolDato & ", Fodselsdato=Null"
Avatar billede ellebaek Nybegynder
04. oktober 2003 - 23:30 #5
ok...

Undskyld jeg ikke har svaret før nu.
Men tak for points.

..Ellebæk!
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