Avatar billede andersjensen Nybegynder
07. december 2000 - 16:25 Der er 19 kommentarer og
1 løsning

Chekke om en dato allerede findes i en anden post

Hej
Jeg har en database i access97 som styre booking af jobs og det køre helt fint, men jeg har et dumt problem som jeg håber nogen kan hjælpe med med, problemet er:

I den formular brugeren benytter til at indtaste nye poster e.t.c. er der et datofelt som ganske enkelt hedder dato feltet stammer fra en tabel. feltet \"Dato\" er formateret som dato,klokkeslet samt med inputmaske, dette er nødvendigt for at kunne sortere på feltet i feks rapporter e.t.c. Når brugeren når til feltet \"dato\" og indtaster en en aktuel dato skal der komme en meddelse hvis den indtastede dato allerede findes i en anden post.Der må godt være flere poster med den samme dato, blot brugeren for besked, når det indtræffer.

Jeg har prøvet at bruge en DlookUp metode, men det virke ikke når datofeltet er formateret som dato,klokkeslet, det giver en fejl om at datatyperne ikke stemmer overens.

Jeg er ikke nogen haj til vba, men kender lidt til det, det kan nævnes at DlookUp metode virker hvis blot det er et tekstfelt, men går desværre ikke. Det skal virke på før opdatering (Before_opdate)på datofeltet således at brugeren for beskeden når feltet forlades.

Håber der er nogen der kan hjælpe.

*ssss*  andersjensen
Avatar billede janbangm Nybegynder
07. december 2000 - 16:35 #1
Du skal helt sikker bruge DAO meddelen. Med den kan du løbe en tabel igennem og sammenligne et felt i en tabel med et felt du har har i din formular.

Et f.eks. kunne være
Dim R as Recordset
Dim fl as byte.

Set R = currentDB.Openrecordset(\"Tabelnavn)

R movefirst
Do until R.eof

if r(felt) = me.(feltnavn) then fl = 1
r.Movenext
Loop

if fl = 1 then msgbox(\"datoen findes iforvejen\")

Hvis du beskriver dine felter næmere eller sender databasen til access@edb.dk, skal jeg hjælpe dig med det
Avatar billede andersjensen Nybegynder
07. december 2000 - 16:51 #2
Hej janbangm
Jeg tror at dit svar kan fungere, det skal bare tunes lidt, jeg har prøvet dit kodeeks., men for fejlen \"variabel ikke erklæret, hvad skal der stå i første parantes (der hvor du skriver felt)

andersjensen
Avatar billede janbangm Nybegynder
07. december 2000 - 16:57 #3
Alså der hvor jeg sriver tabelnavn sætter du navnet på tabel ind og lige så ved felt navn.

Eksempel er taget frit efter hukommende, så der kan være nogle små fejl.
Avatar billede andersjensen Nybegynder
07. december 2000 - 17:08 #4
Okay det forstået
den sidste fejl der kommer er \"Do Uden Loop der er et eller andet der kikser, jeg skriver nøjagtigt som du foreslår, arbejder videre med det


*ssss*  andersjensen
Avatar billede janbangm Nybegynder
07. december 2000 - 17:16 #5
Det må jeg indrømme jeg ikke helt forstår. Har har if sætning på en linie ikke. Den felj plejer at kommen hvis Loop står inde i en if sætning, med det syntes jeg ikke skulle være tilfælde her
Avatar billede andersjensen Nybegynder
07. december 2000 - 17:27 #6
Det mærkeligt her er hvad jeg skriver helt præcis og det giver alså fejlen \"Loop uden do\"

Private Sub Dato_BeforeUpdate(Cancel As Integer)
Dim R As Recordset
Dim fl As Byte

Set R = CurrentDb.OpenRecordset(\"tbl_input\")

R.MoveFirst
Do Until R.EOF

If R([Dato]) = Me.[Dato] Then
fl = 1
R.MoveNext
Loop

If fl = 1 Then MsgBox (\"datoen findes i forvejen\")
End If

End Sub


*ssss*  andersjensen
Avatar billede janbangm Nybegynder
07. december 2000 - 17:42 #7
Ja du skal have End If flyttet op lige under fl = 1 ellers får du det ikke til at virke. Grunden til dette er, at if særningen er falsk vil access ikke komme til Loop sætning

alså
Private Sub Dato_BeforeUpdate(Cancel As Integer)
Dim R As Recordset
Dim fl As Byte

Set R = CurrentDb.OpenRecordset(\"tbl_input\")

R.MoveFirst
Do Until R.EOF

If R([Dato]) = Me.[Dato] Then
fl = 1
End If
R.MoveNext
Loop

If fl = 1 Then MsgBox (\"datoen findes i forvejen\")


End Sub

Avatar billede andersjensen Nybegynder
07. december 2000 - 18:01 #8
Din kode køre nu helt korrekt, der er dog et problem:
da feltet er formateret som typen dato,klokkeslet, giver det fejlen \"datatypekonverteringsfejl\" fandens *SSS*, hvis jeg laver formatet for feltet om til tekst virker din kode perfekt, det tyder måske på en helt anden løsning??, jeg vil lade dette spørgsmål stå åbnet et par dage, måske der komme nogle gode indlæg. Din kode er dog helt rigtigt og kan sagtens bruges i andre sammehænge, hvis der ikke kommer flere indlæg vil jeg naturligvis sende dig point. Du skal have mange tak for dine glimrende indlæg.


*ssss* andersjensen
Avatar billede janbangm Nybegynder
07. december 2000 - 18:09 #9
Jeg trot faktisk der er en løsning på det. Vist du laver en variabel mere f.eks

Dim dato
dato = rigth ( eller er det left) (dato,6) også erstatter me.dato med bare dato vil du få tidspunkter vær så det kun er dato du arbejder med.

Kunne det ikke være løsning
Avatar billede andersjensen Nybegynder
07. december 2000 - 18:15 #10
Det håber jeg jeg vil prøve at arbejde videre med det senere iaften mange tak


andersjensen pyha så det aftensmad *SSSS*
Avatar billede janbangm Nybegynder
08. december 2000 - 08:07 #11
Når jeg kommer fra arbejder, skal jeg lige skrive en mere udførende beskrivelse af hvad jeg mener
Avatar billede andersjensen Nybegynder
08. december 2000 - 09:29 #12
Det lyder godt glæder mig til at det kommer til at virke


Avatar billede juks Novice
08. december 2000 - 12:14 #13
prøv at sætte tabellen du åbner = DB_Open_Dynaset
så burde det virke.




Avatar billede juks Novice
08. december 2000 - 12:16 #14
her kan du se en kode der virker får fik jeg sammen fejl som du har indtil jeg satte DB_Open ... ind

<KODE START>
Dim MyValue

Dim db As Database
Dim rsSet As Recordset

igen:
MyValue = Int((10000000 * Rnd) + 1)    \' Frembring en tilfældig værdi mellem 1 og 1000000#
\'Debug.Print MyValue
Set db = CurrentDb()
Set rsSet = db.OpenRecordset(\"TA_Key\", DB_OPEN_DYNASET)
rsSet.FindFirst \"KeyID =\" & MyValue
If rsSet.NoMatch Then

rsSet.AddNew
rsSet(\"KeyID\") = MyValue
rsSet.Update
Else
GoTo igen
End If

<SLUT>

prøv at bruge denne som skabelon
Avatar billede andersjensen Nybegynder
08. december 2000 - 14:28 #15
Øv jeg kan ikke få det til at virke, jeg for hele tiden fejlen \"datatypekonverteringsfejl, opsummering er:
Feltet hedder dato
tabellen heder tbl_input
feltet dato er af datatypen \"DatoKlokkeslet\"
Formatet er kort datoformat
der er inputmaske \"Kort datoformat\"

I formularen er feltet \"dato\" formateret på nøjagtigt samme måde som i tbl_input.

Pokkers til problem, hvis det bare er et tekstfelt fungere det fint.


*ssss* andersjensen
Avatar billede andersjensen Nybegynder
08. december 2000 - 14:34 #16
iøvrigt skal der ikke skrives en ny dato, men blot komme med en msgbox der fortæller at der i forvejen er registreret et job på den indtastede dato, brugeren skal så blot fortsætte som intet var hændt hæ hæ noget speget dette her
Avatar billede janbangm Nybegynder
08. december 2000 - 17:10 #17
Hvis du vil prøve det jeg foreslå er det Left det skal bruge. Hvis din dato starter med 071200 skal du lave en kode der se sådan ud

Dim ndato
ndato = LEFT(me.[dato],6)
Så for du trukket dato ud af feltet uden tidspunkt og kan så min anden kode ved at erstatter me.[dato] med ndato If R([dato]) = ndato Then
Avatar billede janbangm Nybegynder
08. december 2000 - 17:10 #18
Hvis det ikke virker skriver du bare igen
Avatar billede andersjensen Nybegynder
11. december 2000 - 20:49 #19
Hej janbangm

Måtte lige lægge mig med lidt influenza, men er på toppen igen det virker ikke helt efter hensigten, men jeg er kommet et godt stykke videre, hermed point til dig
Avatar billede martens Guru
31. januar 2001 - 00:18 #20
Ret interessant.... Det er da noget, der kan bruges til noget..

mvh martens
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