Variable doppelt deklariert

Bicko

Erfahrenes Mitglied
Hi,

ich habe folgendes Problem, meine Verbindung zur DB habe ich ausgelagert. Dort werden die Variablen auch deklariert.

Code:
Dim strProvider
    strProvider = "PROVIDER=MSDASQL;"
Dim strDriver
    strDriver   = "DRIVER=SQL Server;"
Dim strServer
    strServer   = "SERVER=xxx;"
Dim strUsername
    strUsername = "UID=xxx"
Dim strPassword
    strPassword = "PWD=xxx"
Dim strDatabase
    strDatabase = "DATABASE=xxx"

Auf den verschiedenen Seiten binde ich nun diese Datei ein, was auch gut klappt. Nun bin ich aber leider auf eine Seite gestossen, wo die folgende Fehlermeldung erscheint:

Microsoft VBScript compilation (0x800A0411)
Name redefined

Wie kann ich das nun umgehen? Kann man Variablen nur einmal definieren? Ich weiss wirklich nicht weiter. Als zweites, muss man eigentlich eine advobs einbinden?

Vielen dank im voraus fuer die Hilfe.

Gruss Bicko
 

Luzie

Erfahrenes Mitglied
Hi

er wird Dir mit Sicherheit auch die Datei und die Zeile nennen, wo sich die Variable doppelt befindet.

Das Einbinden der Datei adovbs ist nur dann notwendig, wenn Du die Konstanten auch nutzen willst. http://www.aspheute.com/artikel/20000518.htm

Um eine genaue Deklaration aller Variablen zu bekommen, sollte man am Anfang der Seiten option explicit einbinden.

bspl
<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<% option explicit %>
http://www.vbarchiv.net/faq/allg_optionexplicit.php
 

Bicko

Erfahrenes Mitglied
Der Fehler liegt in all den Dims also Dim strProvider u.s.w.

Ich binde verschiedene Dateien ein und leider kommt es in einem Fall dazu, dass die Datenbanverbindung 2 mal eingebunden wird. Kann man den wirklich Variablen nicht doppelt deklarieren?
 
Zuletzt bearbeitet:

Luzie

Erfahrenes Mitglied
Soviel ich weiss, geht das nicht.

Also wenn die Datei doppelt oder mehrfach eingefunden ist, dann solltest Du Dein Scripting überprüfen, das macht nämlich keinen Sinn.

Alternativ kannst Du den ganzen Verbindungskram in eine Funktion legen

Code:
function strConnection
strConnection = "PROVIDER=MSDASQL;" & _
				"DRIVER=SQL Server;" & _
				"SERVER=xxx;" & _
				"UID=xxx" & _
				"PWD=xxx" & _
				"DATABASE=xxx"
end function

und dann im Connection-Objekt diese Funktion öffnen.

Code:
Set Conn = Server.CreateObject("ADODB.Connection")
    Conn.Open strConnection
 

Bicko

Erfahrenes Mitglied
@Luzie,

habe jetzt alles so umgestellt, wie Du es angesprochen hast und es funktioniert wunderbar. Vielen Dank fuer den Tip.

Nur ein kleiner Fehler war hier drinn:

Code:
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open strConnection ()

Die beiden () wurden vergessen. Nochmal vielen Dank.

Gruss Bicko
 

Luzie

Erfahrenes Mitglied
Hallo

Du musst allerdings bedenken, wenn Dein Scripting so weiterbesteht, dass es Mehrmaldeklaration anmeckern würde wenn es könnte, solltest Du das überarbeiten. Solch eine Datei muss nicht öfters includiert werden.
 

Bicko

Erfahrenes Mitglied
Hi,

so ganz verstehe ich das auch nicht, das die Connection Datei immer wieder eingebunden werden muss, ist aber leider so.

Ich versuche das mal zu verdeutlichen...

Ich habe eine default.asp dort stehen die gesamten jeweils moeglichen Aktionen der Seite drinn.

Also:

If aktion="1" then
title="blah"
navi= "about/navi.htm"
content= "about/about.htm"
end if

Ganz unten binde ich dann die tpl's zum Seitenaufbau ein.

<!--#include file="head.tpl"--><!--#include file="top.tpl"--><!--#include file="content.tpl"--><!--#include file="footer.tpl"-->

Die content.tpl sieht dann so aus:

Code:
<tr> 
          <td class="side" valign="top"> 
        <% Server.Execute( navi )%>
          </td>
          <!-- Subnavi END -->
          <!-- Content -->
          <td rowspan="2" valign="top"><br>
		<% Server.Execute( content )%>          
            <br></td>
          <!-- Content END -->
        </tr>
        <!--Contact Details -->
        <tr> 
          <td class="side"></td>
          <!--Contact Details END -->
        </tr>

Einige Dateien benutze ich nun mehrfach. Die besagte Problemdatei hatte die folgende Funktion...

Funktion aufrufen (include Datei) mit DB verbinden und Status des Nutzers auslesen. Wenn Nutzer vorhanden und Daten noch nicht bestaetigt hat checken ob irgendwelche Daten vorhanden sind.

Dann zurueck in urspruengliche Datei. Nun ist es also so, dass wenn die Daten noch nicht bestaetigt wurden, ich aber weiss das Daten vorhanden sind, muessen diese ausgelesen und angezeigt werden. Dies ist wieder eine ausgelagerte Datei (keine Funktion), ausgelagert, da ich sie noch an einer anderen Stelle benutzen moechte.

In der ausgelagerten Datei muss ich leider wieder die Verbindung zur DB angeben und schwupps Variable doppelt deklariert, da ich die connection ja bereits in der Funktion aufgerufen habe. Lasse ich jedoch die include raus kommt eine Fehlermeldung... kann nicht verbinden oder so...

Vielleicht ist das Ganze ein etwas ungewoehnlicher Aufbau, ich suche immer noch nach dem richtigen Programmierstil...


Gruss Bicko

Hoffe es war verstaendlich.
 

Luzie

Erfahrenes Mitglied
Hi

ist nur ein Tipp von mir und wie ich es mache

Ich habe eine config.-Datei, die ich einbinde. Da ich auch viel mit includes arbeite, habe ich nur einige wenige Seiten und in jeder steckt jetzt diese config ganz am Anfang eingebunden.

Da steht u.a. auch die Funktion der Connection drin, dort habe ich eine Recordsetfunktion, die ich öfter anwende (man wird ja schreibfaul mit der Zeit), verschiedene Berechnungsfunktionen, erweiterte Replacefunktionen, viele kleine Sachen hat, die ich im Script immer wieder mal brauche, kleine Formularanwendungen, die ich in subs geschrieben habe und in den Dateien an unterschiedlichen Stellen aufrufen kann etc. Ich habe dort gängige Variablen definiert, die ich sonst nirgendwo mehr definieren muss, die aber ständig vorkommen etc.
 

Neue Beiträge