Just nu i M3-nätverket
Jump to content

dll


Tenkes

Recommended Posts

Jag har lite asp kod och jag gärna vill veta hur jag kan lägga den i en dll.

 

Function Kontroll()

 

objConnection="DSN=test; UID=sa; PWD=123; DATABASE=test"

set Connection=server.CreateObject("ADODB.Connection")

set rs=server.CreateObject("ADODB.Recordset")

 

Connection.open objConnection

 

SQL="Select Namn,Losenord From User"

 

rs.Open SQL, Connection

 

do while not rs.EOF

if rs("Namn")=Request.Form("Namn") and rs("Losenord")=Request.Form("Losenord") then

finns=true

exit do

else

finns=False

end if

rs.MoveNext

loop

 

rs.Close

Connection.Close

set Connection=Nothing

 

Kontroll=finns

end Function

Link to comment
Share on other sites

Aha... det kan jag inte hjälpa dig med!

Men projekttypen borde vara ActiveX Library om ska köra det på en IIS-server.

 

Link to comment
Share on other sites

http://www.gladh.nu/asphelp/svar10.html

 

finns ett exemple på hur man skapar ett COM objekt..

 

SQL="Select Namn,Losenord From User"

rs.Open SQL, Connection

do while not rs.EOF
if rs("Namn")=Request.Form("Namn") and rs("Losenord")=Request.Form("Losenord") then
finns=true
exit do
else
finns=False
end if
rs.MoveNext
loop

 

Den koden är inte optimerad för sin uppgift, det du gör är att du hämtar alla namn och lösen från databasen och sedan loopar dig igenom dem en för en... väldigt tidskrävande när det kan lösas med en enkel where sats..

 

SQL="Select [iD] From User WHERE [Namn] = '"& Request.Form("Namn") &"' AND [Losenord] = '"& Request.Form("Losenord") &"' 

rs.Open SQL, Connection
if rs.eof then
' ingen användare fanns
else
' användare finns med ID rs.fields(0).value
end if

 

- Magnus

-----------------------------------------------------

ju mer jag lär mig ju mer inser jag så lite jag kan

 

Link to comment
Share on other sites

Jag försökt med nedanstående VB kod. Den vill inte fungerar.

 

Public Function Kontroll() As Variant

 

Dim adoConn As New ADODB.Connection

Dim adoCmd As New ADODB.Command

Dim adoRs As New ADODB.Recordset

Dim adoConnStr As String

Dim strFinns As String

 

adoConnStr = "DSN=test; UID=sa; PWD=123; DATABASE=test"

 

adoCmd.CommandType = 1

adoCmd.CommandText = "Select Namn,Losenord From User Where Namn='" & Request.Form("Namn") & "' AND Losenord='" & Request.Form("Losenord") & "'"

adoConn.Open adoConnStr

 

adoCmd.ActiveConnection = adoConn

 

Set adoRs = adoCmd.Execute

 

If adoRs.EOF Then

strFinns = False

Else

strFinns = True

End If

 

Set adoConn = Nothing

Set adoCmd = Nothing

Set adoRs = Nothing

 

Kontroll = strFinns

End Function

 

Jag vore jättetacksam för hjälp.

 

[inlägget ändrat 2002-10-23 10:54:15 av Tenkes]

Link to comment
Share on other sites

kanske lättare om du säger vilket fel då får...

 

Det finns ett utmärkt sätt att debuga sin kod på i Visual studio.

 

1. avregistrera din dll, och starta om IIS.

2. öpnna VS och ta fram din kod.

3. sätt en breakpoint i början av din kod och tryck på run.

4. leta upp din fil som anropar dll och plocka bort IUSR_<<datornnamnet>> som användare (skall läggas tillbaka sedan)

5. kör din ASP sida och när asp-sidan kallar på dll:en så kommer den att hoppa in i din kod och stanna på breakpointen, nu kan du stega dig igenom koden... :)

 

- Magnus

-----------------------------------------------------

ju mer jag lär mig ju mer inser jag så lite jag kan

 

Link to comment
Share on other sites

Jag får felmeddelande:

 

Error Type:

Server object, ASP 0177 (0x800401F3)

Invalid ProgID.

 

Kan du hitta något fel i koden?

[inlägget ändrat 2002-10-24 08:49:25 av Tenkes]

Link to comment
Share on other sites

så fall är det fel i din ASP-kod, för IIS kan inte hitta den dll som du försöker koppla upp dig mot.

 

Har du namngett det rätt i din server.createobject

 

- Magnus

-----------------------------------------------------

ju mer jag lär mig ju mer inser jag så lite jag kan

 

Link to comment
Share on other sites

Nu har jag ändrat i dllfilen så att funktionen i den tar två inparametrar.

 

Public Function Kontroll(Namn As Variant, Losenord As Variant) As Variant

 

Dim adoConn As New ADODB.Connection

Dim adoCmd As New ADODB.Command

Dim adoRs As New ADODB.Recordset

Dim adoConnStr As String

Dim strFinns As String

 

adoConnStr = "DSN=test; UID=sa; PWD=123; DATABASE=test"

 

adoCmd.CommandType = 1

adoCmd.CommandText = "Select Namn,Losenord From User Where Namn='" & Namn & "' AND Losenord='" & Losenord & "'"

adoConn.Open adoConnStr

 

adoCmd.ActiveConnection = adoConn

 

Set adoRs = adoCmd.Execute

 

If adoRs.EOF Then

strFinns = False

Else

strFinns = True

End If

 

Set adoConn = Nothing

Set adoCmd = Nothing

Set adoRs = Nothing

 

Kontroll = strFinns

End Function

 

 

 

Även ändrat i asp koden och det ser ut som nedan:

 

set obj=server.CreateObject("test.Kontroll")

 

Response.Write(obj.Kontroll(Request.Form("Namn"),Request.Form("Losenord")))

 

' test = Projektnamn, Kontroll = Klassnamn, och funktionen heter Kontroll.

 

 

Jag får ett felmeddelande:

 

Error Type:

Microsoft VBScript compilation (0x800A0414)

Cannot use parentheses when calling a Sub

 

 

Mvh

[inlägget ändrat 2002-10-24 13:51:24 av Tenkes]

Link to comment
Share on other sites

Tycker det ser rätt ut.

 

Testa att ta bort () på response.write och se om det fungerar bättre, det enda jag kan komma på....

 

- Magnus

-----------------------------------------------------

ju mer jag lär mig ju mer inser jag så lite jag kan

 

Link to comment
Share on other sites

Jag hatar VBscript.. jag vill ha parametrar överallt :)

 

Borde vara obj.Kontroll som den inte vill ha parametrar till... Prova med "call", fast.. hmm.. enligt detta så kan den döda returvärdet.. jag vet ingenting :)

 

Prova utan parametrar till obj.Kontroll...

 

dim blah
blah=obj.Kontroll Request.Form("Namn"),Request.Form("Losenord")

 

call

You are not required to use the Call keyword when calling a procedure. However, if you use the Call keyword to call a procedure that requires arguments, argumentlist must be enclosed in parentheses. If you omit the Call keyword, you also must omit the parentheses around argumentlist. If you use either Call syntax to call any intrinsic or user-defined function, the function's return value is discarded.

 

Ciao,

Anders

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...