Avatar billede mydream Nybegynder
14. december 2011 - 12:25 Der er 10 kommentarer og
1 løsning

Multiple-step OLE DB operation generated errors ved brug af parametre

Jeg har denne simple kode, så giver følgende fejl:


Microsoft OLE DB Provider for ODBC Drivers

error '80040e21'

Multiple-step OLE DB operation generated errors. Check each OLE DB status value, if available. No work was done.


Koden er:

function Hentarrangement (AktivNr)
Cmd.CommandText = "SELECT id FROM dbo.tabel where AktivNr = ?"
Cmd.Parameters.Append(Cmd.CreateParameter("@AktivNr", 200, 2, 500, AktivNr))
Sql = Cmd.CommandText
Set product = Cmd.Execute

end function

Hentarrangement AktivNr



Hvad kan fejlen være?
Avatar billede softspot Forsker
14. december 2011 - 12:41 #1
Det er en lidt spøjs konstruktion at du tildeler SQL værdien af Cmd.CommandText... hvorfor gør du det? Den skal ikke umiddelbart bruges til noget.

Hvor sætter du Cmd.ActiveConnection (det er forbindelsen til databasen)?
Avatar billede mydream Nybegynder
14. december 2011 - 13:59 #2
Det er vist en rest fra min tidligere konstruktion :) Resten af koden virker. Den har jeg lagt i en funktion. Det er kun denne del der fejler.
Avatar billede softspot Forsker
14. december 2011 - 14:26 #3
Kan du ikke vise noget mere kode, for du tildeler variablen product resultatet af cmd.execute, hvilket indikerer at du har en global variabel som hedder product...

Det virker i det hele taget meget ustruktureret. Du bør indkapsle hele funktionen at hente et arrangement, således der ikke er nogen afhængigheder af globale variable. Noget i stil med dette:

function Hentarrangement (AktivNr, conn)
  dim cmd, rs
  set cmd = Server.CreateObject("ADODB.Command")
  set cmd.ActiveConnection = conn
  cmd.CommandText = "SELECT id FROM dbo.tabel WHERE AktivNr = ?"
  cmd.CommandType = 1
  set rs = cmd.Execute(, array(AktivNr))
  if not rs.eof then
    Hentarrangement = rs("id")
  else
    Hentarrangement = 0
  end if
  rs.close
end function

Jeg antager at du kun finder et arrangement pr. aktivnr, men ellers skal du gennemløbe resultatet og f.eks. opbygge et array med id'er som så kan returneres i stedet for et enkelt id. Funktionen tager i øvrigt også connection-objektet fra den kaldende kode.

På denne måde har du indkapslet funktionaliteten og du erklærer de variable der benyttes inde i funktionen og risikerer ikke at overskrive variable erklæret i det globale scope (hvilket jeg umiddelbart tror er kilden til dit problem).
Avatar billede mydream Nybegynder
14. december 2011 - 14:40 #4
Det er ikke der problemet er. Funktionen virker fint. Det er kun dette kald, der er problemet. Jeg har brugt kaldet andre steder uden problemer.

Men jeg ved ikke hvad fejlmeddelelsen normalt betyder.
Avatar billede softspot Forsker
14. december 2011 - 14:54 #5
Hvis det har fungeret i andre situationer, er det (efter min bedste overbevisning) fordi du har været heldig. Udfører du flere opslag i databasen i forbindelse med denne side, hvor den fejler?

Prøv at google fejlmeddelelsen, der kommer som regel nogle hits på disse specifikke fejltekster.

Vis noget mere kode, så det kan ses i sammenhæng, for det er svært at hjælpe dig, hvis du kun viser en enkelt funktion som er taget ud af en kontekst og hvor konteksten har betydning for udfaldet af din kode.
Avatar billede mydream Nybegynder
16. december 2011 - 09:15 #6
Ja jeg udfører flere kald. FØrst gemmer jeg i tabellen og derefter henter jeg fra den. Kan det være det der er galt?
Avatar billede softspot Forsker
16. december 2011 - 10:39 #7
Citat: "Vis noget mere kode, så det kan ses i sammenhæng, for det er svært at hjælpe dig, hvis du kun viser en enkelt funktion som er taget ud af en kontekst og hvor konteksten har betydning for udfaldet af din kode."... ;-)
Avatar billede mydream Nybegynder
16. december 2011 - 10:42 #8
Softspot, det hjalp faktisk da jeg lukkede før jeg åbnede igen. Nu virker det fint :)Så det var åbenbart det med to kald i samme dokument
Avatar billede softspot Forsker
16. december 2011 - 10:58 #9
Ikke nødvendigvis. Det kan være fordi du er igang med at benytte et andet resultset (læs: ikke har fået det lukket), imens du forsøger at åbne et nyt. Det kan give problemer, selvom jeg må erkende, at jeg ikke helt ved hvornår det er et problem. Jeg synes nemlig jeg har set kode hvor flere resultsets benyttes i samme løkke... :-)

Se evt. også dette link for flere foreslag til hvad der kan være galt: http://databases.aspfaq.com/database/what-is-this-multiple-step-ole-db-error.html
Avatar billede mydream Nybegynder
26. oktober 2012 - 09:14 #10
Softspot, lægger du et svar så jeg kan få lukket denne?
Avatar billede softspot Forsker
26. oktober 2012 - 09:49 #11
Jeps, kommer her! :-)
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