Just nu i M3-nätverket
Jump to content

ADODB


Niklas Beckman

Recommended Posts

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

 

Link to comment
Share on other sites

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]

Link to comment
Share on other sites

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!

 

Link to comment
Share on other sites

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.

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...