Avatar billede kresten Nybegynder
30. maj 2000 - 13:13 Der er 6 kommentarer og
1 løsning

Recordset fra Java til ASP side


Hej

Jeg har lavet et COM object i Java som sørger for at udføre en simpel søgning, problemet er resultatet skal vises i en ASP side.

Laver jeg det i ren Java virker det fint hvis jeg bruger Fields objectet (com.ms.wfc.data.Fields), men det er som om field delen ikke kommer med recordsettet.

Er der et eller andet hemmeligt Microsoft trick jeg ikke kender i ADO?
Avatar billede hojou Nybegynder
31. maj 2000 - 11:09 #1
hvis du returnerer et ADODB.Recordset fra dit COM objekt til din ASP side så skal du huske at du IKKE må lukke dit recordset i dit COM objekt.

Du bør også være opmærksom på at det ikke er smart at returnere et recordset da objektet er instancieret i dit eget COM objekt og at du derfor holder det åbent mens du bruger recordsettet på ASP siden.

For hastighed optimering (enorm!) så returner et array istedet: myrecordset.GetRows()

.fields er iøvrigt default property på recordset og du behøver derfor kun på din ASP side (VB script right?) at bruge myrecordset("myfield") for at tilgå et field.

Håber det hjalp :)
Avatar billede kresten Nybegynder
31. maj 2000 - 12:11 #2
Jeg har denne metode i mit COM object

public Recordset Search(String searchArgument) {
        result = new Recordset();
        command.setCommandText("SELECT word FROM searchIndex WHERE word = '" + searchArgument + "'");
        result.setCursorLocation(AdoEnums.CursorLocation.CLIENT);
        result.setCursorType(AdoEnums.CursorType.FORWARDONLY);
        result.setLockType(AdoEnums.LockType.BATCHOPTIMISTIC);
        result.open(command);
        return result;
    }

... og på ASP siden gør jeg følgende:

set result = searchEngine.search("test")

if result.EOF then
    Response.Write "Nothing found"
else
    while not result.EOF
        Response.Write "<BR>" & result.Fields("word")
        result.moveNext
    wEnd
end if

... hvilket giver følgende fejl i den linie hvor jeg udskriver rescordsettet:

Microsoft VBScript runtime error '800a01c2'

Wrong number of arguments or invalid property assignment: 'Fields'
Avatar billede hojou Nybegynder
31. maj 2000 - 12:57 #3
results peger på dit result i din Recordset_Search metode som har scope i dit COM objekt.

Kan Java ikke tilgå en metode på dit result objekt kaldet .getrows()?

-----
result.open(command);
if result.eof() {
  return null;
} else {
  return result.getrows();
}

asp siden:
set result = searchEngine.search("test")
If isnull(result) then
    Response.Write "Nothing found"
else
    for n=0 to ubound(result,2)
        Response.Write "<BR>" & result (n,1)
    next
end if
------------
Det virker - hvis du insiterer på at bruge et recordset på asp siden så check dine COM-options el.l. for du kan så IKKE bruge JIT optimering osv - da objektet skal holdes persistent og desuden skal result i objektet være globalt og public...



Avatar billede kresten Nybegynder
31. maj 2000 - 14:00 #4

Jeg SKAL bruge et recordset, så jeg kan desværre ikke bruge getRows().

Jeg syntes også det er lidt mystisk at jeg kan udkommentere linien som udskriver indholdet, og så kører den hele recordsettet igennem uden fejl. Så det er som om det er noget med Field-delen der går galt.

Hvordan kan jeg kontrollere om den bruger JIT eller ej?
Avatar billede hojou Nybegynder
31. maj 2000 - 14:09 #5
Jeg har aldrig prøvet at lave COM komponenter i Java så jeg ved ikke hvordan du sætter diverse options der, men der må være nogle properties du kan sætte.

Når du registrerer din komponent så kan du også sætte nogle options. Hvis du bruger Windows NT så i MTS, og i Windows 2000 (Component Services) (check properties på din Package)

Jeg har brugt det engang for over et år siden (det med at returnere recordset så jeg er ikke helt frisk på området) men det gav meget lav performance og kan låse hele din COM komponent (selvom du tror den er multi/apartment threaded) - så overvej lige igen om du er sikker på at du ikke kan bruge et array...

Per
Avatar billede kresten Nybegynder
31. maj 2000 - 14:27 #6
Ok, jeg holder den i baghovedet :)
Avatar billede hojou Nybegynder
31. maj 2000 - 14:31 #7
oops bare en kommentar...
Jeg skrev Set result = ....
result (på asp siden) skal jo ikke Set'es da det ikke er et objekt men derimod et array :) ellers så skulle den være der :)
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

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