Jag sitter just nu inne i lumpen och fundera på att göra lite funktioner och andra "bra" saker för personer som är för lata att tex koda egna koder.... problemet som jag har stött på är att jag försöker göra en db(path) funktion (en funktion där path är var db ligger).... kör en typisk kod inne i funktionen för att "öppna" databasen.. men när jag försöker köra ett execute på fälet så står det tex: connect är odefinierat.... har sett denna typ av kod tidigare men hos mig vill den inte fungera... tyvärr har jag ingen kod jag kan visa då vi inte får koppla upp egna datorer här :e ... hoppas det hjälper något med det jag skrivit..
Function DB(strPath)
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(strPath)
Set DB = objConn
End Function
Set objConn = DB("foo.mdb")
Jag löser min databaskoppling så här nu för tiden. Nån som har något förslag på hur jag kan förbättra den?
Function SetCon(ByRef oCon, SQL, MkRecSet, CloseCon)
If Not IsObject(oCon) Then Set oCon = Server.CreateObject("ADODB.Connection")
oCon.Open(Application("ADODBConnection"))
Select Case LCase(MkRecSet)
Case True, "true"
Dim oRs: Set oRs = oCon.Execute(SQL)
If Not oRs.EOF Then SetCon = oRs.GetRows() Else SetCon = Empty
Call CloseObject(oRs)
Case Else
oCon.Execute(SQL)
SetCon = Empty
End Select
Select Case LCase(CloseCon)
Case True, "true"
Call CloseObject(oCon)
End Select
End Function
Sub CloseObject(Obj)
Obj.Close: Set Obj = Nothing
End Sub
Är tillbaka nu... den koden gav inget bra resultat(har inte testat koden på senaste svaret).... har bärbara datorn med mig:
function db(strpath)
dim conn
set conn = server.createobject("ADODB.connection")
conn.open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(strPath)
set db = conn
end function
Denna kod är i en fil som jag har included på huvudsidan... när jag kör denna SQL kod:
SQL = "Select * from....."
set recset = conn.execute(SQL)
Får jag
Objekt krävs.: 'conn'
.... vill gärna få igång detta.... fast än så länge går det tufft.... :(
Eftersom du har en funktion som skapar, och returnerar ett connectionobjekt, så är det så det fungerar. Objekt som skapas i funktionen är lokala. Om du dimmar conn utanför funktionen kan du använda den som en sub, och då behöver du bara köra den, utan att returnera någonting. Annars kan du ju köra koden bara rakt av i din include, men det var ju en funktion du frågade efter, så jag förstår inte riktigt din sista fråga.
försöker göra lite funktioner som man behöver göra "så lite jobb" själv :e om man säger så. dvs om man bara skriver db("mindb.mdb") så ska den köra hela alltet.. fast man kan ju göra det i include filen kanske?.... får forskar vidare på detta :e
istället.. men ditt råd är att ändra funktionen till en sub och kör en call db("mindb.mdb") istället och lägg set conn = db("mindb.mdb") efter end sub istället?
men ditt råd är att ändra funktionen till en sub och kör en call db("mindb.mdb") istället och lägg set conn = db("mindb.mdb") efter end sub istället?
Nej, mitt råd:
' i includefilen:
dim objConn
Sub db(strpath)
set objConn = server.createobject("ADODB.connection")
objConn.open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(strPath)
End Sub
' sparka igång:
db "dindatabas.mdb"
Jag tror det räcker för idag :e får inte vara mer på datorerna här längre också :( tack @nders för att få igång koderna igen något bättre än vad det var i början :e sov gott nu grabbar :e PEK imorgon :)
Jag löser min databaskoppling så här nu för tiden. Nån som har något förslag på hur jag kan förbättra den?
Borde du inte ha ByRef på din objekt-parameter? Så som det är nu så skickar du ju in ett objekt och som förstörs i sub:en, men inte i funktionen.
Sub CloseObject(ByRef Obj)
Obj.Close: Set Obj = Nothing
End Sub
Eller?
Är inte säker på vilken skillnad det skulle bli om jag satte ByRef på objektet : /
Den subrutinen är till för att skicka in och förstöra de objekt som skickas in. De kan vara vilka objekt som helst. Subrutinen är inte bunden specifikt till databaskopplingsfunktionen. Är det fortfarande fel eller missförstår jag dig?
Beroende på om CloseCon är True eller False skall ADODB-anslutningen hållas öppen så vi slipper återskapa den när jag behöver göra fler än ett anrop till databasen. Det är väl dumt att skapa ett objekt som redan finns?
Beroende på om CloseCon är True eller False skall ADODB-anslutningen hållas öppen så vi slipper återskapa den när jag behöver göra fler än ett anrop till databasen. Det är väl dumt att skapa ett objekt som redan finns?
Mja, du skapar ju ett nytt objekt på sidan när du kör funktionen, typ:
Set objCon = ...
Så varför hålla objektet öppet i funktionen?
138 ms totalt · 3 externa anrop · v20260731065814-full.55e59744