webForumDet fria alternativet

Frågor om hämta, lägga till data och DSN

ASP

16 svar · 244 visningar · startad av LearningASP

Medlem sedan okt. 2001127 inlägg
Frågan#1

Hej, jag har lite frågor:

1. jag har tittat på idg´s wedstudio och sett följande sätt att lägga till data ur databasen

<!-- #include virtual="/databas/adovbs.inc" --> 

Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "driver={Microsoft Access Driver (*.mdb)};dbq=c:\inetpub\wwwroot\databas\adressbok.mdb" 

Set RecSet = Server.CreateObject("ADODB.Recordset")
Addera = "SELECT * FROM adressbok" 

RecSet.Open Addera, Connect, adOpenStatic, adLockOptimistic 

RecSet.AddNew 

RecSet("Fornamn") = Request.Form("fornamn")
RecSet("Efternamn") = Request.Form("efternamn")
RecSet("Adress") = Request.Form("adress") 

RecSet.Update
RecSet.Close
Connect.Close 

[kod]

Sen hittade jag ett annat sätt här 
[kod] Öppna databasen
Set Connection = Server.CreateObject("ADODB.Connection")
Connection.Open "erika"
' Skapa en SQL-sträng med namnet hämtat från formuläret
SQLStmt = "INSERT INTO guests(name) VALUES('" & Request("name") & "')"

' Exekvera SQL-strängen
Connection.Execute SQLStmt

' Stäng uppkopplingen
Connection.Close

Det sättet de hämtar data ur databsen på webstudio är det bra eller finns det nåt annat bättre sätt??

Och sen är min fråga om DSN på webstudio står det

Okej. Nu vet du hur man på traditionellt sätt skapar en databaskoppling. Det sätt som nyss beskrevs är dock väldigt klumpigt och omständligt. För att inte tala om hur jobbigt det är när man först har gjort en tillämpning lokalt med Personal Webbserver och sedan skall flytta allt till ett riktigt webbhotell.

Om webbhotellet dessutom är ett gratishotell kan det vara väldigt krångligt att be administratörerna för detta webbhotell att utföra denna process på sin server som vi nyss beskrivit.

Därför finns det en annan lösning på detta som avsevärt smidigare.

"driver={Microsoft Access Driver (*.mdb)};dbq=c:\inetpub\wwwroot\databasfil.mdb"

Ovanstående rad kan du skriva på alla ställen som du skall öppna din databas istället för att använda sättet där du måste skapa system-DNS via kontrollpanelen. Visst känns det enklare?

Enklare, men är det bättre??? vad vill webhottellen ha?

Tack för att Ni besvarar mina frågor

------------------
----------------------
Varje dag är en ny lektion ;)

Medlem sedan maj 20011 312 inlägg
#2

Webstudios sätt fungerar men det är inte optimalt. Man behöver inte köra

RecSet.Open Addera, Connect, adOpenStatic, adLockOptimistic
RecSet.AddNew
etc.

Utan vill man lägga in en ny rad i tabellen så använder man sig av insert likt:


strSQL = "INSERT INTO adressbok(Fornamn, Efternamn, adress) VALUES " &_
		"('" & Request.Form("fornamn") & "', '" & Request.Form("efternamn" & "', '" & Request.Form("adress") & "')"
Connect.Execute(strSQL)

------------------
Alltid lär man sig något nytt varje dag...

[Redigerat av Lukaspojken den 05 okt 2001]

Medlem sedan okt. 2001127 inlägg
#3
strSQL = "INSERT INTO adressbok(Fornamn, Efternamn, adress) VALUES " &_
"('" & Request.Form("fornamn") & "', '" & Request.Form("efternamn" & "', '" & Request.Form("adress") & "')"
Connect.Execute(strSQL)

adressbok är tabellnamnet eller

och det inom () är kolumnanen i databasen

och Request form skall stå i den ordningen de skall in i kolumnerna jag har i databasen?

------------------
----------------------
Varje dag är en ny lektion ;)

Medlem sedan dec. 200012 464 inlägg
#4

adressbok är tabellnamnet eller

Ja

och det inom () är kolumnanen i databasen

Nja, i tabellen är gängse terminologi.

och Request form skall stå i den ordningen de skall in i kolumnerna jag har i databasen?

Nej, ordningen mellan värden i values-listan skall vara samma som listan som anges efter tabellnamnet. Det är bara om man utelämnar kolumnnamnen som man måste ange värdena i samma ordning som de är definierade i tabellen.

------------------
essentitia preter non sans multiplicandum

Medlem sedan maj 20011 312 inlägg
#5

Vi verkar ha lite samma signatur... :)

LarsG svarade bra på dina sista frågor. Men för att skapa lite struktur och lättförstålig kod så bör man göra lite åt mitt håll...

------------------
Alltid lär man sig något nytt varje dag...

Medlem sedan okt. 2001127 inlägg
#6

Detta kanske framstår som en dum fråga, men det är ju trots allt fredag... ;)

1. hur vet den i vilka kolumner den skall lägga till värdena i databasen???

2 vad menar du med

Det är bara om man utelämnar kolumnnamnen som man måste ange värdena i samma ordning som de är definierade i tabellen.

------------------
----------------------
Varje dag är en ny lektion ;)

Medlem sedan aug. 20013 824 inlägg
#7

japp... det stämmer...
du kan oxå lägga request.form i en variabel då blir det så här:

strFornamn = Request.Form("fornamn")
strEfternamn = Request.Form("efternamn")
strAdress = Request.Form("adress")

strSQL = "INSERT INTO adressbok(Fornamn, Efternamn, adress) VALUES " &_
"('" & strFornamn & "', '" & strEfternamn & "', '" & strAdress & "')"
Connect.Execute(strSQL)

sen om du skall använda dig av datum så skall du ha ## i stället för ' '...
exempel:

strFornamn = Request.Form("fornamn")
strEfternamn = Request.Form("efternamn")
strAdress = Request.Form("adress")

strSQL = "INSERT INTO adressbok(Fornamn, Efternamn, Adress, Datum) VALUES " &_
"('" & strFornamn & "', '" & strEfternamn & "', '" & strAdress & "',#" & Date() & "#)"
Connect.Execute(strSQL)

och om du bara skall ha en förbestämd text så gör du så här:
strFornamn = Request.Form("fornamn")
strEfternamn = Request.Form("efternamn")
strAdress = Request.Form("adress")

strSQL = "INSERT INTO adressbok(Fornamn, Efternamn, Adress, Datum, [text]) VALUES " &_
"('" & strFornamn & "', '" & strEfternamn & "', '" & strAdress & "',#" & Date() & "#, 'din text')"
Connect.Execute(strSQL)

Nu kanske du såg att jag skrev [text]...det är för att text är ett reserverat ord och då skall ma sätta det innom [ ]. hade det stått DinText så hade du inte behövt [ ].

hoppas det hjälpte dig nåt...
/ Mikul

------------------
vad är det för fel mad att vara lat?, tänk om det blev krig och ingen kom dit.

Medlem sedan aug. 20013 824 inlägg
#8

ok det menas att du kan skriva tabellnamnen i vilken ordning du vill när du skriver INSERT INTO(tabell, tabell2, tabell1,tabell5)
men sen så måste du skriva samma ordning på Request.formarna eller vad du nu har i din VALUES() sats
exempel:
INSERT INTO(tabell, tabell2, tabell1,tabell5) VALUES('värdet i tabell', 'värdet i tabell2', 'värdet i tabell1', 'värdet i tabell5')

/ Mikul

------------------
vad är det för fel mad att vara lat?, tänk om det blev krig och ingen kom dit.

Medlem sedan aug. 20013 824 inlägg
#9

Välkommen LearningASP till Wf föresten.
hoppas du kommer ha en trevlig tid här på Wf...

/ Mikul

------------------
vad är det för fel mad att vara lat?, tänk om det blev krig och ingen kom dit.

Medlem sedan dec. 200012 464 inlägg
#10

1. hur vet den i vilka kolumner den skall lägga till värdena i databasen???

Om du skriver

insert into t(c1,c2) values('A','B')

så skapas en ny post där kolumnen c1 får värdet A och c2 värdet B. Om det finns fler kolumner i tabellen t så får dessa ett default-värde. När man skapar tabellen så kan man ange default-värden för varje kolumn. Om man inte har ett default-värde så blir kolumnen null, dvs odefinierad.

Det går att skriva

sql = "insert into t values('A','B')"

dvs att man utelämnar listan med kolumner. I det fallet så måste det finnas lika många värden i values-listan som det finns kolumner i tabellen och värdena anges i samma ordning som i tabelldefinitionen.

------------------
essentitia preter non sans multiplicandum

[Redigerat av LarsG den 05 okt 2001]

Medlem sedan feb. 20012 412 inlägg
#11

sen om du skall använda dig av datum så skall du ha ## i stället för ' '...
exempel:

Detta är en väldigt stor sanning med modifikation. Använder man access ska # # omge datumet men använder man tex SQL server eller MySQL så ska ' ' omge datumet.

mvh Jörgen :)

------------------
Varför bråka när man kan kramas?

Medlem sedan aug. 20013 824 inlägg
#12

tack jörgen...jag glömde av att skriva det...
;-)

/ Mikul

------------------
vad är det för fel mad att vara lat?, tänk om det blev krig och ingen kom dit.

[Redigerat av mikul den 05 okt 2001]

[Redigerat av mikul den 05 okt 2001]

Medlem sedan okt. 2001127 inlägg
#13

Är det från fall till fall och göra på det ena eller andra sättet? eller finns det klara nackdelar med nåt av dom?

Men nu har jag fått klarhet ;)

jag vill bara ha svar på en sista fråga den om DSN i mitt första inlägg

Tack..

------------------
----------------------
Varje dag är en ny lektion ;)

Medlem sedan aug. 20013 824 inlägg
#14

jag tycker att det finns klara fördelar med INSERT INTO för att då slipper du använda dig av tex Adovbs.inc och du slipper skap ett recordset som kanske inte alltid funkar utan att använda adovbs.inc
det blir inte heller lika mycket onödig kod...

/ Mikul

------------------
vad är det för fel mad att vara lat?, tänk om det blev krig och ingen kom dit.

Medlem sedan okt. 2001127 inlägg
#15

jag har lite nya frågor ;)

Vad använder man detta till?

Set objConn = Nothing

och när skall man använda det?

Vad använder man detta till?

Set rs = Server.CreateObject "ADODB.Recordset")

och när skall man använda det?

Vad vill webbhotellen ha
DSN eller DSN-löst

Tack på förhand

------------------
----------------------
Varje dag är en ny lektion ;)

[Redigerat av LearningASP den 11 okt 2001]

[Redigerat av LearningASP den 11 okt 2001]

Medlem sedan dec. 200012 464 inlägg
#16
Set objConn = Nothing

Det använder man när inte behöver ett objekt mer. Alla resurser som objektet använt frigörs. Detta görs implicit i alla fall då sidan är färdigbehandlad så det är inte absolut nödvändigt.

Set rs = Server.CreateObject "ADODB.Recordset")

används för att skapa ett recordset. Normalt så skriver man

set rs = connect.execute(sql)

för att få ett recordset. Då skapas det implicit. Om man skapar recordsetet explicit så har man möjlighet att sätta olika options. Du kan ju läsa lite här
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ado270/htm/mdmthrstopen.asp

Den enda anledningen till att själv skapa ett recordset är att man vill ha ett frikopplat recordset. (Allt data lagras på klienten.)

------------------
essentitia preter non sans multiplicandum

Medlem sedan feb. 20012 412 inlägg
#17

Hej!

  1. Du städar bort objectet

  2. Du skapar ett RecSet som heter rs

Övriga)

Det bästa är om du städar så fort du är klar med ett objekt.

rs.close()
SET rs = Nothing

Ett recset skapar du bara vid en SELECT i SQL där du "lägger" hämtad data.

Det kan bara ditt webhotell svara på ;)

r: grrr, LarsG hinner alltid före :e

mvh Jörgen :)

------------------
Varför bråka när man kan kramas?

[Redigerat av jorgen den 11 okt 2001]

261 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)