Vraag & Antwoord

Webprogrammeren & scripting

[ASP] foutmelding: "Database al in gebruik"

21 antwoorden
  • Ik krijg bij een asp pagina de volgende foutmelding: Microsoft OLE DB Provider for ODBC Drivers error '80004005' [Microsoft][ODBC Microsoft Access Driver] Could not use '(unknown)'; file already in use. Het bestand wordt door niemand anders gebruikt en staat ook niet open. Groeten
  • Kijk even of de rechten op de directory en het mdb bestand goed staan. En/of installeer de laatste MDAC versie.
  • Dat heb ik gedaan, want het schrijven lukte niet toen deed ie het wel goed en nadat ik de schrijfrechten heb verandert werkte het niet meer!
  • Het zal wel aan mij liggen maar ik word niet echt wijzer van je verhaal. Heb je nu nog een probleem? Zo ja, heb je al nagezocht wat de juiste instellingen moeten zijn en deze uitgeprobeerd?
  • Sorry voor de onduidelijke uitleg. Nu ik het nalees snap ik er zelf ook niet veel meer van. Het probleem is opgelost, ik had namelijk twee keer dezelfde verbinding aangemaakt. Dus eerst maakte ik deze verbinding aan: set connDB = Server.CreateObject("ADODB.Connection") connDB.Open "DSN=mijndb" maar verder op in de pagina stond al een verbinding met een iets andere naam. set conDB = Server.CreateObject("ADODB.Connection") conDB.Open "DSN=mijndb" nadat ik er een vebinding had verwijderd deed alles het weer In ieder geval het is opgelost hartelijk dank.
  • Bij mij treed dit probleem ook op. Door dat testpagina's soms nog niet goed werken worden Connection objecten niet gesloten. Sluit ik de explorer af dan blijft de connectie (DSN=DBNAME) op de achtergrond nog open. Hoe los ik dit op?
  • zomaar een wilde gok: Je zou de IIS service een keer kunnen restarten of evt. binnen IIS de site kunnen "unloaden" cq. stoppen en starten.
  • Het restarten van IIS service lost dit probleem niet op. Een sessie veloopt toch als je het venster sluit? In global.asa in de procedure Session_onEnd() sluit ik alle connecties en set ik de objecten op Nothing. Zelfs dan blijf ik die foutmelding krijgen en kan ik het alleen oplossen door de server te herstarten. Hoe kun je testen dat global.asa wordt gebruikt? RJS Hard
  • En waar open je de connections? Na de executie van een script worden connections die geopend zijn in het script automatisch opgeruimd (tenminste dat zou zo moeten zijn). Maar om zeker te zijn, en om je code schoon te houden, raad ik aan om gewoon na het gebruik van je connection deze zelf te sluiten en op Nothing te zetten binnen je code. Bij mijn weten reikt de scope van de connection objecten ook niet tot session niveau en dus is het sluiten van de objecten in de session_onend zinloos, aangezien deze daar dus niet meer bestaat. Tenzij je de connection in een session object hebt zitten (wat overigens over het algemeen wordt afgeraden). Overigens zou je het gebruik van de global.asa kunnen testen door daarin een logging-routine in te bouwen (iets schrijven naar database of textfile). HTH
  • En waar open je de connections? Na de executie van een script worden connections die geopend zijn in het script automatisch opgeruimd (tenminste dat zou zo moeten zijn). Maar om zeker te zijn, en om je code schoon te houden, raad ik aan om gewoon na het gebruik van je connection deze zelf te sluiten en op Nothing te zetten binnen je code. Bij mijn weten reikt de scope van de connection objecten ook niet tot session niveau en dus is het sluiten van de objecten in de session_onend zinloos, aangezien deze daar dus niet meer bestaat. Tenzij je de connection in een session object hebt zitten (wat overigens over het algemeen wordt afgeraden). Overigens zou je het gebruik van de global.asa kunnen testen door daarin een logging-routine in te bouwen (iets schrijven naar database of textfile). HTH Ik heb de Connection object inderdaad op session niveau. Die wordt geopend in een login script. Als het script goed verloopt dan wordt de connectie gesloten en geredirect naar een pagina waar de database kan worden gewijzigd. Op die pagina wordt dezelfde connectie gebruikt als op de login pagina. Als er een error is op de database pagina dan wordt de connectie niet verbroken doormiddelvan bijvoorbeeld: objCon.Close Set objCon = Nothing Sluit ik het venster en open ik de login pagina in een nieuw venster dan krijg ik die foutmeling.
  • [quote:3f4df5a19e="RJS Hard"]Ik heb de Connection object inderdaad op session niveau.[/quote:3f4df5a19e] Ik zou iig starten met het connection object uit de session te halen en gewoon de connection binnen het asp script te openen en te sluiten. Daarmee voorkom je in ieder geval dat onnodige resources worden verspild in sessions (vergeet niet dat deze een standaard timeout hebben van 20 min en dus al deze tijd de connection in stand houden als deze niet netjes gesloten wordt).
  • Ik heb de Connection objecten uit de sessie niveau gehaald. Wel heb ik de recordset objecten nog op sessie niveau. Het mocht niet baten moet ik nu de recordset objecten ook uit het sessie niveau halen?
  • Het ligt duidelijk aan dat de als de sessie timeout nog niet voorbij is dat de objecten op sessie niveau de connectie met de DSN openhouden. Ook al is het venster gesloten. Ik zal opzoek moeten naar de mogelijkheid om met de zelfde systeem DSN meedere connecties te hebben? RJS
  • [quote:a49b63c692="RJS Hard"]... Ook al is het venster gesloten ...[/quote:a49b63c692] Pas op: het sluiten van een browservenster betekent niet dat de session wordt afgesloten!!! Als een session niet via het script wordt beeindigt dan zal deze pas na de ingestelde tijd verlopen (afaik). Dus ook recordset-objecten kan je het best binnen je scripts laten. Het is natuurlijk onder normale omstandigheden geen enkel probleem om meerdere connecties te openen. Heb je al op MSDN gekeken of je iets kan vinden mbt je probleem cq. foutmelding? Of heb je al geprobeerd om een DSN-less connectie op te zetten?
  • Ik heb al met DSN-Less connecties gewerkt maar het leek mij professioneler of beter om met DSN te werken. De recordset objecten wil ik graag op sessie niveau houden. Dat werkt makkelijker als je een record in een tabel wilt wijzigen. Bijvoorbeeld Je klikt op een record in een tabel en je wordt geredirect naar een pagina met een formulier om de waarden te wijzigen. Als het recordset object dan op sessie niveau is dan kun je daar gelijk de waarden van het te wijzigen record halen. Weet iemand misschien een andere manier om dit te realiseren? RJS
  • Tegenvraag: "Waarom is het professioneler of beter om met een DSN te werken?" Je kan beter in de verwerkingspagina eventuele gegevens opnieuw opvragen. Of desnoods de waarden uit de database in het session-object zetten. Maar een compleet ADO object zou ik i.i.g. nooit in de session zetten.
  • Waarom zou je een ADO object niet in de session plaatsen. Gewijzigde gegevens worden dan gelijkt opgeslagen in de database zonderdat je ze uit een andere variable in de datbase opslaat.
  • [quote:efbeab3c49="RJS Hard"]Waarom zou je een ADO object niet in de session plaatsen.[/quote:efbeab3c49]Bijvoorbeeld omdat je dan problemen kan krijgen die je weer in een forum moet plaatsen om ze opgelost te krijgen ;) :lol:
  • Das nu het leuke van programmeren dat oplossen van problemen. Zo'n forum bij de hand is trouwens verek handig. Leve het internet. 't gaat trouwens al n stuk beter. Ik heb alle ADO objecten uit de sessie gehaald. Alle bestanden die nodig zijn include ik zodat ik de objecten in elke asp bestand kan gebruiken. Alleen het Recordset object waar in de database is geopend houw ik in de sessie. Ik wil de site wel ff online zetten
  • Oké ik wil die laatste ADO object ook uit de sessie halen maar dan heb ik vraag als ik een record wil wijzigen dan heb ik de positie nodig waar de recordt geplaatst is in de database. De waarde van de positie kan ik dan meegeven naar de pagina waar het record moet worden gewijzigd. Ik zou natuurlijk de in de database een id veld die automatisch nummert kunnen aanmaken maar ik wil dat de site ook werkt met databases die dit niet hebben

Beantwoord deze vraag

Weet jij het antwoord op deze vraag? Registreer of meld je aan met je account

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.