Just nu i M3-nätverket
Gå till innehåll

ODBC uppkoppling


oualid

Rekommendera Poster

Hej.

 

Vi har en W2K server som har IIS (webbserver) igång.

På den server finns det en MSaccess mdb fil. Vi har en php script som försöker komma åt mdb filen via ODBC.

Denna lösning har fungerat utan problem länge tills för nån vecka sedan fick vi följande fel:

 

"Warning: odbc_connect(): SQL error: [Microsoft][Drivrutin för ODBC Microsoft Access] Det går inte att använda '(okänt)'. Filen används redan., SQL state S1000 in SQLConnect in c:\inetpub\webb\info.php on line 25

odbc not connected"

 

Vi har kollat rättighet på filen och det är: Read & write för alla.

Vi har kopierat access filen till en annan map och gett read/write access för alla utan resultat.

Dessutom har vi bytt ut IIS mot Apache och det fungerade ett tag men sen blev det fel igen.

 

Nånting måste ha hänt.

 

Är det nån som har råkat ut för samma problem?

 

Funktionen som naropas i php när det blir fel är:

 

$conn = odbc_connect("database1","","");

 

 

 

Länk till kommentar
Dela på andra webbplatser

Är det nån som har råkat ut för samma problem?

Ja, alla som gör misstaget att tro att Access är en databashanterare råkar på det =) Uppgradera till ett riktigt system så slipper du problemen. MySql-konton är oftast gratis på webbhotell så kör på det istället.

 

Länk till kommentar
Dela på andra webbplatser

Jag håller med! Jag skulle föredra ett LAMP system istället för ett uselt W2K.

 

I det här fallet går det tyvärr inte att byta system, kunden vägrar.

Dessutom används mdb filen av en windowsapplikation som kunden använder dagligen.

Det enda sättet är kanske att installera om hela systemet eller uppgradera till Windows server 2003.

 

 

Länk till kommentar
Dela på andra webbplatser

Jag håller med! Jag skulle föredra ett LAMP system istället för ett uselt W2K.

Inget fel alls med W2K, det är inte det som är problemet. I serverversion står sig Windows precis lika bra som Unix. Saken är att Access inte är mer databas än Excel eller en flatfile-db i unix är. Det är avsett för klientsystem och absolut inte för fleranvändaranvändning, vilket en webbapplikation med hyfsat tung besöksfrekvens är. Det här är inget du kan fixa således, eftersom det alltså är en begränsning i Access. Det är dock väldigt lätt för er att förklara just detta för kunden om denne vägrar byta. Det är inte ert ansvar att de är idioter =)

 

(Anjuna Moon med lång erfarenhet av korkade kunder)

 

 

[inlägget ändrat 2006-08-26 09:58:40 av Anjuna Moon]

Länk till kommentar
Dela på andra webbplatser

Ett hårdhack-sätt att komma runt ditt problem är följande: Replikera databasen och låt din webbapplikation anropa Access-databas från mapp X beroende på en slumpfunktion. Lägg alltså upp x antal identiska accessfiler och låt varje session slumpa fram filnamnet till den fil du skapar kopplingssträngen till.

 

Det är ju en fullösning, men om kunden vägrar annat så varför inte.

 

[inlägget ändrat 2006-08-26 10:05:54 av Anjuna Moon]

Länk till kommentar
Dela på andra webbplatser

Menar du att detta problem beror på antal accesser till mdb filen?

Innebär det att om så att säga 10 pers försöker komma åt mdb filen via php då får man detta problem?

I så fall var går gränsen??

 

[inlägget ändrat 2006-08-26 11:01:37 av oualid]

Länk till kommentar
Dela på andra webbplatser

Innebär det att om så att säga 10 pers försöker komma åt mdb filen via php då får man detta problem?

I så fall var går gränsen??

Access och Jet-motorn är klientbaserad och skall ses som ett fildelarsystem. I ett fleranvändarsystem så används Jet som en klientmotor där varje användare läser, skriver och låser databasfilen. MySql, Sql Server, Oracle osv är däremot baserade på en client/server-arkitektur där hanteringen av många samtidiga användare sköts helt annorlunda.

 

10 samtidiga användare i en webbmiljö för Access skulle jag nog se som ett absolut maximum innan den helt bryter ihop, oavsett Microsofts specifikationer. Jet-motorn är helt enkelt inte avsedd som server.

 

 

[inlägget ändrat 2006-08-26 11:34:57 av Anjuna Moon]

Länk till kommentar
Dela på andra webbplatser

Att tillägga är att Accessfiler har en förmåga att bli korrupta och kräva reparering när för många har försökt låsa filen samtidigt. Det är helt enkelt en olycka "wating to happen" =)

 

Länk till kommentar
Dela på andra webbplatser

OK!

Jag ska helt enkelt kolla på returvärdet på odbc_connect() funktionen i php.

Om den är FALSE då innebär det att gränsen är nådd.

 

 

Länk till kommentar
Dela på andra webbplatser

ag ska helt enkelt kolla på returvärdet på odbc_connect() funktionen i php.

Om den är FALSE då innebär det att gränsen är nådd.

Vet inte hur väl PHP hanterar exceptions men förhoppningsvis fungerar det. Men testa gärna mitt förslag om multipla kopior på databasen och låt PHP slumpa fram vilken den skall försöka koppla till. Då bör du iallafall få en bättre fördelning. Kommer sajten upp i alltför många besökare så skall du dock tvinga kunden att välja ett bättre alternativ.

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...