Artiklar » Databaser » Stored Procedures i Access

 
 

Stored Procedures i Access

Författare: minimunk
Datum: den 7 december 2006
Antal lästa: 8438
Ej stjärnmärkt

Många vet inte att man kan skapa stored procedures i Accessdatabaser, men det kan man faktiskt. Och i den här artikeln kommer vi gå igenom hur man kan sitta och jobba med stored procedures även om man är access-användare.

Förberedelser
Innan vi börjar leka så har jag skapat en Accessdatabas som jag döpt till sp.mdb. I den finns en tabell (tblSP) med två fält i; ID(räknare) och exempel_data(Heltal). Skapa en egen lämplig labbråtta innan du börjar.

Vad är en stored procedure
En stored procedure (SP) är inget annat än en sql-fråga som är lagrad i databasen. Det finns många fördelar med att ha frågor som ofta ställs som SP's. Dels är de snabbare än traditionella sql-frågor som du gör från din kod. Men det finns även andra fördelar som att du tex inte behöver tänka på sql-injections, och om du vill ändra resultatet av en fråga så kan du ändra din SP och ändringen kommer att slå igenom på alla ställen där du använder din SP.

Hur skapar jag en SP
Till skillnad från allt annat i Access så har inte stored procedures något grafiskt gränsnitt, utan vi får helt enkelt skapa dem via en vanlig klassisk sql-fråga.

Syntaxen när vi skapar SP's ser ut såhär. Kod:
CREATE PROCEDURE Valfritt_namn
(
parametrar
)
AS
Valfri SQLfråga. Select, insert, delete etc.



I denna lilla korta artikel kommer jag bara skapa tre SP's, sen tror jag att du kan lista ut själv hur man kan använda SP's. Jag kommer skapa en insert-SP för att putta in data i min tabell och en select-SP för att skriva ut datan, och en select-SP som bara plockar ut en speciell post.

För att skapa min insert-SP så skickar jag bara in den som en vanlig sql-fråga, fast med en deklaration om att det är en SP före, dess namn samt vilka invärden (parametrar) som kan skickas med. Så här alltså. Kod:
<%
Set objConnect = server.createobject("ADODB.Connection")
objConnect.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("sp.mdb")

strSQL = "CREATE PROC sp_Insert (@indata  INT) AS " &_
  "Insert into tblSP([exempel_data]) Values(@indata)"

objConnect.Execute strSQL,,128

objConnect.Close
Set objConnect = Nothing
%>



Och för att få vår select-SP så fyller du strSQL så här. Kod:
strSQL = "CREATE PROC sp_SelectID AS " &_
  "Select ID, exempel_data From tblSP"


Som du ser så behöver vi här inte deklarera några parametrar, eftersom vi inte använder några. I nästa SP kommer vi dock använda parametrar i vår Select-fråga. Kod:
strSQL = "CREATE PROC sp_SelectID (@lngID Long) AS " &_
  "Select ID, exempel_data From tblSP Where ID = @lngID"


För att få ut precis den posten vi vill ha, så använder vi en parameter som kommer innehålla ett valfritt id-nummer.

Hur använder jag mina SP's
Nu kommer vi till det roligaste, när vi får testköra våra SP's. Vi börjar med att använda vår sp_Insert för att mata in lite data i databasen så vi har något att hämta ut sedan.
Kod:
<%
Set objConnect = server.createobject("ADODB.Connection")
objConnect.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("sp.mdb")

strSQL = "EXECUTE sp_Insert @indata=1337"

objConnect.Execute strSQL,,128

objConnect.Close
Set objConnect = Nothing
%>


Ta nu en titt i din databas, och du kommer finna en söt lite post där som är fylld med siffrorna 1337. Fyll på din databas med lite fler olika poster, så du har något att hämta fram i nästa exempel.

Här ska vi använda vår sp_Select för att hämta ut alla våra poster från tabellen tblSP.
Kod:
<%
Set objConnect = server.createobject("ADODB.Connection")
objConnect.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("sp.mdb")

strSQL = "EXECUTE sp_Select"

Set objRS = objConnect.Execute strSQL

Do until objRS.EOF
Response.Write objRS("ID") & " - " & objRS("exempel_data") & "<br />"
objRS.MoveNext
Loop

objRS.Close
Set objRS = Nothing

objConnect.Close
Set objConnect = Nothing
%>


För att nu få ut poster som fyller vissa vilkor så kan vi använda vår sp_SelectID genom att ändra innehållet i vår strSQL till detta. Kod:
strSQL = "EXECUTE sp_SelectID @lngID = 1"



Ta bort SP's
För att ta bort en SP så använder du Drop.
Kod:
DROP table min_Stored_Procedure



Ändra SP's
Du kan inte ändra en SP som du skapat. Du får helt enkelt ta bort den och skapa en ny.

@ i Access SP's
Nu är det säkert någon som undrar varför det sitter en @ framför alla parametrar. I större databaser så ser det ut så. Man visar vilka värden som kommer utifrån. Access struntar fullständigt i om det sitter en @ framför dina parametrar eller inte. Den sväljer allt. Jag har valt att använda @ för att göra det riktigt från början, om man någon gång får för sig att gå över till lite större databaser.

Referenser
Här är några länkar som kan vara nyttiga att läsa om man känner att man vill klämma lite mer på Stored Procedures-paketet i Access.
http://www.aspemporium.com/tutorials.aspx?tid=4
http://www.devcity.net/Articles/18/msaccess_sp.aspx
http://www.devcity.net/Articles/34/msaccess_sp2.aspx

Lycka till!
 
     

  » Logga in  
 
Användarnamn

Lösenord

 
     

  » Bli medlem  
  Bli medlem på ASPsidan!  
     

     
  Microsoft  
     

  » Partners  
  Comsolvia  
     
  » ANNONS  
  ingen annons än  
     

  » Senast online  
  Endast för inloggade  
  Antal inloggade: 1  
     

Copyright © 2007 www.ASPsidan.se
ingen sponsrar längre ASPsidan med Dedikerad Server
ASPsidan RSS
   
 XHTML / CSS
Det tog 0,0469 sekunder att ladda sidan