Avatar billede pnr Nybegynder
28. oktober 2003 - 15:52 Der er 20 kommentarer og
1 løsning

Kan ikke få værdie ud af det der retuneres fra stored procedure

Jeg har følgende stored procedure:

CREATE PROC indsaetNyKunde
(
    @navn varchar(50),
    @adresse varchar(50),
    @postnr int,
    @tlf nvarchar(20),
    @brugernavn nvarchar(30),
    @dato varchar(30),
    @forhandlernr nvarchar(40),
    @adgangskode nvarchar(15),
    @kundenr varchar(10) = null output
)
AS
begin

select @kundenr = MAX(kundenr) FROM Bruger
select @kundenr = @kundenr + 1

INSERT INTO bruger
(kundenr, brugernavn, adgangskode, navn, adresse, postnr, tlf, dato, forhandlernr)
VALUES
(@kundenr, @brugernavn,@adgangskode,@navn,@adresse,@postnr,@tlf,@dato,@forhandlernr)

end
GO

laver så følgende i ASP:

    sqlFor = "EXECUTE indsaetNyKunde '" & navn & "','" & adresse & "','" & postnr & "','" & tlf & "','" & brugernavn & "','" & now() & "','" & session("forhandlernr") & "','" & adgangskode & "';"

set rs = Server.CreateObject("ADODB.Recordset")
rs = cn.execute(sqlFor)
response.write "kundenr: " & rs("kundenr") <-- Dette er linie 85

Og får følgende fejl:
ADODB.Fields error '800a0cc1'

Item cannot be found in the collection corresponding to the requested name or ordinal.

/opretBruger.asp, line 85
Avatar billede hossein Nybegynder
28. oktober 2003 - 15:53 #1
du har ikke valgt Kundernr i din sqlfor sætning.
Avatar billede pnr Nybegynder
28. oktober 2003 - 16:46 #2
hvordan gør jeg det?
Avatar billede pnr Nybegynder
29. oktober 2003 - 09:09 #3
HALLO
Avatar billede hossein Nybegynder
29. oktober 2003 - 09:37 #4
Sådan:
sqlFor = "EXECUTE indsaetNyKunde '" & Kundenr & "', '" & navn & "','" & adresse & "','" & postnr & "','" & tlf & "','" & brugernavn & "','" & now() & "','" & session("forhandlernr") & "','" & adgangskode & "';"
Avatar billede pnr Nybegynder
29. oktober 2003 - 13:09 #5
Det gør ingen forskel, jg får stadig ingen værdi tilbage fra databasen
Avatar billede netsrac Praktikant
29. oktober 2003 - 13:11 #6
En insert statement returnerer da ikke noget.
Avatar billede pnr Nybegynder
29. oktober 2003 - 13:37 #7
Det er jo heller ikke helt en insert statement, det er en stored procedurer
Avatar billede hossein Nybegynder
29. oktober 2003 - 13:46 #8
Problemet ligger når du vil vise i din ASP side. Hvis du vil udskrive indholdet af din tabel som du har kaldt "indsaetNyKunde" så skal du bare lave en sql sætning, prøv det i 1. omgang:

sqlFor = "SELECT * FROM indsaetNyKunde"

set rs = Server.CreateObject("ADODB.Recordset")
rs = cn.execute(sqlFor)
...

så jeg regner med at du har lavet en forbindelse som du har kaldt den cn?
Avatar billede pnr Nybegynder
29. oktober 2003 - 13:54 #9
Så får jeg følgende fejl:

Microsoft OLE DB Provider for SQL Server (0x80040E37)
Invalid object name 'indsaetNyKunde'.
Avatar billede hossein Nybegynder
29. oktober 2003 - 13:56 #10
hvad hedder din tabel?
Avatar billede pnr Nybegynder
29. oktober 2003 - 14:01 #11
bruger
Avatar billede hossein Nybegynder
29. oktober 2003 - 14:04 #12
så bliver det:

sqlFor = "SELECT * FROM bruger"
set rs = Server.CreateObject("ADODB.Recordset")
rs = cn.execute(sqlFor)
...
Avatar billede pnr Nybegynder
29. oktober 2003 - 14:05 #13
det virker jo fint nok, men hvad hjælper det?
Avatar billede hossein Nybegynder
29. oktober 2003 - 14:09 #14
du har lavet en store procedure for at sætte data ind i tabellen indsaetNyKunde og når du vil skrive ud så hedder den bruger? jeg ved ikke hvad har du gang i!
Avatar billede pnr Nybegynder
29. oktober 2003 - 14:16 #15
Når jeg opretter en ny kunde tildeles denne kunde et kundenr som er et forløbende tal, dette kundenr skal jeg bruge i koden når kunden er oprettet. Derfor har jeg lavet en stored procedure som opretter og retunere det ny kundenr.
Avatar billede pnr Nybegynder
29. oktober 2003 - 14:16 #16
Har du arbejdet med stored procedure?
Avatar billede hossein Nybegynder
29. oktober 2003 - 14:28 #17
Avatar billede pnr Nybegynder
29. oktober 2003 - 14:58 #18
Kan det ikke laves nemmere, jeg syntes heller ikke jeg kan få det eksempel til at virke her.
Avatar billede hossein Nybegynder
29. oktober 2003 - 15:35 #19
Hvorfor vil du bruge store proc.? Jeg kan se at du laver en tabel og insætter værdier ind. det kan du gør nemmer, men fortæl?
Avatar billede pnr Nybegynder
29. oktober 2003 - 15:44 #20
Det gør jeg på grund af det kundenr, skulle jeg gøre det uden stored procedure skulle jeg gøre følgende:

1. Hente det højeste kundenr
2. ligge et til det højeste kundenr
3. indsætte den nye kunde med det ny kundenr

Med den risiko for at der kommer en kunde imellem og får det samme kundenr, Så syntes jeg det kunne være smart at overlade arbejdet til databasen, ved hjælp af en stored procedure.

Stored procedure performer vel også bedre end alm sql sætninger fra asp.
Avatar billede pnr Nybegynder
31. oktober 2003 - 11:47 #21
Har løst problemet:

Ved at bruge følgende komando i den stored procedure:

SET NOCOUNT ON
SET NOCOUNT OFF

De indkapsler alle min select sætninger.
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