Avatar billede jensch Nybegynder
16. april 2001 - 10:10 Der er 13 kommentarer og
2 løsninger

Kontrol af indtastning ved udgang af felt

Jeg benytter en formular til indtastning i en tabel. Et af felerne er beskyttet mod dubletter, men advarslen kommer så først når man har tastet i alle felter vha. tab, og går til næste post. Jeg ønsker at det bliver kontrolleret ved udgangen af feltet og at det er min egen dialogbox der kommer op på skærmen, samtidig med at man bliver ståendene i feltet. Hvordan gøres det ?
Avatar billede mugs Novice
16. april 2001 - 11:18 #1
Hej jensch
Prøv at indsætte flg. kode i kontrolelementet After Update, idet du udskifter oplysninger skrevet med stort med de aktuelle fra din database:

Private Sub KONTROLELEMENTETS_NAVNAfterUpdate()
Dim Rst As Recordset, Db As Database
On Error GoTo Fejlhåndtering
Set Rst = DBEngine.Workspaces(0).Databases(0).OpenRecordset(\"TABELNAVN\")
    With Rst
    .AddNew
    .Fields![TABELLENS_FELTNAVN] = KONTROLELEMENTETS_NAVN_I_FORMULAREN
    .Update
End With
Fejlhåndtering:
Msgbox Prompt:=\"her skrives teksten i din MSG-box\", Title:=\"Fejl\", Buttons:=vbInformation
End Sub

mugs
Avatar billede jensch Nybegynder
16. april 2001 - 11:44 #2
Jeg får en fejl på \"Db As Database \"
Compile Error:
User-defined type not defined.
Avatar billede mugs Novice
16. april 2001 - 12:52 #3
Hmmmm!!
Jeg har afprøvet det i min database og det virker, og det skal også virke i din. Prøv at slette Db As Database og naturligvis også komma efter Recordset.

mugs
Avatar billede jensch Nybegynder
16. april 2001 - 12:57 #4
Ja det har jeg også prøvet, men så får jeg Msgboxen op hver gang, samtidig springes der til en ny post ............
Avatar billede mugs Novice
16. april 2001 - 13:09 #5
Det kan jeg ikke gennemskue uden ar se databasen. Vil du sende den til mugs@get2net.dk

Du kan blot tømme den for data og indtaste et par dummy.

mugs
Avatar billede mugs Novice
16. april 2001 - 13:12 #6
Hov - tøv lidt.
Den MsgBox du får: er det den hvori der står \"her skrived teksten i din MSGBOX\", hvis det er den så indtast:

Exit Sub

efter End With.

Hvis data eksisterer i forvejen skal du få MsgBox, men hvis de ikke eksisterer skal vi have afsluttet procedüren inden du når til fejlhåndtering.

mugs
Avatar billede jensch Nybegynder
16. april 2001 - 13:25 #7
Nu har jeg sendt den til dig, det er nok nemmere.
Exit sub er ikke nok til at undgå boxen hver gang.
16. april 2001 - 16:01 #8
Hej Jens,

Lad mig gætte på, at du benytter Access 2000 og Mugs benytter Access 97. Derfor skal du lave en reference til DAO. Dette gøres ved at åbne menuen Tools->References og krydse \"Microsoft DAO 3.6 object library\" af. Derefter virker DB as Database-delen som den skal.

Jeg har tilladt mig at ændre lidt i Mugs kode, da der var et par fejl/uhensigtsmæssigeder:

Private Sub KONTROLELEMENTETS_NAVN_AfterUpdate()
Dim Rst As DAO.Recordset, Db As Database
On Error GoTo Fejlhåndtering
Set db = currentdb
Set Rst = db.OpenRecordset(\"TABELNAVN\", dbopendynaset)
With Rst
    .addnew
    ![TABELLENS_FELTNAVN] = KONTROLELEMENTETS_NAVN_I_FORMULAREN
    .Update
End With
Exit sub
Fejlhåndtering:
    Msgbox Prompt:=\"her skrives teksten i din MSG-box\", Title:=\"Fejl\", Buttons:=vbInformation
End Sub

/Thomas
Avatar billede mugs Novice
16. april 2001 - 16:13 #9
Hej Thomas / Jens
Jeg var også nået så langt til at vi nok benytter forskellige programmer.
Thomas, tak for ændringerne i koden.
Jens, håber det virker med Thomas\' forslag.

/mugs
Avatar billede jensch Nybegynder
16. april 2001 - 17:14 #10
Hej Thomas
Jeg har den danske udgave og ved ikke lige hvor jeg skal finde stedet hvor jeg skal foretage denne afkrydsning.
Avatar billede jensch Nybegynder
16. april 2001 - 17:19 #11
Ok nu har jeg fundet det, og det virker fint, tak for alt
17. april 2001 - 09:17 #12
Hej Jens,

Du sendte mig en mail om, at koden stadig ikke virkede. Jeg har ærlig talt ikke selv afprøvet koden. Jeg kunne bare se, at der var nogle åbenlyse uhænsigtsmæssigheder. Derfor kommenterede jeg Mugs\' svar.

Jeg ville nok bare benytte en DCount til at checke om der findes en post med samme værdi.

noget i retning af dette:

Private Sub Felt_BeforeUpdate(Cancel as Integer)
  If Me.newrecord then
      If DCount(\"*\", \"TABELNAVN\", \"Felt = \" & Me!Felt) > 0 then
        Msgbox \"Posten findes i forvejen!\",vbcritical
        Docmd.CancelEvent
        exit sub
      end if
  end if
end sub

Bemærk: Hvis Felt er af datatypen tekst, skal linie 3 se således ud:
If DCount(\"*\", \"TABELNAVN\", \"Felt = \'\" & Me!Felt & \"\'\") > 0 then

Koden bør nok forfines lidt, da den kun virker ved oprettelse af nye poster - hvis man ændre en eksisterende post, så vil den ikke virke!
Men for at få det til at virke skal jeg vide om feltet er nøglefelt? Hvis det ikke er, så kan man skrive koden således:

Private Sub Felt_BeforeUpdate(Cancel as Integer)
  If DCount(\"*\", \"TABELNAVN\", \"Felt = \" & Me!Felt & \" AND Nøglefelt <> \" & Me!Nøglefelt) > 0 then
      Msgbox \"Posten findes i forvejen!\",vbcritical
      Docmd.CancelEvent
      exit sub
  end if
end sub

Der er dog stadig mange (for mig) ukendte faktorer, som gør at man bør lave det på en anden måde. Men så er vi måske ovre i et nyt spørgsmål?

/Thomas



Avatar billede jens080462 Nybegynder
20. april 2001 - 12:01 #13
Jeg har afprøvet koden og den virker perfekt til mit behov, og det virker jo også hvis man retter det aktuelle felt i en allerrede oprettet post.
20. april 2001 - 15:16 #14
Jeg går ud fra, at Jens080462 er den samme som Jensch, eller...?
Avatar billede jensch Nybegynder
21. april 2001 - 09:15 #15
Ja jeg sad blot på mit arbejde og kunne ikke huske password, så jeg oprettede en ny konto.
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