Avatar billede stefan Nybegynder
11. august 2000 - 10:58 Der er 28 kommentarer og
1 løsning

ActiveX - component til brug i ASP

Hej...

Jeg har lavet en funktion i min ActiveX-component som skal bruges på en .Asp side.

Problemet er at den godtager ikke returværdien...
Funktionen ser ud som følger:

Public Function Fubar(rs As ADOR.Recordset) As Long
  Fubar = 1
End Function


Hvis jeg vælger ikke at sende et recordset med i funktionen virker det fint og vis jeg laver det om til en sub virker det også fint.

Min kode i asp-siden:

Set rs = Server.CreateObject(\"ADOR.Recordset\")

lVar = obj.Fubar(rs)

Fejlbeskrivelse:
Type mismatch: \'Fubar\'


Jeg er begyndt at tro det er en bug i ASP...
   
Avatar billede moses Praktikant
11. august 2000 - 11:11 #1
Prøv:

Public Function Fubar(rs As Variant) As Long
  Fubar = 1
End Function

OG

DIM lVar as Variant

Set rs = Server.CreateObject(\"ADOR.Recordset\")

lVar = obj.Fubar(rs)

Hvad sker der så ??
Avatar billede stefan Nybegynder
11. august 2000 - 11:29 #2
Hmm..
Funktionen kører...
Nu er problemet så at i fubar vil jeg gerne arbejde på det recordset som jeg får ind...

Koden skal se således ud....
rs.ActiveConnection = sCon
rs.UpdateBatch
     
  Set rsPlannerEntry.ActiveConnection = Nothing
 
  SavePlannerEntry = 1
Avatar billede stefan Nybegynder
11. august 2000 - 11:31 #3
Ups...
Lidt for hurtig på udfør-knappen
Jeg forsøger igen:

Funktionen kører fint..
Men jeg vil gerne gemme det recordset i min database, derfor skal min kode se således ud...:
  rs.ActiveConnection = sCon
  rs.UpdateBatch
     
  Set rs.ActiveConnection = Nothing
 
  fubar = 1

Problemet er at der sker intet....
Avatar billede moses Praktikant
11. august 2000 - 11:33 #4
Det gør du så bare !!

Det skulle der jo ikke være nogen problemer i !!
Dit problem er vel løst idet du kører mindre restriktivt med dine variabel-definitioner.

Avatar billede moses Praktikant
11. august 2000 - 11:36 #5
Jeg kender ikke ret meget til ASP enviromentet, så jeg kan ikke hjælpe dig videre, men du fik da løst dit problem med din returværdi.

Avatar billede moses Praktikant
11. august 2000 - 11:38 #6
TIP:

Har du prøvet at køre det direkte fra VB eller VBA?
Sker der så heller ikke noget ?
Avatar billede moses Praktikant
11. august 2000 - 11:46 #7
Hedder det virkeligt ADOR.Recordset ? Eller ADO.Recordset ?
Avatar billede stefan Nybegynder
11. august 2000 - 11:49 #8
Formålet er at man skal kunne sende et recordset ind i funktionen Fubar, Fubar skal så gemme recordsettet i min DB, herefter skal fubar returnere en værdi....

Problemet er at det virker fint i en VB-app. men jeg får type mismatch i asp.
Hvis jeg siger at fubar skal modtage en variant så sker der intet i min DB.
Avatar billede stefan Nybegynder
11. august 2000 - 11:49 #9
ADOR.Recordset
Avatar billede moses Praktikant
11. august 2000 - 11:58 #10
Der er mere kode imellem linierne end det, du har vist mig - ik\'.

Ellers er der noget jeg ikke forstår !!!

DIM lVar as Long
Set rs = Server.CreateObject(\"ADOR.Recordset\")

(Fyld noget data i recordsettet)

lVar = obj.Fubar(rs)

.................................

Public Function Fubar(rs As ADOR.Recordset) As Long

  rs.ActiveConnection = sCon \' Hvad sker der her ?
  rs.UpdateBatch            \' Opdater det hele !!
     
  Set rs.ActiveConnection = Nothing

  Fubar = 1
End Function



Avatar billede stefan Nybegynder
11. august 2000 - 12:55 #11
Her er koden:
Public Function Fubar(rs As ADOR.Recordset) As Long
  rs.ActiveConnection = sCon  \'skaber en forbindelse til DB, sCon er min connectionstring
  rs.UpdateBatch            \'Opdater det hele !!
     
  Fubar = 1
End Function

Denne funktion virker fint hvis jeg vælger ikke at sætte en returværdi på funktionen.

Min asp-kode:
set rs = obj.GetEmptyRS()
rs.addnew
  rs(\"id\") = 1
  rs(\"name\") = \"Test\"
rs.update   
i = obj.fubar(rs)

............

Funktionen GetEmptyRs:
Public Function GetEmptyRs() As ADOR.Recordset
  Dim rs As ADOR.Recordset
  Dim sSql As String
                       
  sSql = \"SELECT * FROM user WHERE 1=2\" \'Henter et tomt recordset
  Set rs = CreateObject(\"ADOR.Recordset\")
  rs.CursorLocation = adUseClient
  rs.Open sSql, sCon, adOpenKeyset, adLockBatchOptimistic
  Set rs.ActiveConnection = Nothing 
  Set GetEmptyRs = rs 
End Function
Avatar billede moses Praktikant
11. august 2000 - 13:02 #12
Er det måaske fordi du faktisk får en fejl i linien:

i = obj.fubar(rs)

så den slet ikke bliver udført ?!?

Du kan dimmensionere variablen \"i\" til Long.
Eller bedre endnu - både \"i\" og funktionen til Integer.
Avatar billede moses Praktikant
11. august 2000 - 13:04 #13
Jeg er igen lidt på bar bund...
Skal der stå

obj.fubar(rs) ???
---

Avatar billede moses Praktikant
11. august 2000 - 13:05 #14
\"i\" er ikke et objekt !!
Det er funktionen fubar vel heller ikke !!?
Avatar billede stefan Nybegynder
11. august 2000 - 13:08 #15
ASP - siger at fejlen er i linien med i = obj.fubar(rs)

Den bliver derfor ikke udført!
Det underlige er så at hvis jeg skriver:
obj.fubar(rs)
så kommer det i databasen, men jeg får jo ikke fat i min returværdi...

Jeg har forsøgt at typecaste variablen i til long men det hjælper intet !!!
Avatar billede moses Praktikant
11. august 2000 - 13:20 #16
Der er ligesom med en Walkie Talkie:

Har du nu læst mine to sidste linier eller var du da ved at skrive din sidste kommentar??

SKIFTER !
Avatar billede stefan Nybegynder
11. august 2000 - 13:54 #17
i er en variant, det er jo meningen at den skal få værdien fra fubar ....(altså 1)

obj er et object :
  set obj = server.createobject(\"komponentnavn.klassenavn\")
fubar er en funktion i \"komponentnavn\"
........
Avatar billede moses Praktikant
11. august 2000 - 14:00 #18
\"i\" er Variant og fubar returnerer en LONG.
Kan det være det ??
Jeg ved ikke, hvor nøjeregnende ASP er.
Avatar billede lbs Nybegynder
11. august 2000 - 18:56 #19
Har du prøvet at Skrive ByRef foran din rs parameter?

ByRef rs As ADO...
Avatar billede stefan Nybegynder
14. august 2000 - 09:03 #20
Moses-> ASP kører kun med varianter..
Jeg har da også prøvet at typecaste i til at være en long - men det hjalp ikke.

lbs-> Det hjælper ikke at skrive byref foran rs...
Avatar billede moses Praktikant
14. august 2000 - 12:28 #21
Godt jeg ikke arbejder med ASP  ;o)

Det lyder, som en sag for ASP/VB producenten. Det er meget ulogisk.
Avatar billede stefan Nybegynder
14. august 2000 - 12:48 #22
Nemlig.....

Jeg fatter det ikke .....

Så må jeg jo lige ringe til Bill G.

Men tak for forsøget med at hjælpe....
Avatar billede lbs Nybegynder
15. august 2000 - 00:08 #23
har du prøvet at konvertere i slutningen?
hvor du sætter fubar lig resultatet?

fubar = CLng(ditResultat)

Det er formentlig det, jeg har tit selv oplevet lignende typefejl...
VB er nemlig ikke type frit som asp...
Avatar billede stefan Nybegynder
15. august 2000 - 08:19 #24
Lbs-> Har forsøgt men det hjælper ikke en ....
Avatar billede lbs Nybegynder
15. august 2000 - 14:09 #25
Jeg tror problemet ligger inde i selve funktionen..
det kan ligge hvor som helst inde i den...
er der basis for at du kan skrive alt koden her, så vi kan se hvad der sker?

Måske skulle du også prøve at kalde argumentet for object bare..

jeg har selv rodet med de samme problemer her for nyligt, kan kun sige at vb virkelig sutter ars =)

c++ til folket
Avatar billede moses Praktikant
15. august 2000 - 14:12 #26
Den man elsker ... tugter man !!

VB/VBA har aldrig svigtet mig.
Avatar billede stefan Nybegynder
15. august 2000 - 14:36 #27
Jeg har postet koden en gang...
men lad os prøve igen:

Public Function Fubar(rs As ADOR.Recordset) As Long
  rs.ActiveConnection = sCon  \'skaber en forbindelse til DB, sCon er min connectionstring
  rs.UpdateBatch            \'Opdater det hele !!
     
  Fubar = 1
End Function

Denne funktion virker fint hvis jeg vælger ikke at sætte en returværdi på funktionen.

Min asp-kode:
set rs = obj.GetEmptyRS()
rs.addnew
  rs(\"id\") = 1
  rs(\"name\") = \"Test\"
rs.update   
i = obj.fubar(rs)

............

Funktionen GetEmptyRs:
Public Function GetEmptyRs() As ADOR.Recordset
  Dim rs As ADOR.Recordset
  Dim sSql As String
                       
  sSql = \"SELECT * FROM user WHERE 1=2\" \'Henter et tomt recordset
  Set rs = CreateObject(\"ADOR.Recordset\")
  rs.CursorLocation = adUseClient
  rs.Open sSql, sCon, adOpenKeyset, adLockBatchOptimistic
  Set rs.ActiveConnection = Nothing 
  Set GetEmptyRs = rs 
End Function
Avatar billede lbs Nybegynder
15. august 2000 - 20:16 #28
jeg er blank...
kan kun sige at jeg tror fejlen ligger et sted hvor du ikke forventer det...
er hvad jeg har oplevet 1000 gange

held & lykke
Avatar billede stefan Nybegynder
16. august 2000 - 10:41 #29
Så er sagen opklaret ....

Det er ikke muligt !!

Problemet opstår når man sender fra asp til vb
Asp kører kun med varianter.

Læs mere på:
http://support.microsoft.com/support/kb/articles/Q244/0/12.ASP
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester