Niklas Beckman Postad 5 februari, 2006 Share Postad 5 februari, 2006 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 More sharing options...
Micke_skane Postad 6 februari, 2006 Share Postad 6 februari, 2006 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 More sharing options...
Niklas Beckman Postad 6 februari, 2006 Trådskapare Share Postad 6 februari, 2006 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 More sharing options...
Anjuna Moon Postad 6 februari, 2006 Share Postad 6 februari, 2006 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 More sharing options...
Rekommendera Poster
Arkiverat
Det här ämnet är nu arkiverat och är stängt för ytterligare svar.