Just nu i M3-nätverket
Gå till innehåll

ADODB


Niklas Beckman

Rekommendera Poster

Niklas Beckman

Halloj.

Nu har jag kommit till avsnittet om databaser i kursen jag läser... Och det blir bara mer och mer spännande. Huga, vad skojsigt det är!

Ett litet problem dock.

När jag lägger till information till en tabell i en databas så går allt jättebra, men när jag ska lägga till en ny rad så kan jag inte göra det förrän efter ett antal sekunder (har inte räknat hur länge). Även när jag ska presentera innehållet i en databas med si eller så kriterier så går det bra, men om jag vill ändra och sortera efter efternamn, typ, så måste jag vänta i samma antal sekunder innan jag kan köra scriptet igen. Felmeddelandet är så tacksamt som "Odefinierat fel".

Koden som tar hand om informationen som jag matar in från ett formulär till databasen ser ut såhär:

 

<%

Dim Connect, RecSet, Addera

Set Connect = Server.CreateObject("ADODB.Connection")

Connect.Open = "driver={Microsoft Access Driver (*.mdb)};dbq=c:\Inetpub\wwwroot\idgkurs\mdb\adressbok.mdb"

 

Set RecSet = Server.CreateObject("ADODB.Recordset")

Addera = "SELECT * FROM adressbok"

 

RecSet.Open Addera, Connect, adOpenStatic, adLockOptimistic

 

RecSet.AddNew

 

RecSet("Fornamn") = Request.Form("fornamn")

RecSet("Efternamn") = Request.Form("efternamn")

RecSet("Adress") = Request.Form("adress")

 

RecSet.Update

RecSet.Close

Connect.Close

%>

 

Det verkar ju som att det tar ett tag innan databasen stängs och är mottaglig för nya poster och redo för att presentera innehållet igen. Men jag trodde att allt stängdes av DIREKT i slutet av koden med Close??

Hoppas ni förstår vad problemet är. Alltså, det FUNKAR ju när det väl funkar, men jag måste vänta en stund mellan varven.

 

Fridens!

/Niklas

 

Länk till kommentar
Dela på andra webbplatser

Använd kommandot INSERT istället för metoden AddNew.

Du behöver ju inte öppna ett Recordset ionödan.

Det behöver du bara när du ska hämta ut saker ifrån databasen.

 

I ditt fall:

[log]

[MÄRK]<%[/MÄRK]
[color="#0000ff"]Option Explicit[/color]

[color="#0000ff"]Dim[/color] Fornamn, Efternamn, Adress, Connect, sSQL

[color="#006400"]' Spara/gör vid värdena i variabler[/color]
[color="#006400"]' Skydd mot sql-injections(Replace) samt ta bort mellanslag före och efter värdet(Trim)[/color]
Fornamn = [color="#0000ff"]Trim[/color]([color="#0000ff"]Replace[/color]([b]Request[/b].Form([GRÅ]"fornamn"[/GRÅ]),[GRÅ]"'"[/GRÅ],[GRÅ]"''"[/GRÅ]))
Efternamn = [color="#0000ff"]Trim[/color]([color="#0000ff"]Replace[/color]([b]Request[/b].Form([GRÅ]"efternamn"[/GRÅ]),[GRÅ]"'"[/GRÅ],[GRÅ]"''"[/GRÅ]))
Adress = [color="#0000ff"]Trim[/color]([color="#0000ff"]Replace[/color]([b]Request[/b].Form([GRÅ]"adress"[/GRÅ]),[GRÅ]"'"[/GRÅ],[GRÅ]"''"[/GRÅ]))

[color="#0000ff"]Set[/color] Connect = [b]Server[/b].[color="#0000ff"]CreateObject[/color]([GRÅ]"ADODB.Connection"[/GRÅ])
Connect.Open = [GRÅ]"driver={Microsoft Access Driver (*.mdb)};dbq=c:\Inetpub\wwwroot\idgkurs\mdb\adressbok.mdb"[/GRÅ]

[color="#006400"]'Spara värdena i din databas[/color]
sSQL = [GRÅ]"INSERT INTO adressbok (Fornamn, Efternamn, Adress) VALUES ('"[/GRÅ]& Fornamn &[GRÅ]"', '"[/GRÅ]& Efternamn &[GRÅ]"', '"[/GRÅ]& Adress &[GRÅ]"')"[/GRÅ]
Connect.[color="#0000ff"]Execute[/color](sSQL)
Connect.Close
[color="#0000ff"]Set[/color] Connect = [color="#0000ff"]Nothing[/color]
[MÄRK]%>[/MÄRK]

[/log]

Testa!

Får du samma problem fortfarande?

 

(Du kan även byta ut din driver mot en provider när du ska bestämma vilken databas du ska änvända)

http://www.connectionstrings.com/

 

EDIT: Raden om Efternamnet ska vara på en rad, men det förstod du nog :)

Skyddet för Sql-injections är mest lämpligt då man kör en fråga mot databasen men du kan lika gärna göra det här så har du hört talas om det.

Sök mer info om det!

 

Micke

 

[inlägget ändrat 2006-02-06 09:59:55 av Micke_skane]

[inlägget ändrat 2006-02-06 10:06:22 av Micke_skane]

Länk till kommentar
Dela på andra webbplatser

Niklas Beckman

Det verkar ha löst sig efter ditt förslag. Mycket trevligt. Tusen tack. Atta jag inte behöver öppna ett Recordset förrän jag ska HÄMTA information från databasen var helt ny information för mig, så jag bugar och bockar för det och insuper informationen! :-) Tack igen!

 

Länk till kommentar
Dela på andra webbplatser

I fallet som du visade så är det onödigt att explicit skapa ett recordset-objekt. Det räcker med att använda dig av implicita recordsets och uppdatera databasen med UPDATE/INSERT direkt i SQL istället. Den metod du använt är mycket tyngre och därmed ineffektivare för servern att hantera.

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...