Avatar billede pfp Nybegynder
02. november 2002 - 20:41 Der er 29 kommentarer og
1 løsning

ASP og databaser

Hej,

Jeg syntes ellers jeg plejer at kunne bruge noget lignende nedenstående kode når jeg arbejder med ASP og databaser.

<%
Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "Driver={Microsoft Access Driver (*.mdb)};DBQ=" & Server.Mappath("Database.mdb")
Set RecSet = Server.CreateObject("ADODB.Recordset")

If Request.Querystring("oplysninger") = "gem" then

Redvirk = "SELECT * FROM Virksomhed WHERE ID=" & Request.Form("varID")

RecSet.Open Redvirk, Connect, adOpenStatic, adLockOptimistic
RecSet.Update

RecSet("Virksomhed") = Request.Form("Virksomhed")
RecSet("Adresse") = Request.Form("Adresse")
RecSet("Postnr") = Request.Form("Postnr")
RecSet("Bynavn") = Request.Form("Bynavn")
RecSet("Telefon") = Request.Form("Telefon")
RecSet("Telefax") = Request.Form("Telefax")
RecSet("Mobiltelefon") = Request.Form("Mobiltelefon")
RecSet("Email") = Request.Form("Email")
RecSet("Web") = Request.Form("Web")
RecSet("CVR") = Request.Form("CVR")
RecSet("Reg") = Request.Form("Reg")
RecSet("Konto") = Request.Form("Konto")
RecSet.Update

Response.Redirect("Default.asp")
End if
%>

Men af en eller anden grund gider det ikke virke. Jeg får fejlen: "Argumenterne har en forkert type eller er uden for det angivne område, eller der er opstået en konflikt mellem dem."

Jeg får at vide at fejlen sker i denne linie:
"RecSet.Open Redvirk, Connect, adOpenStatic, adLockOptimistic"

Håber der er en der har tid til at hjælpe.

/peter
Avatar billede soes Nybegynder
02. november 2002 - 20:45 #1
jeg er ikke sikker, men har du ikke en recSet.Update for meget med i toppen, ved ikke lige om det goer nogen forskel.
Avatar billede pfp Nybegynder
02. november 2002 - 20:48 #2
Tak for dit indlæg. Men nej det gør desværre ingen forskel.
Avatar billede soes Nybegynder
02. november 2002 - 21:07 #3
jeg havde det ogsaa lidt paa fornemmelsen :o)

Har du checket at der er noget data i alle dine formfelter?

Har du overvejet om det ikke var nemmere at goere det med SQL, istedet for at oprette et recordset?

Hvis du vil se alle din form felter kan du bruge dette:
<%
For Each Item In Request.Form
Response.write(Item & " - " & Request.Form(Item) & "<br>" & vbcrlf)
Next
%>
Avatar billede pfp Nybegynder
02. november 2002 - 21:11 #4
Hej,

Det burde vel ikke give fejl hvis jeg havde et tomt felt? Hvis nu f.eks. man ønsker at slette sit telefonnr. fra databasen skal der være mulighed for bare at fjerne det her og så opdatere det.

Grunden til at jeg har valgt fremgangsmåden med rs istedet for SQL er at jeg syntes det er meget mere overskueligt end en lang liste med kommaer imellem alle resultaterne.

Hvis du kan overbevise mig om at det kan gøres lige så overskueligt med SQL bliver jeg en glad mand, da jeg godt ved at det er det bedste rent performancemæssigt.

/peter
Avatar billede soes Nybegynder
02. november 2002 - 21:21 #5
SQL = "UPDATE Virksomhed SET "
SQL = SQL & "Virksomhed = '" & Request.Form("Virksomhed") & "', "
SQL = SQL & "Adresse = '" & Request.Form("Adresse") & "', "
SQL = SQL & "Postnr = " & Request.Form("Postnr") & ", "
SQL = SQL & "Bynavn = '" & Request.Form("Bynavn") & "', "
SQL = SQL & "Telefon = " & Request.Form("Telefon") & ", "
SQL = SQL & "Telefax = " & Request.Form("Telefax") & ", "
SQL = SQL & "Email = '" & Request.Form("Email") & "', "
SQL = SQL & "Web = '" & Request.Form("Web") & "', "
SQL = SQL & "CVR = '" & Request.Form("CVR") & "', "
SQL = SQL & "Reg = " & Request.Form("Reg") & ", "
SQL = SQL & "Konto = " & Request.Form("Konto") & ", "
SQL = SQL & "WHERE ID = " & Request.Form("varID")

Du skal nok lige kigge paa CVR, Reg og konto, jeg ved ikke om der er tale om en talvaerdi eller tekst. Hvis det er tekst saa skal der ' ' omkring ellers ikke

Du afvikler det nemmest saadan her:
Connect.Execute(Sql)
Avatar billede pfp Nybegynder
02. november 2002 - 21:30 #6
Det ligner noget jeg har set før. Det er det med de ' jeg bliver forvirret af.

- Telefon
- Telefax
- Mobiltelefon
- CVR
- Reg
- Konto

er alle talværdier.
Avatar billede soes Nybegynder
02. november 2002 - 21:34 #7
SQL = "UPDATE Virksomhed SET "
SQL = SQL & "Virksomhed = '" & Request.Form("Virksomhed") & "', "
SQL = SQL & "Adresse = '" & Request.Form("Adresse") & "', "
SQL = SQL & "Postnr = " & Request.Form("Postnr") & ", "
SQL = SQL & "Bynavn = '" & Request.Form("Bynavn") & "', "
SQL = SQL & "Telefon = " & Request.Form("Telefon") & ", "
SQL = SQL & "Telefax = " & Request.Form("Telefax") & ", "
SQL = SQL & "Mobiltelefon = " & Request.Form("Mobiltelefon") & ", "
SQL = SQL & "Email = '" & Request.Form("Email") & "', "
SQL = SQL & "Web = '" & Request.Form("Web") & "', "
SQL = SQL & "CVR = " & Request.Form("CVR") & ", "
SQL = SQL & "Reg = " & Request.Form("Reg") & ", "
SQL = SQL & "Konto = " & Request.Form("Konto") & ", "
SQL = SQL & "WHERE ID = " & Request.Form("varID")
Avatar billede pfp Nybegynder
02. november 2002 - 21:39 #8
Ok, jeg tror eller jeg er ved at have fat i fidusen nu, men hvorfor får jeg fejl med det her:


Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("Database.mdb")
Conn.Open DSN

If Request.Querystring("oplysninger") = "gem" then

SQL = "UPDATE Virksomhed SET "
SQL = SQL & "Virksomhed = '" & Request.Form("Virksomhed") & "', "
SQL = SQL & "Adresse = '" & Request.Form("Adresse") & "', "
SQL = SQL & "Postnr = " & Request.Form("Postnr") & ", "
SQL = SQL & "Bynavn = '" & Request.Form("Bynavn") & "', "
SQL = SQL & "Telefon = " & Request.Form("Telefon") & ", "
SQL = SQL & "Telefax = " & Request.Form("Telefax") & ", "
SQL = SQL & "Mobiltelefon = " & Request.Form("Mobiltelefon") & ", "
SQL = SQL & "Email = '" & Request.Form("Email") & "', "
SQL = SQL & "Web = '" & Request.Form("Web") & "', "
SQL = SQL & "CVR = " & Request.Form("CVR") & ", "
SQL = SQL & "Reg = " & Request.Form("Reg") & ", "
SQL = SQL & "Konto = " & Request.Form("Konto") & ", "
SQL = SQL & "WHERE ID = " & Request.Form("varID")
Conn.Execute(SQL)

Response.Redirect("Default.asp")
End if

Jeg får fejl der hvor jeg siger Conn.Execute(SQL). Fejlen er "Der er en syntaksfejl i UPDATE-sætningen."
Avatar billede chrisrj Forsker
02. november 2002 - 23:08 #9
Denne linie:

SQL = SQL & "Konto = " & Request.Form("Konto") & ", "


skal være:

SQL = SQL & "Konto = " & Request.Form("Konto") & " "
Avatar billede pfp Nybegynder
02. november 2002 - 23:13 #10
chris -> Det giver samme fejl alligevel
Avatar billede eagleeye Praktikant
02. november 2002 - 23:22 #11
Mht til din orindelige kode+fejl. Jeg har set den fejl komme pga af providere/driveren med Access:

Connect.Open "Driver={Microsoft Access Driver (*.mdb)};DBQ=" & Server.Mappath("Database.mdb")


Prøv at bruge OLE DB provider:

Connect.Open "Data Source="& server.mappath("Database.mdb") & ";Provider=Microsoft.Jet.OLEDB.4.0;"


Mth til sidste problem, så skal der ikke være , før WHERE :

SQL = SQL & "Konto = " & Request.Form("Konto") & " "
Avatar billede pfp Nybegynder
02. november 2002 - 23:27 #12
Mht. det sidste problem mener du så ikke det samme som chrisrj i 23:08:20. Det kan jeg nemlig ikke få til at virke, det giver stadig samme fejl.

Jeg er efterhånden mere eller mindre overbevist om at jeg gerne vil have det til at køre med SQL, som vi har gang i her, men hvis det bliver alt for bøvlet må jeg jo prøve at gå videre med min oprindelige kode.
Avatar billede eagleeye Praktikant
02. november 2002 - 23:31 #13
Men SQL prøv at udskrive SQL sætninge efter du har lavet den det er tit lettere at se fejl i den ..
Avatar billede eagleeye Praktikant
02. november 2002 - 23:33 #14
Eks vis skal talfelterne være udfyldt med noget man kan ikke havde et tomt tal felt i SQL eks:

UPDATE... SET ..... Postnr = , Bynavn = 'bla' ...

Så vil den fejle man skal enten udelade feltet hvis det er tomt eller selv sæætte det lig med 0
Avatar billede eagleeye Praktikant
02. november 2002 - 23:34 #15
Jeg kan se der er både telefon mobil og fax som er talfelter og som ikke alle ville kunne udfylde...
Avatar billede pfp Nybegynder
02. november 2002 - 23:37 #16
Igen har du redet min nat! Det var fordi mobil-feltet var tomt. Vil du anbefale at jeg bare laver telefonnr. som tekst også for at undgå de problemer?
Avatar billede eagleeye Praktikant
02. november 2002 - 23:44 #17
Ja det har jeg gjort hvor jeg har telefonnummer med.. En kolonne med type tekst og så husk sætte tillad nullængde til Ja i for kolonnen tabellen.

Men som tal felt fylder data lidt mindre end som tekst kolonne, men det har nok ikke så meget at sige.
Avatar billede pfp Nybegynder
02. november 2002 - 23:46 #18
Ok, tusind tak. Soes får lige lidt af pointene for den grundlæggende SQL. Jeg går ud fra det er ok med dig.
Avatar billede eagleeye Praktikant
02. november 2002 - 23:51 #19
Naturligvis er det det. ;)
Avatar billede pfp Nybegynder
02. november 2002 - 23:56 #20
Jeg har lige et lille spm. mere. Jeg skal bare lige have på plads hvordan man så indsætter i databasen også (nu kan jeg efterhånden Update og Delete). Jeg har forsøgt dette:
SQL = "Insert into Brugerprofiler "
SQL = SQL & "Brugernavn = '" & Request.Form("Brugernavn") & "', "
SQL = SQL & "Adgangskode = '" & Request.Form("Adgangskode") & "', "
SQL = SQL & "Navn = '" & Request.Form("Navn") & "', "
SQL = SQL & "Email = '" & Request.Form("Email") & "' "
Conn.Execute(SQL)
Response.Redirect("Default.asp")
'Response.Write "SQL er: " & SQL

Jeg har prøvet at udskrive SQL'en (den er kommenteret ud her) og jeg syntes egentlig det ser meget rigtigt ud, men der er syntaksfejl.

Du må sige til hvis du ønsker flere point, da dette jo er et ekstra spørgsmål udover det oprindelige, så finder vi ud af det.
Avatar billede eagleeye Praktikant
02. november 2002 - 23:59 #21
Ja INSERT er så helt forskellig fra UPDATE mht syntax :)

Så der skal være: INSERT INTO tabel (kolonne1, kolonne2, kolonne3) VALUES ('Data til kolonne1', 'Data til kolonne2', 'blaba')
Avatar billede eagleeye Praktikant
03. november 2002 - 00:01 #22
Jeg vil anbefale denne side omkriong SQL syntax, jeg bruger den selv når jeg er i tvivl om UPDATE/DELETE/INSERT syntax:

http://www.w3schools.com/sql/default.asp
Avatar billede pfp Nybegynder
03. november 2002 - 00:02 #23
Hmm, det var sikkert derfor jeg lagde ud med den kodeopbygning som jeg startede denne tråd med :-)

Kan det ikke lade sig gøre med Insert at stille det op sådan at man har databasefeltet og sin brugerdefinerede værdi overfor hinanden ligesom med Update?

Jeg har virkelig svært ved at overskue det andet :-(
Avatar billede eagleeye Praktikant
03. november 2002 - 00:04 #24
Nej det rigtigt men du kan stadig dele det op over flere linier eks:

SQL = "INSERT INTO Brugerprofiler (Brugernavn, Adgangskode, Navn, Email)"
SQL = SQL & " VALUES ("
SQL = SQL & "'" & Request.Form("Brugernavn") & "', "
SQL = SQL & "'" & Request.Form("Adgangskode") & "', "
SQL = SQL & "'" & Request.Form("Navn") & "', "
SQL = SQL & "'" & Request.Form("Email") & "'"
SQL = SQL & ")"
Conn.Execute(SQL)
Avatar billede pfp Nybegynder
03. november 2002 - 00:06 #25
Aaaah pyha! Så har vi igen noget der ligner noget jeg kan bruge :-)
Endnu en gang tusind tak!

Jeg opretter lige et spm. med point til dig så du kan få dem med det samme.
Avatar billede pfp Nybegynder
03. november 2002 - 00:07 #26
Du kan hente dine point her:
http://www.eksperten.dk/spm/278619

/peter
Avatar billede eagleeye Praktikant
03. november 2002 - 00:08 #27
Når du har lavet et par INSERT INTO SQL sætninger så vender du dig hurtigt til syntaxen. Men det havde måske være ret hvis UPDATE og INSERT lignede hinandnen lidt mere, men der er sikket en god forklaring.
Avatar billede pfp Nybegynder
03. november 2002 - 00:17 #28
Ja det er der sikkert, men pyt når først jeg har fået det på plads og vænnet mig til tanken så går det også helt fint. Tak for hjælpen og godnat.
Avatar billede pfp Nybegynder
03. november 2002 - 15:41 #29
soes -> Smider du ikke lige et svar så du kan få dine point?
Avatar billede soes Nybegynder
03. november 2002 - 17:28 #30
du faar lige et svar
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