Avatar billede hjep Nybegynder
12. september 2002 - 10:53 Der er 6 kommentarer og
1 løsning

Conn.Execute (SQLstmt)

Hvad betyder og hvad gør Conn.Execute (SQLstmt)

Mit webhotel mener at jeg "glemmer" at lukke mine accessdatabaser, hvorfor at siden en gang imellem går ned.

Jeg bruger typisk neden stående kode. Lukker jeg ikke efter mig her?

Jeg har prøvet at slette Conn.Execute (SQLstmt) og det virker fint nok stadigvæk. Men hvorfor bruger man den så. Koden har jeg fundet på nettet.



<%
Session.LCID = 1031
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.MapPath("../../../db/konkur/konkur.mdb")

SQLstmt = "UPDATE DISTINCTROW konkur SET spg2 = '" & request.form("spg2") & "' WHERE id = " & Request("id")
Conn.Execute (SQLstmt)
Conn.Close
Set conn = nothing
Set SQLstmt = nothing

response.redirect ("administration.asp")
%
Avatar billede kichian Nybegynder
12. september 2002 - 11:02 #1
Hvis du sletter Conn.Execute (SQLstmt) får du ikke opdateret din database. Så det vil nok ikke virke fint stadigvæk :-)

Jeg synes det ser fint ud. Bortset fra at hvis du ikke forventer at få et recordset retur fra, så skal du bruge
Conn.Execute SQLstmt
I stedet for
Conn.Execute (SQLstmt)

I VB angiver () at der er tale om et funktionskald med returværdi.
Avatar billede kichian Nybegynder
12. september 2002 - 11:03 #2
Nå ja.. Og så skal du ikke bruge Set SQLstmt = nothing, da SQLstmt ikke er et object. Og derfor ikke skal frigives.
Avatar billede neteffect Nybegynder
12. september 2002 - 11:11 #3
Set SQLstmt = nothing er overfødig, da SQLstmt blot er en almindelig string variabel.

Spørgsmålet er om du lukker dine recordset. UPDATE, DELETE og INSERT genererer ikke recordset, men SELECT gør, hvis der da ikke er eof fra starten.

Her er standardopskriften for SELECT:

rs=conn.Execute ("SELECT * FROM dinTabel")
if not rs.eof then
do
  'hvad du skal bruge recorden til
  rs.movenext
loop until rs.eof
rs.close
end if
set rs=nothing

'luk connection, hvis du ikke skal bruge den et splitsekund efter.
' Normalt vil det være ok at etablere og åbne connection i begyndelsen af scriptet, og så lukke den og smide den væk til sidst.
conn.close
set conn=nothing
Avatar billede kichian Nybegynder
12. september 2002 - 11:19 #4
>> neteffect : Det er ikke helt korrekt det du skriver. Selvom en RS ikke indeholder data, dvs. er EOF fra starten. Så skal det stadig lukkes.
Derfor skal din kode se ud som:

rs=conn.Execute ("SELECT * FROM dinTabel")
while not rs.eof
  'hvad du skal bruge recorden til
  rs.movenext
loop
set rs=nothing
Avatar billede hjep Nybegynder
12. september 2002 - 11:21 #5
Ok jeg prøver lige at gå lidt sider igennem
Avatar billede neteffect Nybegynder
12. september 2002 - 11:23 #6
>kichian : Access-driveren giver fejl, hvis man forsøge at lukke tomt recordset.
Avatar billede kichian Nybegynder
12. september 2002 - 12:46 #7
> neteffect : Der opstår kun fejl hvis det ikke er en gyldig SQL.

Husk at det hedder set rs = conn.Execute ("SELECT * FROM dinTabel")
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