08. august 2002 - 11:08Der er
19 kommentarer og 1 løsning
connections og global.asa
Jeg har et lille site bestående af ca. 30 ASP filer, som alle har
Set Con = Server.CreateObject("ADODB.Connection") Con.Open "PROVIDER=MICROSOFT.JET.OLEDB.4.0;DATA SOURCE=\\server\mappe\database.mdb" SQL = "SQL-streng" Con.Execute( SQL )
Er det ikke muligt at lægge alt det ind i f.eks. global.asa?
Tænker på at oprette f.eks. en variabel som kan indeholde "PROVIDER=MICROSOFT.JET.OLEDB.4.0;DATA SOURCE=\\server\mappe\database.mdb", så hvis databasen flyttes, skal der kun rettes ét sted....
Ved ikke om du kan ligge den i global.asa, men du kan ligge det i en database.inc fil og inkluder den i asp siden <!-- #include file="inc/database.inc" -->
Tjae, du kunne vel lige så godt lave en DSN til databasen, og så bare smide den i en indclude fil. Du skal bare ikke kalde dem inc til efternavn. Men kald dem asp i stedet. IIS kender ikke inc og behandler den som en almindelig tekstfil, så alle kan hente dine koder :D
Kan jeg ikke lave det lidt nemmere, så som at lave en funktion (f.eks. i global.asa), som jeg så kan kalde, som opretter connection-objektet, modtager SQl-strengen og returnerer RecordSet'et?
<script language="vbscript" runat="server">sub Application_OnStart getcustomers end subsub getcustomers set conn=Server.CreateObject("ADODB.Connection") conn.Provider="Microsoft.Jet.OLEDB.4.0" conn.Open "c:/webdata/northwind.mdb" set rs=conn.execute("select name from customers") Application("customers")=rs.GetRows rs.Close conn.Close end sub</script>
Hvad du end gør, så lad være med at tænke på din global.asa til noget der har med databasen at gøre. Og ham, der har lavet det script, har ikke tænkt det helt igennem ... tror jeg ik. Det script der, smider kunderne i en variabel første gang der er en Session på din server, og opdateres først igen, når du starter din server igen. Hvis du så opdaterer databasen, skal du også genstarte din server. Hold dig til include filer.
That's true, det gør den, men jeg kunne vel også lægge det i en session_onStart.......hmm............ Det der med include-filer løser ikke rigtig problemet, for <!-- #INCLUDE FILE="fil.asp" --> skal nemlig sættes ind lige nøjagtig der hvor der før stod Set Con = Server.CreateObject("ADODB.Connection") Con.Open "PROVIDER=MICROSOFT.JET.OLEDB.4.0;DATA SOURCE=\\server\mappe\database.mdb"
Jeg ville meget hellere kalde en funktion der så kunne udføre jobbet med at connecte til database og hente RecordSet'ene....
Du kan sagtens lægge strenge ud i global.asa filen. Den skal bare se sådan her ud: sub Application_OnStart Application("streng1") = "PROVIDER=MICROSOFT.JET.OLEDB.4.0;DATASOURCE=\\server\mappe\database.mdb" End Sub
Så kan du kalde den på dine sider med Application("streng")
bocker, her er et eksempel på en af mine filer, hvis jeg bruger din foreslåede include:
<!-- #INCLUDE FILE="header.asp" --> <% user = request("user_id") %> <!-- #INCLUDE FILE="DB-config.asp" --> <% SQLDeleteUser="DELETE * FROM Brugere Con.Execute( SQLDeleteUser ) Con.Close Set Con = nothing Response.Redirect "useradmin.asp" %>
Det ser ikke for godt ud og eftersom jeg har flere forskellige database knyttet til webstedet, skal der en del includes til, fremfor bare et kald til en funktion i f.eks. global.asa
oprettet et inklude fil der hedder connection.inc.asp. I denne fil har jeg lavet en række underrutiner til at connecte, disconnete og hente et recordsæt. inkludefilen inkluderes i toppen af det modul som skal tilgå databasen. Din kode bliver på den måde meget mere overskulig da du ikke skal have INCLUDE sætninger stående blandet med asp koden.
her er min funktion til at hente et recordsæt:
' ================================== Function GetRecordset(ByRef strSQL ) DIM Conn
Set Conn = ConnectionOpen If Err.Number = 0 Then Set GetRecordset = Conn.Execute(strSQL) Else GetRecordSet = Null End If ConnectionClose(Conn) End Function
ConnectionOpen og ConnectionClose(Conn) består bare af de normale linier til at åbne og lukke forbindelsen (dem har du jo allerede).
puppetmaster --> Hvorfor samler du ikke dine data i én database? Anyway, jeg vil stadig benytte include metode, hvor du også sagtens kan åbne flere databaser...
Det kan da diskuteres. Jeg valgte at svare på dit spørgsmål, om hvorvidt man kunne lægge en variabel ind i global.asa filen. Det kan man, og så har jeg forklaret hvordan.
Fordelen med at bruge global asa filen frem for slamsugers øsnign er at du kan have den samme side liggende på flere webhoteller/sites, og så bare have forskellige global.asa-filer.
Synes godt om
Ny brugerNybegynder
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.