Toon posts:

verschillende access db's vanuit 1 asp script?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoi, heeft iemand enig idee hoe ik, afhankelijk van user's choice, een specifieke access database kan openen via een DSN-less script?

Nu gebruik ik voor elke database een apart DSN-script, wat ervoor zorgt, dat ik voor elke database een aparte set files nodig heb. Ik wil liever niet met ODBC werken, daar ik dan op de webserver moet gaan liggen kloten, wat de stabiliteit niet ten goede komt. Vandaar DSN-less.

vb:
connection-file: 'database1.asp'
<%
MM_Database_STRING = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("/databases/database1.mdb")
%>

Waarna elke webpagina die gebruik wil maken van deze specifieke database een verwijzing krijgt naar 'database1.asp' en elke webpagina die 'database2.mdb' wil gebruiken een verwijzing naar 'database2.asp', wat dus zéér omslachtig is.

Liever wil ik de ServerMapPath(".. relatief krijgen, of de verwijzing naar de Connection-file afhankelijk maken van een session of application variable, maar hoe?

Verwijderd

vb:
connection-file: 'database1.asp'
<%
MM_Database_STRING = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("/databases/database1.mdb")
%>
Laten we er even van uit gaan dat de user een keuze maakt door middel van een form. Kun je dan niet zoiets doen van

<form action="getDbaseNr.asp" method="post">
<select name="dbaseNr">
<option value="1">Dbase1</option>
<option value="2">Dbase2</option>
</select>
<input type="submit">

en in getDbaseNr.asp:
<%
session("dbaseNr") = request.form("dbaseNr")
%>

en dan in je connection.asp (welke je natuurlijk ALTIJD als include file gebruikt!)

<%
MM_Database_STRING = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("/databases/database"&session("dbaseNr")&".mdb")
%>

Verwijderd

Topicstarter
Technische informatie (voor ondersteunend personeel)

Soort fout:
Compilatiefout Microsoft VBScript (0x800A03EE)
')' wordt verwacht
C:\xxxx\FILLIN\../Connections/ConnectionEdit.asp, line 7, column 99
MM_Database_STRING = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath(" & session("dbase") & ")

column 99 is precies op het moment dat ik de " & session heb staan. Dus in plaats van het openen van nog een variabele wil & moet hij de vorge sluiten.. :(

Daar ik nog een variabele in de session("wil openen, verwacht ik dat het weinig zin heeft de Server.MapPath uit te schakelen, los van de problemen die daarmee al rijzen. :(

Toch bedankt, heb je nog betere suggesties?

Verwijderd

Topicstarter
Andere mogelijkheid:

zou het niet mogelijk zijn via een if.. then.. elseif.. statement te werken?

dus if xx = "name1" then #include("..
elseif xx = "name2" then #include("..

waarbij de include de connectiefile bevat?

Voorlopig werkt het als ik dit zeg:

<%
If Session("dbase") = "name1" Then
MM_Database_STRING = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("/databases/Database1.mdb")
ElseIf...
enz.
End If
%>

Dan zou het dus mogelijk moeten zijn om een connectie te leggen naar een database met namen en te zeggen:
For xx in 'database_tableNames' do
If table = name then
dbase = database_tabeAddress
ehh..

of zoiets..
Toch?

Verwijderd

Topicstarter
Hebbes!

gedachtengang:
Website variabele:
#include file 'vergelijking.asp'

vergelijking.asp:
if dbase = name1 then
#include name1database.asp
elseif dbase = name2 then
#include name2database.asp
else
error
end if

Cool, might work!

Kost alleen veel verwerkingstijd natuurlijk, wanneer er meer dan 100 dbases in het spel zijn..

In elk geval hoef ik nu & hiermee nog maar 1 file aan te passen + 1 connectiestringfile in te voegen per dbase en kan de rest daarop leunen.

:P :P :P :P

  • Gert
  • Registratie: Juni 1999
  • Laatst online: 05-12-2025
Werkt niet, want hij include eerst alles en gaat dan pas asp "code" verwerken.

  • The Source
  • Registratie: April 2000
  • Laatst online: 17:49
Gewoon zonder include werken en afhankelijk van je variable de juiste connectie openen.

Waarom zou je Server.MapPath relatief willen hebben? Komt de flexabiliteit van het script niet te goede hoor.

Ik zie dat je met Ultradev werkt: MM_database_STRING

Verwijderd

Topicstarter
Niet Correct.
Zie onderstaand bericht; include-load doet niet terzake wanneer er geen vervolg-include is.

Goed, leg mij eens uit hoe ik met een variabele een connectie kan toepassen?

Als ik in de connectiestring geen variabele kwijt kan, waar & hoe dan wel?

String:
MM_Database_STRING = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("/databases/database.mdb")

Zoals hierboven al aangegeven, krijg ik het niet voor elkaar om de 'dbase' variabele in de plaats van de fysieke database te plaatsen.

Dan zou dat eruit zien als zoiets:

MM_Database_STRING = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath(" & Session("dbase")")

Maar dan krijg ik consequent errors, beginnend met een roep om het afsluiten van Server.MapPath, terwijl de session-variabele 'dbase' wel degelijk is gevuld met de correcte locatie van de database..

Daar ik na Server.MapPath nog 2x een " gebruik, kom ik er niet met het weghalen van Server.MapPath.

Iemand?

Oh, ps. Ik gebruik Server.MapPath om de site op verschillende lokaties te kunnen bewerken, allen met vaste PC's, zodat ik enkel een sync hoef uit te voeren op gewijzigde files.

Verwijderd

Topicstarter
Op zaterdag 04 mei 2002 08:12 schreef Gert het volgende:
Werkt niet, want hij include eerst alles en gaat dan pas asp "code" verwerken.
Ja, maar wacht even:
er ís nog maar 1 include-file!
En binnen deze includer wordt bekeken welke string moet worden geladen. Ik mag namelijk ASP code in een include gebruiken, daar het ook mogelijk is een include vanuit een include te laden..

En dus is het wel degelijk mogelijk om, middels die ene vergelijkingsfile, een include te bouwen die a.d.h.v. een sessievariabele bepaalt welke string wordt geopend!

Of geldt dit ook voor dbase-strings? Nee toch?

Volgende stap: de gehele MM_database_string in een sessievar plaatsen.

Zou het werken als ik dit zeg:

MM_database_STRING = Session("dbasestring")

waarbij dbasestring = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("/databases/databasex.mdb"), wat dan weer is gespecificeerd in de voorgaande include-file.

Om vervolgens bij de activeconn dit te doen:

set RecordsetMenu = Server.CreateObject("ADODB.Recordset")
RecordsetMenu.ActiveConnection = MM_database_STRING
....

Ziet er als volgt uit:
sessionvar dbase = namex
include vergelijking.asp

in vergelijking.asp:
if session("dbase") = "namex" then
set session("dbasestring") = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("/databases/databasex.mdb")
else if session("dbase") = "name1" then
set session("dbasestring") = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("/databases/database1.mdb")
end if

dan
set MM_database_STRING = session("dbasestring")
set RecordsetMenu = Server.CreateObject("ADODB.Recordset")
RecordsetMenu.ActiveConnection = MM_database_STRING

Hiermee omzeil ik wellicht het meerdere malen aanroepen van die include-file, welke de vergelijking bevat voor alle online databases.

Iemand?

ps. let niet op precieze code, daar kom ik nog wel op/uit.

En de laatste voor vandaag:
Als ik de gehele string uit een database haal, gebaseerd op de keuze van de user, moet het toch mogelijk zijn de variabele MM_database_STRING bij het openen van elke nieuwe pagina te vullen met de data, opgeslagen in de sessievar dbasestring?

  • Fiets
  • Registratie: Maart 2000
  • Nu online

Fiets

A.K.A. Bambi

moet:

Server.MapPath(" & Session("dbase")")

niet zo?

Server.MapPath(Session("dbase"))

Maar 2 DPC'ers op DHEP! Ahum, nu nog maar 0 aktieve leden...


Verwijderd

Topicstarter
I'll give it a shot.
Klinkt namelijk heel aannemelijk.

Volgens mij, na even zoeken, werkt het nog ook!
Dank je WEL!!!!!

:P :P :P :P

Ondertussen wil ik je even melden dat je ondertitel 2 kleine errors bevat:
dat ipv de & bestaan ipv bestaat.

Verwijderd

Topicstarter
OK, definitieve oplossing:
Session geabstraheerd van login username:

<%
Session("DBUSER") = "/data/" + Session("MM_Username") + ".mdb"
%> :9


include file (<!--#include file="../Connections/dbase.asp" -->):
<%
USER_STRING = "Driver={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath(Session("DBUSER"))
%> :)

Download link:
<a href=<%= Session("DBUSER") %>>download</a> }:O

Via Dreamweaver niet als active connection te herkennen, dus manueel editen van recordsets is een must. |:( Sample:

<%
set recordsetSample = Server.CreateObject("ADODB.Recordset")
recordsetSample.ActiveConnection = USER_STRING
recordsetSample.Source = "SELECT * FROM datatable"
recordsetSample.CursorType = 0
recordsetSample.CursorLocation = 2
recordsetSample.LockType = 3
recordsetSample.Open()
recordsetSample_numRows = 0
%> :7

Zelf heb ik het opgelost door een sample page te bouwen die datgene kon wat ik wilde dat het kon doen, om vervolgens de dynamische connectie te implementeren.

Ik hoop dat anderen hier nog iets aan zullen hebben..
8-) 8-) 8-) 8-)
Pagina: 1