/ Forside / Teknologi / Udvikling / ASP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
ASP
#NavnPoint
smorch 9259
Harlekin 1866
molokyle 1040
Steffanst.. 758
gandalf 657
smilly 564
gibson 560
cumano 530
MouseKeep.. 480
10  Random 410
Fejl i update af tabel i database
Fra : Steffen Holm


Dato : 21-09-05 16:02

Hej NG.

Jeg har lavet et lille bruger system, hvor brugerne skal kunne opdatere
deres egne oplysninger. Dette gøres via en form. Jeg får dog denne
irriterende fejl:

Microsoft OLE DB Provider for ODBC Drivers error '80040e10'
[Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1.

/elevmsu/elevred2.asp, line 31

Min 31. linie ser således ud:

Conn.Execute(strSQL)

Min strSQL ser således ud:
Update Elever Set Fornavn = 'Karen' , Efternavn = 'Breindahl-Pedersen' ,
Adresse = 'Højskolen 123' , Bynavn = 'xxxxxx' , Postnr = '5856' , Telefon =
'' , Mobiltelefon = 'xxxxxxxx' , Beskrivelse = 'Beskrivelse af Karen' ,
MSNadresse = 'xxxxxxxx@ofir.dk' Where ID = CInt(idnr)

Variablen idnr bliver defineret således:
Dim idnr
idnr = Session("loginid")

Jeg har selvfølgelig tjekket at kolonne navnene i SQL-sætningen er rigtige i
forhold til databasen...

Håber nogen kan se fejlen.

--
Steffen Holm



 
 
terje hauger (21-09-2005)
Kommentar
Fra : terje hauger


Dato : 21-09-05 17:37

Steffen Holm wrote:

> Håber nogen kan se fejlen.

Nope, men jeg er nysgjerrig på hva som er i denne: CInt(idnr)

terje

Steffen Holm (21-09-2005)
Kommentar
Fra : Steffen Holm


Dato : 21-09-05 17:56

"terje hauger" <late@night.zz> wrote:

> Nope, men jeg er nysgjerrig på hva som er i denne: CInt(idnr)

idnr er en streng der indehodler brugerens idnummer, og så vidt jeg husker
skal den konverteres til integer, før man kan sammenligne den med en
autonummererings kolonne?

--
Steffen Holm



terje hauger (21-09-2005)
Kommentar
Fra : terje hauger


Dato : 21-09-05 18:34

Steffen Holm wrote:

> idnr er en streng der indehodler brugerens idnummer, og så vidt jeg husker
> skal den konverteres til integer, før man kan sammenligne den med en
> autonummererings kolonne?

Men du er sikker på at den ikke er tom?

terje

Steffen Holm (21-09-2005)
Kommentar
Fra : Steffen Holm


Dato : 21-09-05 18:55

"terje hauger" <late@night.zz> wrote:

> Men du er sikker på at den ikke er tom?

Jeg har følgende kode længere oppe:

Dim idnr
idnr = Session("loginid")

Og når jeg tjekker variablens indhold med Response.Write har den også den
rigtige værdi.

Er dog lidt usikekr på CInt() kommandoen...

--
Steffen Holm



terje hauger (21-09-2005)
Kommentar
Fra : terje hauger


Dato : 21-09-05 21:14

Steffen Holm wrote:

> Er dog lidt usikekr på CInt() kommandoen...

Så vidt jeg vet så spiller det ingen rolle så lenge dine verdier er
heltall. Selv benytter jeg alltid CDbl når jeg setter et tall inn i en
SQL streng.

Uff, det er lenge siden jeg kodet dette Men jeg ville søkt en
løsning på ditt problem ved å benytte elimineringsmetoden. Start med en
minimums SQL streng, der du *hardkoder* verdiene inn i strengen. F. eks:

UPDATE Tabell SET Felt = EtNavn WHERE ID = 1

Slik kan du muligens lokalisere hvor problemet ligger.

Dernest ville jeg slutte å bruke Access driveren. Microsoft anbefaler å
bruke JET. Det kan f. eks. gjøres slik:

With oConn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Data Source=" & m_sPathToDatabase
.Open
End With

terje

Jørn Andersen (22-09-2005)
Kommentar
Fra : Jørn Andersen


Dato : 22-09-05 00:43

On Wed, 21 Sep 2005 17:01:51 +0200, "Steffen Holm"
<mail@skibumsen.nospam> wrote:

>Microsoft OLE DB Provider for ODBC Drivers error '80040e10'
>[Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1.
>
>/elevmsu/elevred2.asp, line 31
>
>Min 31. linie ser således ud:
>
>Conn.Execute(strSQL)
>
>Min strSQL ser således ud:
>Update Elever Set Fornavn = 'Karen' , Efternavn = 'Breindahl-Pedersen' ,
>Adresse = 'Højskolen 123' , Bynavn = 'xxxxxx' , Postnr = '5856' , Telefon =
>'' , Mobiltelefon = 'xxxxxxxx' , Beskrivelse = 'Beskrivelse af Karen' ,
>MSNadresse = 'xxxxxxxx@ofir.dk' Where ID = CInt(idnr)

Mere interessant er, hvordan din SQL-streng ser ud *efter* at alle
dine variable er indsat.
Så prøv *midlertidigt* at indsætte disse to linier før linie 31:

Response.Write strSql
Response.End

- så skulle det gerne stå bøjet i neon, hvad der er galt

Se evt. midt på denne side, hvor der er en lidt mere detaljeret
forklaring:
<url: http://www.asp-faq.dk/article/?id=41>

Good luck,
Jørn

--
Jørn Andersen,
Brønshøj

Steffen Holm (22-09-2005)
Kommentar
Fra : Steffen Holm


Dato : 22-09-05 17:22

"Jørn Andersen" <jorn@jorna.dk> wrote

> Mere interessant er, hvordan din SQL-streng ser ud *efter* at alle
> dine variable er indsat.
> Så prøv *midlertidigt* at indsætte disse to linier før linie 31:
>
> Response.Write strSql
> Response.End

Det har jeg gjort, og det var det output jeg præsenterede i mit indlæg.

> - så skulle det gerne stå bøjet i neon, hvad der er galt

Det kom det til i dag - jeg forsøgte at gemme en tom værdi i "Telefon"
kolonnen. Jeg havde imidlertid valgt datatypen i "telefon" kolonnen til at
være integer, og de kan som bekendt ikke være tomme, når man bruger Update.

Tak for dit input, og også for terjes inputs.

--
Steffen Holm



Jens Gyldenkærne Cla~ (22-09-2005)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 22-09-05 21:48

Steffen Holm skrev:

> Det har jeg gjort, og det var det output jeg præsenterede i
> mit indlæg.

O.k.

>> - så skulle det gerne stå bøjet i neon, hvad der er galt
>
> Det kom det til i dag - jeg forsøgte at gemme en tom værdi i
> "Telefon" kolonnen.

Hvis udskriften fra det oprindelige indlæg er korrekt, har du en
fejl mere:

   Update Elever Set [snip...] Where ID = CInt(idnr)

Du har ikke fået id-nummeret ind i sql-sætningen - så sætningen
herover vil fejle.


> Jeg havde imidlertid valgt datatypen i "telefon" kolonnen til
> at være integer, og de kan som bekendt ikke være tomme, når
> man bruger Update.

Jo da - de kan bare ikke sættes til den tomme streng. Den specielle
værdi NULL kan bruges til alle datatyper når et felt ikke er
obligatorisk (det er standardværdien for alle felter der ikke har
defineret en standardværdi).

NULL kan også bruges i en opdatering:

   UPDATE Elever SET telefon = NULL WHERE ID = 42

- men hvis værdierne kommer fra en form, er man nødt til at
konvertere tomme strenge til "NULL". Det kan fx gøres i en funktion
som følgende (der er helt og aldeles utestet)

Function zn(feltnavn)
   ' Hent en talværdi fra et formfelt og returner enten tallet
   ' eller strengen NULL til brug i en sql-sætning
   Dim fval
   fval = Request.Form(feltnavn)
   If isNumeric(fval) Then
       zn = fval
   Else
       zn = "NULL"
   End If
End Function



--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Søg
Reklame
Statistik
Spørgsmål : 177500
Tips : 31968
Nyheder : 719565
Indlæg : 6408518
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste