FindFirst metode! DAO Access
Hej Eksperten.Jeg er ked af at jeg poster så meget kode, men jeg tror det er nødvendigt for at løse mit spørgsmål.
Dette er min form1:
Private Sub Form_Load()
Dim dbMyDB As Database, rsMyRS As Recordset, kopisvar As String
'Sørger for at password står med stjerner'
txtPas.PasswordChar = "*"
'Gør at man kan se form1 før den tjekker om database filen er tilgængelig (gøres for syns skyld'
Form1.Visible = True
'Tjekker om database filen er tilgængelig, er der ikke nogen Dir på c:\data.mdb skal reagere på det'
If Dir$("c:\data.mdb") = "" Then
MsgBox "Du skal vælge en databasenfilen som fulgte med pogrammet! (data.mdb)"
'Jeg skal sætte det at man vælge en fil ind i en løkke,
'da man ellers bare kan trykke anuller og ikke vælge nogen fil,
'dette vil give problemer længere i koden,
'hvor man skal oprette forbindelse til databasen'
Do
'Dette er objektstyret kommando objektet hedder Commondialog1 dette er et objekt som gør dialogbokse i den form jeg vil have det mulige
'Først opretter jeg et filter som sørger for at man kun kan vælge filer som hedder 'data.mdb'
CommonDialog1.Filter = "Database(*.mdb)" & "|data.mdb"
'Åbning af selve dialogboksen'
CommonDialog1.ShowOpen
'Tjekker om man har valgt noget i dialogboksen'
If CommonDialog1.FileName = "" Then
'Har man ikke valgt noget, kommer den med en fejl, hvorefter dialogboksen kommer frem igen'
MsgBox "Du skal vælge en fil!(data.mdb)"
End If
'Den kører løkken lige indtil at man har valgt en fil'
Loop Until CommonDialog1.FileName <> ""
'En dialogbox spørger om det er okay at kopiere filen over til c:\data.mdb'
kopisvar = MsgBox("Programmet vil nu ligge databasefilen på c:\data.mdb", vbYesNo, "Kopier database")
'Hvis man svarer ja ligger den kopiere den filen'
If kopisvar = vbYes Then
FileCopy CommonDialog1.FileName, "c:\data.mdb"
'Svarer man nej, lukker programmet'
Else
End
End If
End If
End Sub
Private Sub cmdLog_Click()
Dim dataload As Boolean
'Opretter forbindelse til databasen'
Set dbMyDB = OpenDatabase("c:\data.mdb")
Set rsMyRS = dbMyDB.OpenRecordset("data", dbOpenDynaset)
'Kører databasen igennem og slutter først når den er EOF (End of file), dvs. har læst alt'
Do While Not rsMyRS.EOF
'Tjekker om brugernavn er ens med et fra databasen'
If rsMyRS!BruNav = txtLog.Text Then
'Er bruger navn korrekt, tjekkes der om password er korrekt til det brugernavn'
If rsMyRS!Password = txtPas.Text Then
'Nu finder koden ud af om der er tale om en almindelig "bruger" eller en "Admin"
Select Case rsMyRS!Status
Case "admin"
Form3.Visible = True
Form1.Visible = False
Case "bruger"
Form1.Visible = False
Form3.Visible = True
End Select
'Hvis ikke både bruger navn og adgangskode er korrekt, fortæller den dette i et label felt'
Else
lblLog.Caption = "Du har indtastet forkert brugernavn/adgangskode"
txtLog.Text = ""
txtPas.Text = ""
txtLog.SetFocus
End If
End If
'Nu sørger koden for at når man har kørt løkken gennem en gang, går den til næste ID i løkken og tjekker om brugernavn/password passer dèr'
rsMyRS.MoveNext
Loop
End Sub
'Viser form2 hvor man kan oprette ny bruger'
Private Sub cmdNy_Click()
Form2.Visible = True
Form1.Visible = False
End Sub
'Afslutnings knap'
Private Sub cmdAfs_Click()
End
End Sub
'Timer delen et objekt som hedder 'Timer1' på form1. Tager 'stikprøver' hvorvidt der står noget i txtLog'
'og i txtPas, som er de 2 tekstboxe på form1, er de tommer er login kanpper inaktiv'
Private Sub Timer1_Timer()
If txtLog <> "" And txtPas <> "" Then
cmdLog.Enabled = True
Else
cmdLog.Enabled = False
End If
End Sub
'Denne kode tjekker for hver gang man taster en tast i tekstfeltet'
Private Sub TxtLog_KeyPress(keyascii As Integer)
lblLog.Caption = ""
'Denne kode sørger for man kun kan bruge nogle forsellige taster på tastaturet'
If Not keyascii = 8 Then 'man kan bruge backspace (Slette knap)'
If Not keyascii > 64 And keyascii < 91 Then 'man kan bruge fra A - Z'
If Not keyascii > 96 And keyascii < 123 Then 'Man kan bruge fra a - z'
If Not keyascii > 47 And keyascii < 58 Then 'Man kan bruge fra 0 - 9'
keyascii = 0
lblLog.Caption = "Ugyldigt tegn!"
End If
End If
End If
End If
End Sub
'Denne kode tjekker for hver gang man taster en tast i tekstfeltet'
Private Sub txtPas_keypress(keyascii As Integer)
lblLog.Caption = ""
'Denne kode sørger for man kun kan bruge nogle forsellige taster på tastaturet'
If Not keyascii = 8 Then 'man kan bruge backspace (Slette knap)'
If Not keyascii > 64 And keyascii < 91 Then 'man kan bruge fra A - Z'
If Not keyascii > 96 And keyascii < 123 Then 'Man kan bruge fra a - z'
If Not keyascii > 47 And keyascii < 58 Then 'Man kan bruge fra 0 - 9'
keyascii = 0
lblLog.Caption = "Ugyldigt tegn!"
End If
End If
End If
End If
End Sub
Overstående kode logger jeg ind, dette virker fint!
Dette er min form2:
Private Sub Form_Load()
'Sørger for at de 2 password felter står med stjerner'
txtPas1.PasswordChar = "*"
txtPas2.PasswordChar = "*"
End Sub
Private Sub cmdGem_Click()
Dim tingOk As Boolean
'Opretter forbindelse til databasen'
Set dbMyDB = OpenDatabase("c:\data")
Set rsMyRS = dbMyDB.OpenRecordset("data", dbOpenDynaset)
'koden tjekker om brugernavn er over 4 tegn'
If Len(txtBru) < 4 Then
lblfej = "Brugernavn skal være mere end 4 tegn"
'Koden tjekker at password er over 4 tegn, er det dette vil den se om de 2 passwords stemmer overens'
ElseIf Len(txtPas1) < 4 Then
lblfej = "Dit password skal være over 4 tegn"
txtPas1.Text = ""
txtPas2.Text = ""
txtPas1.SetFocus
ElseIf txtPas1.Text <> txtPas2.Text Then
lblfej = "Password stemmer ikke overens"
txtPas1.Text = ""
txtPas2.Text = ""
txtPas1.SetFocus
Else
'Hvis alle disse 'regler' til password og brugernavn er opfyldt sætter den tingOK = true'
lblfej = ""
tingOk = True
End If
'Tjekker om brugernavnet er optaget er det ikke det, sætter den tingOK = false'
Do While Not rsMyRS.EOF
If rsMyRS!BruNav = LCase(txtBru.Text) Then
lblfej = "Du skal indtaste andet brugernavn, da dette er optaget"
tingOk = False
Else
End If
rsMyRS.MoveNext
Loop
'Hvis brugernavnet ikke er optaget har den stadig tingOk = true fra da den testede om password og brugernavn var korrekt skrevet,
'og derefter ligger den informationen ind i databasen'
If tingOk = True Then
rsMyRS.AddNew
rsMyRS!BruNav = LCase(txtBru.Text)
rsMyRS!Password = LCase(txtPas1.Text)
rsMyRS!forNav = LCase(txtFor.Text)
rsMyRS!eftNav = LCase(txtEft.Text)
rsMyRS!Telefon = LCase(txtTel.Text)
rsMyRS!Status = "bruger"
rsMyRS.Update
'Sletter alle felter så de er tomme'
RydFelter
'Når den har oprette brugeren, kommer der en msgBox, samt at den går tilbage til form1 (login)'
MsgBox "Du har nu oprettet en bruger, og er klar til at logge på!", vbInformation, "Bruger oprettet"
Form2.Visible = False
Form1.Visible = True
Else
'Hvis ikke at tingOK = true laver den en fejl'
lblfej = lblfej.Caption & Chr(10) & "Ikke alle krav er opfyldt og derfor er det ikke muligt at skrive til databasen"
End If
End Sub
Private Sub cmdRyd_Click()
RydFelter
txtBru.SetFocus
End Sub
Private Sub Form_LostFocus()
RydFelter
End Sub
Private Sub timer_Timer()
'Dette er en timer som i et interval tjekker om der er skrevet noget i de 6 textfelter og hvorefter den vil sætte gem-knappen til at være aktiv'
If txtFor <> "" And txtBru <> "" And txtPas1 <> "" And txtPas2 <> "" And txtEft <> "" And txtTel <> "" And Len(txtTel) = 8 Then
cmdGem.Enabled = True
Else
cmdGem.Enabled = False
End If
End Sub
Private Sub cmdLuk_Click()
'Går tilbage til form1'
Form1.Visible = True
Form2.Visible = False
End Sub
Private Sub TxtBru_KeyPress(keyascii As Integer)
'Denne kode sørger for man kun kan bruge nogle forsellige taster på tastaturet'
If Not keyascii = 8 Then 'man kan bruge backspace (Slette knap)'
If Not keyascii > 64 And keyascii < 91 Then 'man kan bruge fra A - Z'
If Not keyascii > 96 And keyascii < 123 Then 'Man kan bruge fra a - z'
If Not keyascii > 47 And keyascii < 58 Then 'Man kan bruge fra 0 - 9'
keyascii = 0
End If
End If
End If
End If
End Sub
Private Sub TxtEft_KeyPress(keyascii As Integer)
'Denne kode sørger for man kun kan bruge nogle forsellige taster på tastaturet'
If Not keyascii = 8 Then 'man kan bruge backspace (Slette knap)'
If Not keyascii > 64 And keyascii < 91 Then 'man kan bruge fra A - Z'
If Not keyascii > 96 And keyascii < 123 Then 'Man kan bruge fra a - z'
keyascii = 0
End If
End If
End If
End Sub
Private Sub txtFor_KeyPress(keyascii As Integer)
'Denne koder sørger for man kun kan bruge nogle forsellige taster på tastaturet'
If Not keyascii = 8 Then 'man kan bruge backspace (Slette knap)'
If Not keyascii > 64 And keyascii < 91 Then 'man kan bruge fra A - Z'
If Not keyascii > 96 And keyascii < 123 Then 'Man kan bruge fra a - z'
keyascii = 0
End If
End If
End If
End Sub
Private Sub txtPas1_keyPress(keyascii As Integer)
'Denne koder sørger for man kun kan bruge nogle forsellige taster på tastaturet'
If Not keyascii = 8 Then 'man kan bruge backspace (Slette knap)'
If Not keyascii > 64 And keyascii < 91 Then 'man kan bruge fra A - Z'
If Not keyascii > 96 And keyascii < 123 Then 'Man kan bruge fra a - z'
If Not keyascii > 47 And keyascii < 58 Then 'Man kan bruge fra 0 - 9'
keyascii = 0
End If
End If
End If
End If
End Sub
Private Sub txtPas2_keyPress(keyascii As Integer)
'Denne koder sørger for man kun kan bruge nogle forsellige taster på tastaturet'
If Not keyascii = 8 Then 'man kan bruge backspace (Slette knap)'
If Not keyascii > 64 And keyascii < 91 Then 'man kan bruge fra A - Z'
If Not keyascii > 96 And keyascii < 123 Then 'Man kan bruge fra a - z'
If Not keyascii > 47 And keyascii < 58 Then 'Man kan bruge fra 0 - 9'
keyascii = 0
End If
End If
End If
End If
End Sub
'Sørger for at man skal indtaste først tal i telefonnummer og derefter tester den for at der skal være 8 tegn'
Private Sub txtTel_LostFocus()
If Not IsNumeric(txtTel) Then
lblfej = "Indtast telefonnummer med tal."
txtTel.SetFocus
ElseIf Not Len(txtTel) = 8 Then
lblfej = "Der skal være 8 tal i dit telefonnummer"
txtTel.SetFocus
Else
lblfej = ""
End If
End Sub
Public Sub RydFelter()
'Rydder felter'
For Each Control In Form2
If TypeOf Control Is TextBox Then
Control.Text = ""
End If
Next
End Sub
Den overstående kode virker også fint!
Dette er min form3, dette skal være en form hvor hvis man er admin, kan man logge ind og derefter se noget information om brugerne. Men her sker fejlen, jeg kan ikke skrive:
rsMyRS.Findfirst den metode eksisterer ikke, og hvorfor det? Det må være fordi jeg har defineret noget i nogen andre forms eller noget, jeg ved det ikke og vil meget håbe nogen kan hjælpe mig!
Private Sub vis()
Set dbMyDB = OpenDatabase("c:\data")
Set rsMyRS = dbMyDB.OpenRecordset("data", dbOpenDynaset)
listBox.Clear
Do While Not rsMyRS.EOF
listBox.AddItem rsMyRS!BruNav
listBox.ItemData(listBox.NewIndex) = rsMyRS!Id
rsMyRS.MoveNext
Debug.Print listBox.ItemData(listBox.NewIndex)
Loop
End Sub
Private Sub CmdVis_Click()
vis
End Sub
Private Sub listBox_Click()
rsMyRS.FindFirst "ID=" & Str(lstRecords.ItemData(lstRecords.ListIndex))
TxtPas.Text = rsMyRS!Telefon
End Sub
Jeg håber meget nogen kan hjælpe mig! Igen undskyld for alt den kode-.