[MS Access] DAO-koppeling

Status
Niet open voor verdere reacties.

m_vermue

Gebruiker
Lid geworden
11 mei 2004
Berichten
7
hallo luitjes,

voor school moet k een inlogscherm maken in access, gebruikmakend van VBA die (door middel van een DAO koppeling) de gebruikersnamen en passwords uitleest uit een tabel.

weet iemand hoe ik dit voor elkaar krijg?

tnx alvast :cool:
 
ehhm.. als je dit voor school moet doen neem ik aan dat je hier ook een boek over hebt wat je hebt bestudeerd voor je deze opdracht kreeg. ook lijkt het me dat het zelf oplossen van schoolopgaven de beste leerwijze is voor je studie.
 
dat noemen ze nou project gestuurd onderwijs..

je krijgt een opdracht,
probeert het te maken,
zoekt er informatie over op, internet dan wel boeken
kom je r helemaal niet meer uit dan kun je hhet vragen aan een leraar.

het inlogscherm opzich werkt wel maar ik heb geen flauw id hoe ik de gegevens uitlees uit een tabel. op t moment hebk gewoon een case gebruikt
 
ik ken het concept wel van project-gestuurd onderwijs maar jouw vraag lijkt meer op een vraag van '"maak dat is even voor mij, ik heb geen zin om er zelf over na te denken" vandaar mijn reactie, sorry als dat niet het geval is.

ontopic:

heb al jaren niet meer met access gewerkt maar is wat je nodig hebt niet zoiets van select paswoord from users where user='gebruikersnaam' en deze vergelijken met het ingevulde wachtwoord?
 
men heeft tabel:

inlognaam..........password
jeroen................12345
elroy...................67890
kees...................pietje

je hebt een formulier:
gebruikersnaam:
______________

wachtwoord:
______________

|login| |annuleren|

men vult gebruikersnaam jeroen in, met als pass. 12345 en het databasemenu opent. dat werkt al maar de loginnaam en pass. staan in de source. lastig als je een extra gebruik wil aanmaken.

hij moet de gebruikersnaam uit de tabel lezen

in de richting van:
if gebruikersnaam <> TBL_gebruiker.[inlognaam] msgbox probeer opnieuw
else check password van de gebruikersnaam
goed is openen volgend formulier
en bij fout weer een msgbox

het rode geeft aan wat ik niet weet..........
 
Laatst bewerkt:
kheb denk ik al wat..

10.1 Initialiseren database
Om vanuit een formulier of algemene module de huidige database te kunnen benaderen
is altijd in ieder geval de volgende code nodig:
Dim db As DAO.Database
Set db = CurrentDb
Ook goed, maar minder duidelijk is:
Dim db As Database
Set db = CurrentDb
Na deze regels is de huidige database opgeslagen in de objectvariabele db. De naam db
is overigens door u vrij te kiezen.
10.2 Initialiseren Recordset
Om vervolgens te kunnen werken met gegevens uit tabellen of queries moet er een
zogenaamde recordset worden aangeroepen. Dit kan op verschillende manieren:
Dim rs As DAO.Recordset
Set rs = db.OpenRecordset("select * from Klanten where Land O 'Canada'")
Set rs as db.OpenRecordset ("Klanten")
Set rs = db.OpenRecordset("qryOrderregeltotaal")
In dit voorbeeld wordt achtereenvolgens een SQL-instructie, een Accestabel en een
Access-query geopend. Na deze regels zijn alle records en velden van de query
qryOrderregeltotaal opgeslagen in de objectvariabele rs. Ook de naam rs is overigens
door u vrij te kiezen.
Is de recordset eenmaal geopend, dan kunnen allerlei handeling met de gegevens
worden
uitgevoerd.
10.3 Bladeren door records
Om door de records te bladeren kan de volgende code worden gebruikt:
rs.MoveLast
rs.MoveFirs
t
rs.MoveNext
rs.MovePrevi
osrs.Move 4
10.4 Records en velden tellen
Om bijvoorbeeld het aantal records weer te geven kan de volgende code worden
gebruikt:
MsgBox "Aantal records = " & rs.RecordCount
Een recordset bevat niet alleen records, maar ook velden. Om bijvoorbeeld het
aantal velden weer te geven kan de volgende code worden gebruikt:
MsgBox "Aantal velden = " & rs.Fields.Count
10.5 Velden weergeven
Om bijvoorbeeld de inhoud van velden weer te geven kan de volgende code worden
gebruikt:
MsgBox rs.Fields(0).Name & " bevat " & rs.Fields(0).Value
MsgBox rs.Fields("Klantnummer").Name & " bevat " & rs.Fields( "Klant nummer").Value
Velden kunnen worden benaderd via een volgnummer of via hun naam. De velden
hebben een doorlopend volgnummer, beginnend bij 0. De volgorde is dezelfde als in
de tabel of query.
10.6 Positie huidige record
Om in een query het nummer van het huidige record weer te geven kan de volgende
code worden gebruikt:
MsgBox "Cursor staat in record: " & rs.AbsolutePosition
10.7 Records toevoegen
Om records toe te voegen kan de volgende code worden gebruikt:
Set rs = db.OpenRecordset("Klanten")
rs.AddNew
rs.Fields("Klantnummer").Value = "yayup"
rs.Fields("Bedrijf").Value = "YapYup"
rs.Update
10.8 Record zoeken in tabellen met indexen
Om in tabellen te kunnen zoeken in een indexveld kan de volgende code worden
gebruikt:
rs.Index =
"PrimaryKey" rs.Seek
"=", "yayup"
Er moeten dan in de tabelstructuur wel velden zijn met een index. De naam van die
index moet hier als eigenschap worden gebruikt. PrimaryKey betekent in dit verband:
sleutelveld. Tabellen worden standaard geopend als recordset van het type
dbopentable.
10.9 Huidige record wissen
Om het huidige record te kunnen verwijderen kan de volgende code worden gebruikt:
rs.Delete
10.10 Record zoeken in queries
Verschil tussen tabellen en queries is dat binnen tabellen op indexen kan worden
gezocht. In queries kan niet op indexen worden gezocht en daarom werkt het zoeken
iets anders. Om in queries te laten zoeken kan de volgende code worden gebruikt:
rs.FindFirst "Klantnummer = 'Folko'"
If rs.nomatch then
MsgBox "Niet
gevonden" Else
MsgBox rs.Fields(0).Name & " bevat " & rs.Fields(0).Value
End if
Nauw verwant de methode Findfirst zijn de methode Findnext en Findlast. Queries
worden standaard geopend als recordset van het type dbopendynaset.
10.11 Door alle records 'lopen'
Om door alle records van een recordset te 'bladeren' en de waarde van een bepaald veld
weer te geven kan de volgende code worden gebruikt:
rs.MoveFirst
While Not rs.EOF
MsgBox rs.Fields(0).Name & " bevat " & rs.Fields(0).Value
rs.MoveNext
Wend
Een variant van deze code ziet er zo uit:
rs.MoveFirst
For i = 0 To rs.RecordCount - 1
MsgBox rs.Fields(0).Name & " bevat " & rs.Fields(0).Value
rs.MoveNext
Next
10.12 Door alle velden 'lopen'
Er kan ook door de velden worden 'gebladerd':
Dim vld As Field
Set rs = db.OpenRecordset ("select * from Klanten where Land = 'Canada'")
rs.MoveFirst
For Each vld In rs.Fields
MsgBox vld.Name & " bevat " & vld.Value
Next
Er wordt in dit geval gebruik gemaakt van de collectie van velden. Daardoor kan er ook
met een For Each-loop worden gewerkt.
Een variant van deze code ziet er zo uit:
Set rs=db.OpenRecordset ("select * from Klanten where Land = 'Canada'")
rs.MoveNext
For i = 0 To rs.Fields.Count - 1
MsgBox rs.Fields(i).Name & " bevat " & rs.Fields(i).Value
Next
10.13 Afsluiten
Aan het begin van een DAO-procedure heeft u de objectvariabelen DB en RS
gedeclareerd
en gevuld. Aan het eind van de procedure kunt u ze beter ook maar weer afsluiten. Dit
gaat als volgt:
RS.close
Set rs = Nothing
Db.close
Set Db=Nothing
Dit is slechts een greep uit de mogelijkheden van DAO. Nogmaals de DAO-hulpfunctie is
zeer uitgebreid. Om deze te activeren kunt u bijvoorbeeld in een module het woord
recordset in typen en vervolgens op functietoets F1 drukken.
 
Realiseer je dat DAO oud is. De opvolger ervan is ADO.

Maar even een kort stukkie code gebruikmakend van ADO:

Code:
dim cnn as ADODB.connection
dim rst as new ADODB.recordset
dim strSQL as string

set cnn=currentproject.connection
strSQL="SELECT password FROM tabelnaam WHERE username = " & me.usernameveld & ";"
rst.open strSQL, cnn, acOpenDynamic
rst.movefirst
if rst.fields(0) = me.passwordveld then
  password OK 'login uitvoeren
else
  password niet OK 'login niet uivoeren
end if
rst.close
cnn.close
set rst = nothing
set cnn = nothing
 
TNX :)

kahd zelf dit

Sub loginknop_Click()

'initialisatie
Dim antw As String
Dim antwfrm As String
Dim inlog As Byte
Dim db As DAO.Database
Set db = CurrentDb
Dim rs As DAO.Recordset
Set rs = db.OpenRecordset("TBL_login")

'naar bovenste record gaan
rs.MoveFirst

'waneer het niet het laatste record is
While Not rs.EOF

' als FRM_gebruiker gelijk aan TBL_gebruiker en FRM_pas aan TBL_pas dan inlog +1
If gebruiker.Value = rs.Fields(1) And pas.Value = rs.Fields(2) Then inlog = inlog + 1
rs.MoveNext
Wend

' is inlog groter als 0 dan msgbox anders pas of gebruiker fout
If inlog > 0 Then DoCmd.OpenForm "FRM_PC" Else MsgBox ("de gebruikersnaam en/of wachtwoord die u heeft ingevoerd is fout. probeert u het nog eens" & inlog)

rs.Close
Set rs = Nothing
db.Close
Set db = Nothing

End Sub

kheb ook even gebrobeert met jouw code

Private Sub vergetenknop_Click()

Dim db As ADODB.Connection
Dim rs As New ADODB.Recordset
Dim strSQL As String

Set cnn = CurrentProject.Connection
strSQL = "SELECT pas FROM TBL_login WHERE login = " & Me.loginfld & ";"
rs.Open strSQL, cnn, acOpenDynamic
rs.MoveFirst
If rs.Fields(2).Value = Me.pasfld.Value Then Password = OK Else Password = NOK
If Password = OK Then MsgBox ("welkom als gebruiker") Else MsgBox ("foute invoer")
rs.Close
cnn.Close
Set rst = Nothing
Set cnn = Nothing

End Sub
alleen hij struikeld over het dik gedrukte :confused:

foutmelding:
waarden van 1 of meer parameters ontbreken
 
Laatst bewerkt:
jeah,

tnx voor jullie posts :cool:

kben er nu redelijk uit :D

ennuh als ik nog vragen heb weet ik jullie te vinden :P
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan