Avatar billede epimetheus Nybegynder
14. oktober 2007 - 16:44 Der er 12 kommentarer

Tillægsspørgsmål til: Indsætte ny post og hæve værdien med 1

Nu har jeg fundet ud af at indsætte en ny post og forhøje værdien med 1. Se spørgsmål
http://www.eksperten.dk/spm/800910


Nu skal jeg bare have aflæst hvad værdien er.

Jeg har prøvet med følgende, hvor der uden problemer bliver tilføjet en ny post.

Sub x()
  Dim lSql As String
  Dim lRs As ADODB.Recordset
  Dim lNummer As Long
  lSql = "Insert Into tabel1 (tNummer) Select Max(tNummer)+1 From tabel1"
  Set lRs = New ADODB.Recordset
  lRs.Open lSql, CurrentProject.Connection, adOpenDynamic, adLockReadOnly
  lNummer = lRs!tNummer ' Elementet kan ikke findes i ......
  lRs.Close
  Set lRs = Nothing
End Sub

Desværre kan tNummer ikke aflæses da recordsettet lukker umiddelbart efter sqlén  er sendt.

Noget godt forslag til hvordan den løses?
Avatar billede mugs Novice
14. oktober 2007 - 16:49 #1
Måske noget i stil med denne:

Sub x()
DIM VARa as long
  Dim lSql As String
  Dim lRs As ADODB.Recordset
  Dim lNummer As Long
  lSql = "Insert Into tabel1 (tNummer) Select Max(tNummer)+1 From tabel1"
VARa = lSql
MSGbox VarA 
Set lRs = New ADODB.Recordset
  lRs.Open lSql, CurrentProject.Connection, adOpenDynamic, adLockReadOnly
  lNummer = lRs!tNummer ' Elementet kan ikke findes i ......
  lRs.Close
  Set lRs = Nothing
End Sub

Men jeg synes nu det er en bøvlet måde at gøre det på :o)
Avatar billede epimetheus Nybegynder
14. oktober 2007 - 17:04 #2
Hvis du har et bedre forslag vil jeg da gerne høre om det.
Avatar billede mugs Novice
14. oktober 2007 - 17:15 #3
DoCmd.RunSQL "Insert Into tabel1 (tNummer) Select Max(tNummer)+1 From tabel1"
Avatar billede epimetheus Nybegynder
14. oktober 2007 - 17:26 #4
Det fortæller mig jo ikke hvilken værdi tNummer blev sat til.
Avatar billede mugs Novice
14. oktober 2007 - 17:40 #5
DoCmd.RunSQL "Insert Into tabel1 (tNummer) Select Max(tNummer)+1 From tabel1"
MsgBox DMax("[Tnummer]", "tabel1") + 1
Avatar billede epimetheus Nybegynder
14. oktober 2007 - 17:58 #6
Jeg kan godt selv finde ud af at gøre det af to omgange.
Det er der flere løsninger på.

Det jeg ønsker er at gøre det af en omgang.
Avatar billede epimetheus Nybegynder
14. oktober 2007 - 18:01 #7
DoCmd.RunSQL "Insert Into tabel1 (tNummer) Select Max(tNummer)+1 From tabel1"
MsgBox DMax("[Tnummer]", "tabel1") + 1

Det sikrer jo ikke at det nummer der bliver fundet, er det nummer der lige er lagt i tabellen.
Avatar billede mugs Novice
14. oktober 2007 - 18:14 #8
Jo - Den vil vise max i tabellen efter tilføjelsen. Om du har 1 eller 2 kodelinier kan jeg ikke se gør den store forskel. Du har jo selv flere kodelinier.
Avatar billede epimetheus Nybegynder
14. oktober 2007 - 18:18 #9
Hvis der nu er maks antal brugere igang med at oprette nye poster, er det vel ikke helt lige meget hvilken fremgangsmåde man bruger.

Et tænkt eksempel.
Bruger 1 optetter en ny post.
Bruger 2 opretter en ny post.
Bruger 1 aflæser højeste værdi.
Bruger 2 aflæser højeste værdi.

Begge brugere aflæser den samme værdi.

Hvis begge brugere opretter en post ca. samtidig vil det kunne lade sig gøre.
Avatar billede mugs Novice
14. oktober 2007 - 18:26 #10
udtryk.Postlåse

udtryk  Obligatorisk. Et udtryk, der returnerer et af objekterne på listen Gælder for.

Bemærkninger
Hvis du redigerer en post, kan den pågældende post låses automatisk, så andre brugere ikke kan redigere den, før du er færdig.

Formularer. Angiver, hvordan poster i den underliggende tabel eller forespørgsel låses, når data i en flerbrugerdatabase opdateres.


Rapporter. Angiver, om poster i den underliggende tabel eller forespørgsel låses, mens en rapport vises eller udskrives.


Forespørgsler. Angiver, om poster i en forespørgsel (typisk en handlingsforespørgsel i en flerbrugerdatabase) låses, mens forespørgslen kører.

Bemærk!  Egenskaben Postlåse gælder kun for formularer, rapporter eller forespørgsler i en Microsoft Access-database (.mdb).

Egenskaben Postlåse kan angives til følgende indstillinger.

Indstilling Visual Basic Beskrivelse
Ingen låse 0 (Standard) I formularer kan to eller flere brugere redigere den samme post samtidig. Dette kaldes også "begrænset" låsning. Hvis to brugere forsøger at gemme ændringer af den samme post, får den bruger, der forsøger at gemme posten sidst, en meddelelse. Denne bruger kan derefter slette posten, kopiere posten til Udklipsholder eller erstatte de ændringer, den anden bruger har foretaget. Denne indstilling bruges typisk i skrivebeskyttede formularer eller i enkeltbrugerdatabaser. Den bruges også i flerbrugerdatabaser, hvis mere end én bruger skal kunne foretage ændringer i den samme post samtidig.
I rapporter låses poster ikke, mens rapporten vises eller udskrives.

I forespørgsler låses poster ikke, mens forespørgslen køres.

Alle poster 1 Alle poster i den underliggende tabel eller forespørgsel låses, mens formularen er åben i formularvisning eller dataarkvisning, mens rapporten vises eller udskrives, eller mens forespørgslen køres. Brugere kan læse posterne, men ikke redigere, tilføje eller slette poster, før formularen lukkes, rapporten er udskrevet, eller forespørgslen er kørt.
Redigeret post 2 (Kun formularer og forespørgsler) En side med poster låses, når en bruger begynder at redigere et felt i posten, og forbliver låst, indtil brugeren flytter til en anden post. En post kan således kun redigeres af én bruger ad gangen. Dette kaldes også "fuldstændig" låsning.

Du kan angive denne egenskab ved hjælp af en formulars egenskabsark, en makro eller Visual Basic.
Bemærk!  Hvis du ændrer egenskaben Postlåse for en åben formular eller rapport, oprettes postsættet igen automatisk.

Du kan bruge indstillingen Ingen låse til formularer, hvis kun én person bruger de underliggende tabeller eller forespørgsler eller foretager alle ændringerne i dataene.

I en flerbrugerdatabase kan du bruge indstillingen Ingen låse, hvis du vil bruge begrænset låsning og advare brugere, der forsøger at redigere den samme post i en formular. Du kan bruge indstillingen Redigeret post, hvis du vil forhindre, at to eller flere brugere redigerer data samtidig.

Du kan bruge indstillingen Alle poster, hvis du vil sikre, at dataene ikke ændres, efter at du har fået vist eller er begyndt at udskrive en rapport eller køre en tilføjelses-, slette-, tabeloprettelses- eller opdateringsforespørgsel.

I formularvisning eller dataarkvisning har alle låste poster en låseindikator i postvælgeren.

Tip!  Du kan ændre standardindstillingen af egenskaben Postlåse for formularer ved at klikke på Indstillinger i menuen Funktioner, klikke på fanen Avanceret i dialogboksen Indstillinger og derefter vælge den ønskede indstilling under Standardpostlåsning.

Data i en formular, rapport eller forespørgsel fra en ODBC-database (Open Database Connectivity) behandles, som om indstillingen Ingen låse er valgt, uanset indstillingen af egenskaben Postlåse.
Avatar billede epimetheus Nybegynder
14. oktober 2007 - 19:40 #11
Bemærk!  Egenskaben Postlåse gælder kun for formularer, rapporter eller forespørgsler i en Microsoft Access-database (.mdb).

Jeg har ikke nogen formular, forspørgsel, eller rapport hvor jeg kan sætte postlås.

Det skal virke udelukkende som kode.
Avatar billede mugs Novice
14. oktober 2007 - 19:54 #12
Så er der jo kun tabeller tilbage, og der mener jeg ikke du kan lave disse ting. Det er jo meget begrænset hvad du kan kode tabellerne.
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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