Avatar billede totalpc Seniormester
09. oktober 2007 - 09:13 Der er 14 kommentarer og
2 løsninger

standard kode til at gemme i access base

Hej
Er der en der vil vise et eksempel på en standardkode for at gemme i en access 2007 base med databasekald og det hele?

Forstil at jeg kommer fra en form med 2 felter. Fornavn og efternavn fx.
Avatar billede fennec Nybegynder
09. oktober 2007 - 09:19 #1
'Åben forbindelse (top af side)
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.Mappath("DinDatabase.mdb;")

'indsæt data
conn.execute("insert into dinTabel(fornavn,efternavn) values('"& replace(request.form("efternavn"),"'","''") &"','"& replace(request.form("efternavn"),"'","''") &"')")

'Luk forbindelse når den ikke skal bruges mere (i bunden af side)
conn.close
Avatar billede fennec Nybegynder
09. oktober 2007 - 09:23 #2
I tilfælde af at der er indtastet ' i et af navnene bliver vi nød til at escape tegnet ved at indsætte 2 istedet. Derfor har jeg indsat replace koden.

Havde også fået valgt "efternavn" to gange. Det skal selvfølgelig være "fornavn" og "efternavn":
conn.execute("insert into dinTabel(fornavn,efternavn) values('"& replace(request.form("fornavn"),"'","''") &"','"& replace(request.form("efternavn"),"'","''") &"')")
Avatar billede softspot Forsker
09. oktober 2007 - 09:30 #3
set cn = Server.CreateObject("ADODB.Connection")
cn.Open dinConnStr ' find evt. formatet på connectionstring.com

set cmd = Server.CreateObject("ADODB.Command")
set cmd.ActiveConnection = cn
cmd.CommandText = "INSERT INTO person(fornavn, efternavn) VALUES(?,?)"
cmd.Parameters.Append cmd.CreateParameter("@fornavn", adVarChar, adParamInput, 35, Request.Form("fornavn"))
cmd.Parameters.Append cmd.CreateParameter("@efternavn", adVarChar, adParamInput, 35, Request.Form("efternavn"))
cmd.Execute()

' Hvis du skal bruge det nye ID efterfølgende (og du har en autonumber-kolonne i din tabel),
' kan du benytte flg. kode
set rs = cn.Execute("SELECT @@IDENTITY")
if not rs.eof then
  id = CLng(rs(0))
end if
rs.close
set rs = nothing


For at du kan bruge de tekstuelle konstanter til ADO (f.eks. adVarChar og adParamInput), skal du bruge denne META-header som jeg anbefaler du placerer i toppen af din global.asa, udenfor script-sektionen (så skal du ikke tænke mere på den). Det kan sagtens være det eneste der står i din global.asa. Global.asa skal som bekendt ligge i roden af dit site eller i roden af en virtuel mappe på dit site:

<!-- METADATA TYPE="typelib" uuid="00000205-0000-0010-8000-00AA006D2EA4"  -->

Et tips til at finde connectionstrings: opret en fil på dit skrivebord og kald den access.udl. dobbeltklik derefter på den og vælg provider, databasefil og evt. brugernavn/adgangskode til databasen. Test forbindelsen og hvis den er OK, så luk det skæmbillede du lige at sat forbindelsen op i og åbn access.udl i notepad. Nu skulle det være åbenlyst hvad du skal gøre herfra :)
Avatar billede softspot Forsker
09. oktober 2007 - 09:33 #4
Du skal såvidt muligt bruge den provider der passer til det der er installeret på din host, men det er givetvis OLE DB for Access. Ældre versioner af access kan muligvis have behov for en Jet-driver, men vælg som udgangspunkt OLE DB.
Avatar billede totalpc Seniormester
09. oktober 2007 - 09:35 #5
Okay.
Det ligner slet ikke det jeg normalt har brugt. Mit spørgsmål er en udløber af dette spørgsmål: http://www.eksperten.dk/spm/800031
Som I kan se er det slet ikke den kode jeg er vant til at bruge.
Kan I evt. hjælpe mig videre i http://www.eksperten.dk/spm/800031 ?
Ellers må jeg prøve om jeg kan omskrive det til et af jeres eksempler.
Avatar billede softspot Forsker
09. oktober 2007 - 09:41 #6
Jeg vil da klart anbefale dig at bruge command-objektet, da det fjerner behovet for at håndtere specielle tegn som apostrof i de værdier du putter i forspørgslen - command-objektet sørger for at få oversat værdierne til det du angiver i parametrene. Ud over det sikkerhedsmæssige aspekt er håndteret, synes jeg jo at det bliver meget mere strømlinet og overskueligt end den gamle/traditionelle SQL-streng sammensættelsesmetode.
Avatar billede fennec Nybegynder
09. oktober 2007 - 09:43 #7
Så er det på denne måde.

Set Conn = CreateObject("adodb.connection")
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.Mappath("DinDatabase.mdb;")

Set RS=Server.CreateObject("ADODB.Recordset")
RS.CursorLocation = 2
RS.CursorType = 0
RS.LockType = 3
SQL = "SELECT * FROM dinTabel"
RS.Open SQL, Conn
   
rs.addnew
rs("fornavn") = request.form("fornavn")
rs("efternavn") = request.form("efternavn")
rs.update
RS.Close
Avatar billede softspot Forsker
09. oktober 2007 - 09:43 #8
Det kan under ingen omstændigheder anbefales at bruge recordset og cursors til at opdatere data i en database på et website. Det koster aaalt for mange resurser at holde sådan en fætter i luften. Du bør helt klart overveje enten den metode som fennec eller jeg viser...
Avatar billede softspot Forsker
09. oktober 2007 - 09:45 #9
...og da fennec nu sælger sin sjæl ;-), så må jeg jo hellere præcisere at det var fennec's først bud jeg refererede til :)
Avatar billede totalpc Seniormester
09. oktober 2007 - 09:50 #10
Okay...tak gutter
Jeg vil prøve mig lidt for med jeres forslag.

Smid et svar begge 2
Avatar billede softspot Forsker
09. oktober 2007 - 09:52 #11
Velbekomme :)
Avatar billede fennec Nybegynder
09. oktober 2007 - 10:12 #12
Jeg vil lige understrege at jeg er fuldstændig enig med softspot. Recordset og cursors er ikke en metode jeg vil anbefale. Eneste grund til at jag lavede koden, var fordi det er en metode du kender til.

softspot >>
Jeg kan dog bedst lide selv at kontrolere mine data, da jeg så kan give fejlmeddelser tilbage til brugeren. Derfor er den gamle/traditionelle SQL-streng mere min stil :o)
Avatar billede totalpc Seniormester
09. oktober 2007 - 10:27 #13
Takker og jeg skal nok tage mig sammen og kigge lidt på mysql og jeres metode i stedet for access og min junkkode hehe..men skulle lige have noget til at virke hurtigt!
Avatar billede softspot Forsker
09. oktober 2007 - 10:30 #14
fennec >> Der er ikke noget som forhindrer dig i at kontrollere validiteten af dine data inden du smider dem i en command-parameter - faktisk bør dette altid gøres, netop for at give brugeren nogle tilbagemeldinger. Validering af data har ikke (bør ikke have) noget med skrivning af data i databasen at gøre. Det er for dyr en måde at validere på, hvis data først skal i databasen inden fejlene findes...
Avatar billede softspot Forsker
09. oktober 2007 - 10:33 #15
totalpc >> Der er som sådan ikke noget galt i at bruge Command-objektet eller SQL-streng sammensætningssnask på en Access-database, så med mindre du rent faktisk har et behov for at skifte, ville jeg da bare fortsætte (og så bruge energien på at lære hvordan command-objektet og parametre fungerer ;-)).

Tak for point :)
Avatar billede totalpc Seniormester
09. oktober 2007 - 10:43 #16
Ok softspot. Tak for input. Det skal med i overvejelserne :)
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