/ 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
Samtidighed i en access-database
Fra : Jens R. rasmussen


Dato : 31-03-09 19:33

Først tak for al den hjælp jeg itv., har modtaget her i gruppen.
I er bare fantastiske.

Og så "dagens" spørgsmål

Jeg har en accessdatabase med bla. en tabel der hedder Kunder,
hvor Acccess selv tildeler en primærnøgle til hver ny record.

Fra min hjemmeside www.vinvenner.dk/tilmelding9.asp kan
interesserede melde sig til en vinsmagning. Hvis de er kendte
(med brugerid og password) er der intet problem. Men hvis de er
ukendte, beder jeg dem indtaste deres data (navn, adrsse,.....)
og når de har gjort det, lægger jeg deres oplysninger op i
tabellen Kunder.

Se nu ville jeg grumme gerne vide hvilken værdi access
autotildeing af primærnøgler, har givet den nye kunde. Altså
hvilken primærnøgle har min indlæsning genereret?

Efter jeg har skrevet i tabellen Kundedata og er vendt tilbage
til mit behandlerprogram www.vinvenner.dk/modtag4a.asp laver jeg
så en forespørgel og beder om den sidste record for at aflæse
primærnøglen. Men kan jeg være sikker på, at en anden browser
ikke lige har været inde og lægge en ny kunde ind - således at
den primærnøgle jeg spørger på nu (den sidste) ikke er den jeg
ønsker (fordi den i mellmtiden er blevet den næstsidste?)?

Eller spurgt på en anden måde
- er der en skrive-læse sætning som i et hug både skriver og
læser fra samme (låste) record?

- eller er der en komammdo så jeg kan blokere andre fra at skrive
i tabellen indtil jeg er færdig. For det er vel ikke så heldigt,
at access er låst fra jeg laver en conn.open til jeg laver en
conn.close?

mvh
Jens

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

 
 
Anders M (31-03-2009)
Kommentar
Fra : Anders M


Dato : 31-03-09 20:27

Hvad med at bruge session, så du indsætter sessionen i databasen og så
henter de data fra den session der passer til brugerens.



--
Anders Mikkelsen
www.designagroup.dk

Jens R. rasmussen (31-03-2009)
Kommentar
Fra : Jens R. rasmussen


Dato : 31-03-09 21:03

Anders M wrote in dk.edb.internet.webdesign.serverside.asp:
> Hvad med at bruge session, så du indsætter sessionen i databasen og så
> henter de data fra den session der passer til brugerens.
> --
> Anders Mikkelsen
> www.designagroup.dk

kan jeg være sikker på at den sessionID, som min server tildeler den
pågældende bruger er uniq? Thi ellers er jo lige vidt, hvis - i teorien 2
klienter kan få samme sessionID!'

mvh


--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Anders M (01-04-2009)
Kommentar
Fra : Anders M


Dato : 01-04-09 12:50

> kan jeg være sikker på at den sessionID, som min server tildeler den
> pågældende bruger er uniq? Thi ellers er jo lige vidt, hvis - i teorien 2
> klienter kan få samme sessionID!'

Ja, det kan du godt.
--
Anders Mikkelsen
www.designagroup.dk

Stig Johansen (01-04-2009)
Kommentar
Fra : Stig Johansen


Dato : 01-04-09 02:13

Jens R. rasmussen wrote:

> - eller er der en komammdo så jeg kan blokere andre fra at skrive
> i tabellen indtil jeg er færdig.

Kig efter .begintrans og .committrans
Pseudokode:
oConn.Begintrans
'Insert kunder'
'læs tæller'
oConn.Committrans

--
Med venlig hilsen
Stig Johansen

Jakob Lund Krarup (01-04-2009)
Kommentar
Fra : Jakob Lund Krarup


Dato : 01-04-09 15:18

Hej Jens

De to foregående svar besvarer så vidt jeg ved ikke dit spørgsmål.
Du vil vide om du i ét hug kan lave en INSERT der samtidig returnerer
den tildelte primærnøgle - korrekt?

Så har du ikke brug for at lave en transaktion. Transaktioner skal du
bruge hvis du laver to eller flere ændringer i databasen som skal
udføres BEGGE eller fejle SAMLET.

Men for at besvare dit spørgsmål - "det kan du godt!". Du skal bruge et
RecordSet objekt.

Med et Recordset kan du
- klargøre de andre kolonners data (bare ikke primærnøglekolonnens)
- opdatere tabellen med den nye række (vha. INSERT)
- aflæse den tildelte primærnøgleværdi efterfølgende

Kodeeksempel:
I eksemplet her er der en tabel "Fakturaer" med primærnøglekolonnen "Id"
og kolonnerne "BestillingsDato" og "Beloeb".
********************************************

'opret connection til Access database
Set Butik = Server.CreateObject("ADODB.Connection")
DBPath = "DBQ=" & server.mappath("butik.mdb")
Butik.Open "DRIVER={Microsoft Access Driver (*.mdb)}; " & DBPath

'opret Recordset objekt
SET FakturaRecSet = Server.CreateObject("ADODB.RecordSet")
'åbner tabellen "Fakturaer" vha. et navngivent Connection object "Butik"
FakturaRecSet.Open "Fakturaer", Butik, 1, 2

'lav ny, blank post i tabellen
FakturaRecSet.AddNew

FakturaRecSet("BestillingsDato") = now
FakturaRecSet("Beloeb") = BeregnTotal

'opdater (svarer til en INSERT)
FakturaRecSet.Update

'*** HER ***** kan du aflæse den nyligt tildelte primærnøgleværdi
dim primaerNoegle
primaerNoegle = FakturaRecSet("Id")

'luk og frigør recordset
FakturaRecSet.close
SET FakturaRecSet = nothing

'luk og frigør connection
Butik.Close
SET Butik = nothing

*****************************************
Hvis det ikke giver mening så skriv igen : )

Venligste hilsener - Jakob

Stig Johansen (01-04-2009)
Kommentar
Fra : Stig Johansen


Dato : 01-04-09 16:13

Jakob Lund Krarup wrote:

> Transaktioner skal du
> bruge hvis du laver to eller flere ændringer i databasen som skal
> udføres BEGGE eller fejle SAMLET.

Eller låse for samtidige INSERT's ;)

--
Med venlig hilsen
Stig Johansen

Jakob Lund Krarup (01-04-2009)
Kommentar
Fra : Jakob Lund Krarup


Dato : 01-04-09 17:15

Stig Johansen wrote:
> Jakob Lund Krarup wrote:
>
>> Transaktioner skal du
>> bruge hvis du laver to eller flere ændringer i databasen som skal
>> udføres BEGGE eller fejle SAMLET.
>
> Eller låse for samtidige INSERT's ;)
>

Hej Stig : )

Hvillket scenarie tænker du på?

Venligste hilsener - Jakob

Stig Johansen (02-04-2009)
Kommentar
Fra : Stig Johansen


Dato : 02-04-09 05:48

Jakob Lund Krarup wrote:

> Stig Johansen wrote:
>> Jakob Lund Krarup wrote:
>>
>>> Transaktioner skal du
>>> bruge hvis du laver to eller flere ændringer i databasen som skal
>>> udføres BEGGE eller fejle SAMLET.
>>
>> Eller låse for samtidige INSERT's ;)
>>
>
> Hej Stig : )
>
> Hvillket scenarie tænker du på?

Det problem som OP stillede, og den løsning jeg angav i mit svar.
En konfliktende INSERT vil ikke blive eksekveret før den første er
committed, og da læsningen af den sidste tæller er inde i transaktionen,
vil den altid være aktuel.

--
Med venlig hilsen
Stig Johansen

Jakob Lund Krarup (04-04-2009)
Kommentar
Fra : Jakob Lund Krarup


Dato : 04-04-09 09:40

>> Hvillket scenarie tænker du på?
>
> Det problem som OP stillede, og den løsning jeg angav i mit svar.
> En konfliktende INSERT vil ikke blive eksekveret før den første er
> committed, og da læsningen af den sidste tæller er inde i transaktionen,
> vil den altid være aktuel.

Har du et kodeeksempel? Kender ikke metoden til at hente den sidste
autooptalte værdi i en Access database.

Venlig hilsen - Jakob


Jens R. rasmussen (02-04-2009)
Kommentar
Fra : Jens R. rasmussen


Dato : 02-04-09 18:45


hej Jakob/

Jakob Lund Krarup wrote in dk.edb.internet.webdesign.serverside.asp:
> Hej Jens
>
> De to foregående svar besvarer så vidt jeg ved ikke dit spørgsmål.
> Du vil vide om du i ét hug kan lave en INSERT der samtidig returnerer
> den tildelte primærnøgle - korrekt?
Lige præcis

> Men for at besvare dit spørgsmål - "det kan du godt!". Du skal bruge et
> RecordSet objekt.
OK. Jeg er ikke stødt på RecordSet som nøgle eller reserveret ord før. Jeg
har søgt lidt, men ikke fundet en "overskrift" om RecordSet. Hr du en link?
I htmls tutorial bruger man fx 'et rs = Conn.Execute (streng)' Er 'rs' et
samme som RecordSet ?

> Med et Recordset kan du
> - klargøre de andre kolonners data (bare ikke primærnøglekolonnens)
> - opdatere tabellen med den nye række (vha. INSERT)
> - aflæse den tildelte primærnøgleværdi efterfølgende
>
> Kodeeksempel:
> I eksemplet her er der en tabel "Fakturaer" med primærnøglekolonnen "Id"
> og kolonnerne "BestillingsDato" og "Beloeb".
> ********************************************
>
> 'opret connection til Access database
> Set Butik = Server.CreateObject("ADODB.Connection")
> DBPath = "DBQ=" & server.mappath("butik.mdb")
> Butik.Open "DRIVER={Microsoft Access Driver (*.mdb)}; " & DBPath
Som jeg forstår dig er ovennævnte den generelle "connection" jeg allerede
har, dvs. jeg skal ikke lave noget nyt.

> 'opret Recordset objekt
> SET FakturaRecSet = Server.CreateObject("ADODB.RecordSet")
> 'åbner tabellen "Fakturaer" vha. et navngivent Connection object "Butik"
> FakturaRecSet.Open "Fakturaer", Butik, 1, 2
Aha. Smart. Mn hjælp mig lige med at tyde syntaksen. 'Fakturaer er tabellen,
'Butik' er min oprettede connection, men hvad '1' og '2'?

> 'lav ny, blank post i tabellen
> FakturaRecSet.AddNew
>
> FakturaRecSet("BestillingsDato") = now
> FakturaRecSet("Beloeb") = BeregnTotal
ok

> 'opdater (svarer til en INSERT)
> FakturaRecSet.Update
ok

> '*** HER ***** kan du aflæse den nyligt tildelte primærnøgleværdi
> dim primaerNoegle
> primaerNoegle = FakturaRecSet("Id")
ok

> 'luk og frigør recordset
> FakturaRecSet.close
> SET FakturaRecSet = nothing
ja - det ligner jo (åbning) og lukning af en connection.

> 'luk og frigør connection
> Butik.Close
> SET Butik = nothing
>
> *****************************************
> Hvis det ikke giver mening så skriv igen : )
Det giver i høj grad mening. Men jeg ville være dig taknemmlig, hvis du kan
anvise hvor jeg kan læse om dette (og lignende) - for mit databakendskab
svarer til de lektioner, der er i html.dk's tutorial. Det var rart hvis jeg
ikke skal "forstyrre" så ofte med hvad der sikkert er banaliteter for dig og
de andre her i diskussionforaen.

Men tusind tak itv. Jeg har ikke afprøvet det endnu - men jeg tror jeg
forstår det.
mhh
/Jens
> Venligste hilsener - Jakob


--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Jakob Lund Krarup (03-04-2009)
Kommentar
Fra : Jakob Lund Krarup


Dato : 03-04-09 20:44

Hej igen : )

> OK. Jeg er ikke stødt på RecordSet som nøgle eller reserveret ord før. Jeg
> har søgt lidt, men ikke fundet en "overskrift" om RecordSet. Hr du en link?
> I htmls tutorial bruger man fx 'et rs = Conn.Execute (streng)' Er 'rs' et
> samme som RecordSet ?

Nej Connection.Execute returnerer et ResultSet, hvilket du kun kan læse
fra ikke skrive tilbage til databasen. Et RecordSet kan begge dele.

>> 'opret connection til Access database
>> Set Butik = Server.CreateObject("ADODB.Connection")
>> DBPath = "DBQ=" & server.mappath("butik.mdb")
>> Butik.Open "DRIVER={Microsoft Access Driver (*.mdb)}; " & DBPath
> Som jeg forstår dig er ovennævnte den generelle "connection" jeg allerede
> har, dvs. jeg skal ikke lave noget nyt.
Korrekt!

>> 'opret Recordset objekt
>> SET FakturaRecSet = Server.CreateObject("ADODB.RecordSet")
>> 'åbner tabellen "Fakturaer" vha. et navngivent Connection object "Butik"
>> FakturaRecSet.Open "Fakturaer", Butik, 1, 2
> Aha. Smart. Mn hjælp mig lige med at tyde syntaksen. 'Fakturaer er tabellen,
> 'Butik' er min oprettede connection, men hvad '1' og '2'?

Jeg har altid bare brugt 1 og 2 - den længere forklaring er her:
http://www.w3schools.com/ADO/met_rs_open.asp
Der er lidt forskellige muligheder at vælge imellem, men den korte
forklaring er, at det afgør hvilken type RecordSet du får tilbage.

>> *****************************************
>> Hvis det ikke giver mening så skriv igen : )
> Det giver i høj grad mening. Men jeg ville være dig taknemmlig, hvis du kan
> anvise hvor jeg kan læse om dette (og lignende) - for mit databakendskab
> svarer til de lektioner, der er i html.dk's tutorial. Det var rart hvis jeg
> ikke skal "forstyrre" så ofte med hvad der sikkert er banaliteter for dig og
> de andre her i diskussionforaen.

Du kan læse mere på ovenstående link. w3schools.com er i øvrigt et
glimrende supplement til HTML.dk.

Venligste hilsener - Jakob

Søg
Reklame
Statistik
Spørgsmål : 177579
Tips : 31968
Nyheder : 719565
Indlæg : 6409073
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste