webForumDet fria alternativet

Reda ut det där med databaskopplingar...

ASPur ASP

21 svar · 605 visningar · startad av plelkes

Medlem sedan mars 2002823 inlägg
Frågan#1

...skulle jag behöva hjälp med*suck*

  1. jag antar att om man skall köra på typ Brinkster, så är DSN-löst att föredra. Rätt eller fel?

Men hur skall kopplingen skrivas? Webeye föredrar:

För Access 2000:
<%
Set Databas = Server.CreateObject( "Adodb.Connection" )
Databas.Provider = "Microsoft.Jet.OLEDB.4.0"
MdbFilePath = Server.MapPath( "/cgi-bin/databas.mdb" )
Databas.ConnectionString = "Data Source='" & MdbFilePath & "'"
Databas.open
%>

Den i detta forum så förhatliga webstudio rekomenderar:

<% Set MinCon = Server.CreateObject("ADODB.Connection")
MinCon.Open "driver={Microsoft Access Driver (*.mdb)};dbq=c:\inetpub\wwwroot\databas\adressbok.mdb"

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

rs.Open Hamta, MinCon, adOpenStatic, adLockOptimistic %>

Medan i boken Beginning ASP Databases, Wrox-förlag förordrar:

<% set conn=Server.CreateObject("ADODB.connection")
      set rs=Server.CreateObject("ADODB.recordset")
      strSource = strSource & "; DBQ=c:\inetpub\wwwroot\databas\adressbok.mdb" 
conn.ConnectionString =strSource
conn.Open
  1. vilken av ovanstående metod skall jag välja?
  2. varför just detta?
Medlem sedan apr. 20003 174 inlägg
#2

Mig veteligen är det Vides förslag som är att rekommendera,
dock skriver jag ut den så här då jag tycker det ser enklare ut:

[RED]Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source ="& Server.MapPath("databas.mdb")

       '// Gör en massa saker..

Connect.Close
Set Connect = Nothing[/RED]
Medlem sedan mars 20002 836 inlägg
#3

Jet Oledb 4.0 har funnits i många år. Tyvärr finns det fortfarande "klåpare" som använder sig av den "förkastilga" gamla access-drivern.
Jet Oledb 4.0 har typ 100 ggr så bra prestanda mot drivern. Finns en artikel ngnstans på 4guys som jag tyvärr inte hitta nu (finns ett par st där att leta bland) där de har ett performence test med olika drivisar och Jet 4 "vann" överlägset.

Så, använd Jet Oledb 4 sättet.

Den med att skriva in sökvägen direkt i öppnandet av recordsetet kan man oxå göra om det är ända hämtningen mot db.

Har inte sett eller gjort egna test med den varianten men kan tänka mig att connectionen skapas i ADODB.Recordset komponenten .....

Ett lätt sätt är ju att själv köra olika sorters test. Finns beskrivet i massor här på forumet. Sök på Timer() ..... blir nog en hel del :e

cya,
PatrikB
cya,
PatrikB

Medlem sedan mars 2002823 inlägg
#4

Jag blir förvirrad! Vet inte varifrån jag skall lära mig detta!
Har börjat på

  • webstudio
  • den av wf högt rekomenderade nybörjarboken: ASP av Erik Ronne
  • Beginning ASP databases

men det de lär ut är inte hellt funkis enligt er gurus. Dessutom lär de ut på olika sätt*suck och stön*
Därför tänkte jag prova med ngn av följande

  1. Beginning Active Server Pages 3.0
  2. Lär dig ASP 3.0 på 3 veckor

Vilken av böckerna anser ni vara mest korrekta?

Medlem sedan juni 20022 599 inlägg
#5

driver={Microsoft Access Driver (*.mdb)}; är en ODBC-driver.

Provider = Microsoft.Jet.OLEDB.4.0 är en OLEDB-driver.

OLEDB är en nyare standard för databasdrivisar än ODBC.

Nya standarder är oftast bättre/snabbare/stabilare än gamla standarder. I det enskilda fallet beror det naturligtvis på vem som skrivit drivern, men i detta fallet är Microsoft som skrivit båda. Av detta skäl bör man välja OLEDB-drivern.

ADO:n som oftast används i ASP har inget stöd för att direkt tala med ODBC-drivers. Väljer man ändå en sådan kommer ADO:n att lägga in en generell mellan-driver (en brygga). Detta ger ett onödigt mellanlager och är ytterligare en anledning till att välja OLEDB-drivern när man använder ADO:n.

Slutsats: Man använder ODBC bara om man måste.

Medlem sedan feb. 200112 078 inlägg
#6

men det de lär ut är inte hellt funkis enligt er gurus. Dessutom lär de ut på olika sätt*suck och stön*

Jag tror inte du behöver krångla till det så mycket. Antagligen ser deras öppning av databasen annorlunda ut (de använder kanske en annan driver), men dett påverkar inte resten av koden nämnvärt. Kör med Jet OLEDB:n tills dess att den specifika koden i exemplena kräver (som niko sa ovan) att du kör ODBC.

Medlem sedan mars 20002 836 inlägg
#7

... och, du har frågat här oxå och jag gav detta svar: http://www.webforum.nu/showthread.php?s=&postid=569112#post569112

cya,
PatrikB

Medlem sedan mars 2002823 inlägg
#8

... och, du har frågat här oxå och jag gav detta svar: http://www.webforum.nu/showthread.p...9112#post569112

Patrik: är väl medveten om "dubbelpostning", men i detta fall gjorde jag bedömningen att dubbelposting var försvarligt eftersom det hängde ihop med båda trådarna!*ler*

Däremot undrar jag över kodsnutten:

Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source ="& Server.MapPath("databas.mdb")

       '// Gör en massa saker..

Connect.Close
Set Connect = Nothing
  • räcker det verkligen med Seerver.MapPath("databas.mdb")?
  • varför inte Server.MapPath( "/cgi-bin/databas.mdb" ) ?
  • eller c:\inetpub\wwwroot\databas\adressbok.mdb
  • och varför inte det - tacksam för "pedagogisk" förklaring
Medlem sedan feb. 200112 078 inlägg
#9

Vill du bygga en dynamisk webbplats som har stöd för att flyttas till andra servrar som inte har samma fysiska katalogstruktur som din egen, då måste du använda server.mappath. Och ja, de räcker att skriva bara namnet på databasen, förutsatt att den ligger i samma mapp som den anropas ifrån. I en cgi-bin-mapp ser jag ingen anledning att ha en databas i, döp den till 'data' istället och lägg den där i, eller ännu bättre, utanför webbroten.

Medlem sedan mars 2002823 inlägg
#10

Tack för ditt snabba och pedagogiska svar OveRRidE*ler*

Ditt inlägg föranleder dock två undringar

I en cgi-bin-mapp ser jag ingen anledning att ha en databas i, döp den till 'data' istället och lägg den där i, eller ännu bättre, utanför webbroten.

Hur skulle Server.MapPath ( ) se ut om:

  1. databasen ligger i mappen "db"
  2. databasen är utanför wwrooten a) dels på hårddsiken, och dels på typ Brinkster
Medlem sedan dec. 19998 577 inlägg
#11

Om mappen databasen ligger i är i samma nivå så rooten på din web:

strPath = server.mappath("/") & "/../db/dindatabas.mdb"
Medlem sedan mars 20015 287 inlägg
#12

På Brinkster lärdu inteha en chans att lägga den utanför webbroten, där har jag för mig att du till och med måste placera den i en speciell mapp. (Med läs o skrivrättigheter.)

Medlem sedan jan. 20032 285 inlägg
#13

solbulle skrev:

På Brinkster lärdu inteha en chans att lägga den utanför webbroten, där har jag för mig att du till och med måste placera den i en speciell mapp. (Med läs o skrivrättigheter.)

Joo, det stämmer. Jag själv har ju min sida på brinkster (ve och fasa ;)), och man MÅSTE placera databaser (och filer man skapar/skriver till med hjälp av FSO) i en mapp som heter db. Sorligt säger jag bara :p

Medlem sedan mars 2002823 inlägg
#14

Hej :q

En fråga om nedanstående kodsnutt

strPath = server.mappath("/") & "/../db/dindatabas.mdb

Säg att jag på min hårddisk har databasen i c:\inetpub\wwwroot\databas\databas.mdb

Blir då min databas

Set Connect = Server.CreateObject("ADODB.Connection") 
Set strPath = server.mappath(”/”) & ”wwroot/db/databas.mdb
Connect.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source ="& Server.MapPath("databas.mdb")
Medlem sedan dec. 19998 577 inlägg
#15

Nä, jag antar att wwwroot är din rootkatalog, och dit kommer du med server.mappath("/"), så det är bara att stega in i db-mappen:

Set Connect = Server.CreateObject("ADODB.Connection") 
Connect.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source ="& server.mappath("/") & "/db/databas.mdb"

Hur det ser ut på Brinkster vet jag inte, men jag kan anta att din rootkatalog inte är wwwroot, utan ett namn, vilket inte skall spela någon roll om personerna på Brinkster konfigurerat rätt. ;)

PS. Du skall inte ha Set framför när du tilldelar en variabel en sträng, endast när du tilldelar en variabel ett objekt. DS.

Mvh, Vide

Medlem sedan maj 20023 372 inlägg
#16

Intressant tråd detta. :)

Medlem sedan dec. 20003 887 inlägg
#17

Vide skrev:

Hur det ser ut på Brinkster vet jag inte, men jag kan anta att din rootkatalog inte är wwwroot, utan ett namn, vilket inte skall spela någon roll om personerna på Brinkster konfigurerat rätt. ;)

Känns pålitligt ;)

MapPath — to map the current virtual path to a physical directory structure. You can then pass that path to a component that creates the specified directory or file on the server.

Medlem sedan mars 2002823 inlägg
#18

Tack för all hjälp, ni är fantastiska - fast det visste jag ju sen förrut :birp

Här kommer lite flera frågor - hoppas ni står ut med mig ;)

Fick denna kod snutt från VIde:

Data Source ="& server.mappath("/") & "/db/databas.mdb"
  • skulle vara tacksam lite förklaring, eller hänvisning till lämplig länk

Dessutom skrev Vide även

Du skall inte ha Set framför när du tilldelar en variabel en sträng, endast när du tilldelar en variabel ett objekt

  • vet att detta är ett ASP-forum, men har ni förslag på en pedagogisk och bra bok i SQL?
Medlem sedan dec. 19998 577 inlägg
#19

Data Source ="& server.mappath("/") & "\db\databas.mdb"

Data Source är en paramenter till ADO. Du tilldelar den värdet av en sökväg.

Server.MapPath("/") åter ger en sträng som innehåller den lokala sökvägen till den virtuella root du står i.
T.ex: "C:\inetpub\wwwroot"

Till detta häktar vi på en sträng för att fullborda sökvägen till databasen.

server.mappath("/") & "\db\databas.mdb"
... blir...
"C:\inetpub\wwwroot\db\databas.mdb"
Alltså den sökvägen till databasen. Du kan anropa denna kodsnutt i vilken mappstruktur som helst under samma root och ändå få samma sökväg.

Medlem sedan dec. 19998 577 inlägg
#20

plelkes skrev:

Dessutom skrev Vide även

Du skall inte ha Set framför när du tilldelar en variabel en sträng, endast när du tilldelar en variabel ett objekt

  • vet att detta är ett ASP-forum, men har ni förslag på en pedagogisk och bra bok i SQL?

Hur variabler i VBS fungerar har inget med SQL att göra. :)
Jag personligen har än så länge inte hittat någon bok som håller något bra mått, men det lär finnas, det får någon annan tipsa som inte är så kritisk. ;)

135 ms totalt · 3 externa anrop · v20260731065814-full.25f56b17
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)