Avatar billede mecenor Nybegynder
08. marts 2006 - 11:21 Der er 10 kommentarer og
1 løsning

Skriver 2 gange til databasen

Ved log af skærmopløsning skriver nedstående kode 2 gange til database; 1. gang laves blot tomme felter, 2. gange kommer de ønskede tal med. Hvordan fjerner jeg 1. skrivning med de tomme felter?

dim rs, intWidth, intHeight

sub dbStartStr(sqlstr)
    Set rs = Server.CreateObject("ADODB.Recordset")
    strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("/log/skaerm.mdb")
    rs.Open sqlstr, strDSN, 1, 3
end sub

sub dbStopStr()
    rs.Close
    Set rs = Nothing
end sub

intWidth = Request.Querystring("width")
intHeight = Request.Querystring("height")

call dbStartStr("SELECT * FROM Skaermstr")
    rs.AddNew
        rs.Fields("Horisontal") = intWidth
        rs.Fields("Vertikal") = intHeight
        rs.Fields("Tid") = Now()
    rs.Update
call dbStopStr()
Avatar billede _darkstar_ Nybegynder
08. marts 2006 - 11:40 #1
Avatar billede mecenor Nybegynder
08. marts 2006 - 12:51 #2
Har kigget på det nu, men kan stadig ikke lige se hvor det er det går galt...
Avatar billede _darkstar_ Nybegynder
08. marts 2006 - 12:57 #3
Der står

"In immediate update mode (in which the provider writes changes to the underlying data source once you call the Update method), calling the AddNew method without arguments sets the EditMode property to adEditAdd (an EditModeEnum value). The provider caches any field value changes locally. Calling the Update method posts the new record to the database and resets the EditMode property to adEditNone (an EditModeEnum value). If you pass the Fieldlist and Values arguments, ADO immediately posts the new record to the database (no Update call is necessary); the EditMode property value does not change (adEditNone)."

Her er eksempler på hvordan man gør i praksis:

http://www.devguru.com/Technologies/ado/quickref/recordset_addnew.html
Avatar billede mecenor Nybegynder
08. marts 2006 - 13:47 #4
OK, jeg kører det uden Update call - men den laver stadig en tom post og så en med data.

Opdateret kode:
dim rs, intWidth, intHeight, nu

sub dbStartStr(sqlstr)
    Set rs = Server.CreateObject("ADODB.Recordset")
    strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("/log/skaerm.mdb")
    rs.Open sqlstr, strDSN, 1, 3
end sub

sub dbStopStr()
    rs.Close
    Set rs = Nothing
end sub

intWidth = Request.Querystring("width")
intHeight = Request.Querystring("height")
nu = now()

call dbStartStr("SELECT * FROM Skaermstr")
    rs.AddNew Array("Horisontal", "Vertikal", "Tid"), Array(intWidth, intHeight, nu)
call dbStopStr()

Det kan ikke have noget at gøre med, at jeg får data fra javascript?
<SCRIPT LANGUAGE="javascript">
document.write('<img src="default.asp?height=' + screen.height + '&width=' + screen.width +'" width=1 height=1>');
</script>
Avatar billede _darkstar_ Nybegynder
08. marts 2006 - 13:53 #5
Jeg tror ikke at det skyldes at du får værdierne fra JavaScript.

Har du sat en primary key på tabellen? Hvis "nej", er det muligvis årsagen til problemet.
Avatar billede mecenor Nybegynder
08. marts 2006 - 14:08 #6
Der er en primary key på tabellen.

Hvis jeg bruger:
intWidth = 1
intHeight = 2
nu = now()

i stedet for:
intWidth = Request.Querystring("width")
intHeight = Request.Querystring("height")
nu = now()

bliver der stadig skrevet 2 gange til databasen, men nu er første gang ikke uden data.

Så de respektive skrivninger til databasen med de 2 ovennævnte forskelle ville være således:
1 2 08-03-2006 13:53:16
1 2 08-03-2006 13:53:16

og

(ingenting) (ingenting) (ingenting)
1600 1200 08-03-2006 13:53:16

Gir det mening?
Avatar billede _darkstar_ Nybegynder
08. marts 2006 - 14:45 #7
Det ser ud som om at fejlen ligger et andet sted. Hvordan ser al koden til hele din asp-side ud?
Avatar billede mecenor Nybegynder
08. marts 2006 - 14:50 #8
Det er det eneste asp, der er på siden. Følgende er alt indtil body:

<html>
<head>
<title>Forside</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" type="text/css"
href="mystyle.css">
<SCRIPT LANGUAGE="javascript">
document.write('<img src="default.asp?height=' + screen.height + '&width=' + screen.width +'" width=1 height=1>');
</script>
</head>
<%

dim rs, intWidth, intHeight, nu

sub dbStartStr(sqlstr)
    Set rs = Server.CreateObject("ADODB.Recordset")
    strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("/log/skaerm.mdb")
    rs.Open sqlstr, strDSN, 1, 3
end sub

sub dbStopStr()
    rs.Close
    Set rs = Nothing
end sub

intWidth = Request.Querystring("width")
intHeight = Request.Querystring("height")
nu = now()

call dbStartStr("SELECT * FROM Skaermstr")
    rs.AddNew Array("Horisontal", "Vertikal", "Tid"), Array(intWidth, intHeight, nu)
call dbStopStr()


%>
<body>
Avatar billede _darkstar_ Nybegynder
08. marts 2006 - 15:59 #9
Det er jo ikke så underligt.

Der sker følgende:

1. Du henter siden default.asp. Her er parametrene height og width ikke med, så den indsætter noget i databasen med tomme felter.
2. På siden er der et billede, som har URL'en default.asp?height=<højden>&width=<bredden>. Når det billede skal vises, henter den default.asp igen - denne gang med de rigtige parametre.

Løsning: lad være med at prøve at indsætte noget, hvis du ikke får de korrekte parametre.
Avatar billede mecenor Nybegynder
08. marts 2006 - 17:53 #10
Logisk nok - tak :)
Læg et svar
Avatar billede _darkstar_ Nybegynder
08. marts 2006 - 19:41 #11
Ok.
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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