16. september 2008 - 08:15Der er
21 kommentarer og 2 løsninger
Standardværdi eller hvad?
Jeg har et felt i en tabel som skal tildeles en værdi automatisk. Ved første indtastning skal værdien være A0 - næste A1 også videre indtil A6. Derefter skal værdien være A1 og op til A6. Altså A0 A1-A2-A3-A4-A5-A6-A1-A2-A3-A4-A5-A6-A1 osv. Jeg er klar over at jeg skal ind og have fat i noget endless loop,måske som standardværdi, men jeg ikke så god til det med kode, så jeg håber at en kan hjælpe mig med problemet
Teknologi, AI og forretning er i centrum på Computerworlds Cloud og AI Festival i København d. 18. og 19. september. Se hele programmet for den store konference om strategisk brug af Cloud og AI på: www.cloud-festival.dk
Så vidt så godt. Men den tildelte værdi (felt1) må så være afhængig af indtastningen i et andet felt (lad os kalde det felt2). Dette felt kan så være en Null værdi og eksempelvis måle om det er en ny record:
If me.newrecord then me.felt1 = A0 end if
Den næste indtastning kan så måle på felt1:
If me.felt1 = "A0" then me.felt1 = "A1! end if
Måske det ville være nemmere med en Select Case struktur.
Du kan klare det med en quick-and-dirty v.h.a. en lille tabel, der indeholder "tæller" værdien og en smule kode:
- Opret en tabel ved navn Tæller med et eneste felt: Nr (heltal) - Opret en post i tabellen med Nr=0
I din indtastningsformular erklærer du en variabel i toppen (før første rutine):
Dim Tlr As Integer
.. og tilføjer to små kode-stumper:
Private Sub Form_BeforeInsert(Cancel As Integer) Tlr = DLookup("Nr", "Tæller") Me.EnTekst = "A" & Tlr End Sub
Private Sub Form_BeforeUpdate(Cancel As Integer) DoCmd.SetWarnings False If Tlr = 6 Then DoCmd.RunSQL "UPDATE Tæller SET Nr=0" Else DoCmd.RunSQL "UPDATE Tæller SET Nr=Nr+1" End If DoCmd.SetWarnings True End Sub
Det giver dig ikke en defaultværdi; men den første rutine sætter A0 osv ind i et felt, idet du skriver det første tegn i posten.
Den anden rutine tæller tælleren op når du gemmer en post.
Det virker ikke ikke efter hensigten. Når jeg åbner formularen og forsøger at indtaste date, får jeg fejl "Ambiguous name detected" Lad os lige resumere. Jeg har oprettet tabellen "Tæller" med et felt "Nr". Derefter har jeg insat - Dim Tlr As Integer - under "Option Compare Database" -er det correct. De to stykker kode er derefter sat ind.
Jeg vil anbefale, at du under "Option Compare Database" tilføjer Option Explicit som betyder, at du er tvunget til at navngive dine variabler. Det kan spare dig for mange fejl fremover.
Synes godt om
Slettet bruger
16. september 2008 - 22:31#7
Private Sub Form_BeforeInsert(Cancel As Integer) On Error GoTo err_handling Dim rst As DAO.Recordset, i As String Set rst = Me.RecordsetClone rst.MoveLast i = rst!id Select Case i Case "A1" Me.nr = "A2" Case "A2" Me.nr = "A3" Case "A3" Me.nr = "A4" Case "A4" Me.nr = "A5" Case "A5" Me.nr = "A6" Case Else Me.nr = "A1" End Select rst.Close Exit Sub err_handling: If Err.Number = 3021 Then Me.nr = "A1" Exit Sub End If MsgBox Err.Number & " " & Err.Description End Sub
Synes godt om
Slettet bruger
16. september 2008 - 22:32#8
Sorry!~)
Private Sub Form_BeforeInsert(Cancel As Integer) On Error GoTo err_handling Dim rst As DAO.Recordset, i As String Set rst = Me.RecordsetClone rst.MoveLast i = rst!nr Select Case i Case "A1" Me.nr = "A2" Case "A2" Me.nr = "A3" Case "A3" Me.nr = "A4" Case "A4" Me.nr = "A5" Case "A5" Me.nr = "A6" Case Else Me.nr = "A1" End Select rst.Close Exit Sub err_handling: If Err.Number = 3021 Then Me.nr = "A1" Exit Sub End If MsgBox Err.Number & " " & Err.Description End Sub
Synes godt om
Slettet bruger
16. september 2008 - 22:35#9
Ja, nu er jeg ikke helt sikker, dit felt i formularen hedder nr ellers så må du lige skifte rst!nr og me.nr ud i koden!~)
Nu har jeg compile error, og "En Tekst" i den første kode er blåt. Så det tyder jo på at der er noget galt i det stykke kode. Jeg har checket mine indtastninger en gang til.
Med lidt hjælp fra mugs og spg ser det ud yil at virke. Det er jo selv følge formularens felt Me refererer til og det skal jo i klammer. Det store problem er hvordan jeg fordeler point. Hvis det er iorden vil jeg godt give fdata 100 og 25 til mugs og spg. Så læg lige jeres svar.Hvordan deler man dem. Mange tak for hjælpen.
Så er jeg tilbage. Spændende battle. mugs >> Tak for assistance 49jensen >> Du har rystet godteposen over de andre. Der er ikke flere point. Det er ok.
Synes godt om
Slettet bruger
17. september 2008 - 23:34#21
Hej!~)
iflg. 16/09-2008 23:32:23 så er der her 50p til fdata!~)
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.