PDA

Vollständige Version anzeigen : Zugriff auf DB


Judith
26.06.2001, 13:26
Hallo!

Kann man eigentlich auch ohne den Data-Steuerelement auf eine DB in Access zugreifen und kann man genauso wie mit dem Steuerelement sich zwischen den Datensätzen hin und her bewegen?

Vielleicht kennt jemand einen Link wo das beschrieben steht!

Stefan Kulpa
26.06.2001, 14:19
<font face="Verdana" size="2">Hallo,

dieser Zugriff nennt sich "ungebunden". Am einfachsten ist dies mit DAO zu realisieren.
Dazu musst du einen Verweis auf die DAO 3.6 Bibliothek setzen; nachfolgend ein simples Beispiel:
Es gibt 4 CommandButtons für die Positionierung im Recordset und eine Textbox, die den Inhalt eines Feldes anzeigt.</font>
<PRE><FONT SIZE=1 FACE=Courier New><FONT COLOR=#000080>Option</FONT> <FONT COLOR=#000080>Explicit</FONT>

<FONT COLOR=#008000>'** Referenz auf MS DAO 3.6 setzen !!!</FONT>
<FONT COLOR=#000080>Dim</FONT> m_objWks <FONT COLOR=#000080>As</FONT> DAO.Workspace
<FONT COLOR=#000080>Dim</FONT> m_objDbs <FONT COLOR=#000080>As</FONT> DAO.Database
<FONT COLOR=#000080>Dim</FONT> m_objRst <FONT COLOR=#000080>As</FONT> DAO.Recordset
<FONT COLOR=#808080><HR></FONT>

<FONT COLOR=#000080>Private</FONT> <FONT COLOR=#000080>Sub</FONT> Form_Load()
<FONT COLOR=#000080>Set</FONT> m_objWks = DAO.DBEngine.Workspaces(0)
<FONT COLOR=#000080>Set</FONT> m_objDbs = m_objWks.OpenDatabase("MyDb.mdb", <FONT COLOR=#000080>True</FONT>)
<FONT COLOR=#000080>Set</FONT> m_objRst = m_objDbs.OpenRecordset("tblKontakte", dbOpenDynaset)
<FONT COLOR=#000080>With</FONT> m_objRst
<FONT COLOR=#000080>If</FONT> <FONT COLOR=#000080>Not</FONT> .BOF <FONT COLOR=#000080>And</FONT> <FONT COLOR=#000080>Not</FONT> .EOF <FONT COLOR=#000080>Then</FONT>
.MoveFirst
txtName.Text = .Fields("sName")
<FONT COLOR=#000080>End</FONT> <FONT COLOR=#000080>If</FONT>
<FONT COLOR=#000080>End</FONT> <FONT COLOR=#000080>With</FONT>
<FONT COLOR=#000080>End</FONT> <FONT COLOR=#000080>Sub</FONT>
<FONT COLOR=#808080><HR></FONT>

<FONT COLOR=#000080>Private</FONT> <FONT COLOR=#000080>Sub</FONT> cmdPrevious_Click()
<FONT COLOR=#000080>With</FONT> m_objRst
.MovePrevious
<FONT COLOR=#000080>If</FONT> .BOF <FONT COLOR=#000080>Then</FONT> .MoveFirst
txtName.Text = .Fields("sName")
<FONT COLOR=#000080>End</FONT> <FONT COLOR=#000080>With</FONT>
<FONT COLOR=#000080>End</FONT> <FONT COLOR=#000080>Sub</FONT>
<FONT COLOR=#808080><HR></FONT>

<FONT COLOR=#000080>Private</FONT> <FONT COLOR=#000080>Sub</FONT> cmdFirst_Click()
<FONT COLOR=#000080>With</FONT> m_objRst
.MoveFirst
txtName.Text = .Fields("sName")
<FONT COLOR=#000080>End</FONT> <FONT COLOR=#000080>With</FONT>
<FONT COLOR=#000080>End</FONT> <FONT COLOR=#000080>Sub</FONT>
<FONT COLOR=#808080><HR></FONT>

<FONT COLOR=#000080>Private</FONT> <FONT COLOR=#000080>Sub</FONT> cmdNext_Click()
<FONT COLOR=#000080>With</FONT> m_objRst
.MoveNext
<FONT COLOR=#000080>If</FONT> .EOF <FONT COLOR=#000080>Then</FONT> .MoveLast
txtName.Text = .Fields("sName")
<FONT COLOR=#000080>End</FONT> <FONT COLOR=#000080>With</FONT>
<FONT COLOR=#000080>End</FONT> <FONT COLOR=#000080>Sub</FONT>
<FONT COLOR=#808080><HR></FONT>

<FONT COLOR=#000080>Private</FONT> <FONT COLOR=#000080>Sub</FONT> cmdLast_Click()
<FONT COLOR=#000080>With</FONT> m_objRst
.MoveLast
txtName.Text = .Fields("sName")
<FONT COLOR=#000080>End</FONT> <FONT COLOR=#000080>With</FONT>
<FONT COLOR=#000080>End</FONT> <FONT COLOR=#000080>Sub</FONT>
<FONT COLOR=#808080><HR></FONT>

<FONT COLOR=#000080>Private</FONT> <FONT COLOR=#000080>Sub</FONT> Form_Unload(Cancel <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>Integer</FONT>)
m_objRst.<FONT COLOR=#000080>Close</FONT>: <FONT COLOR=#000080>Set</FONT> m_objRst = <FONT COLOR=#000080>Nothing</FONT>
m_objDbs.<FONT COLOR=#000080>Close</FONT>: <FONT COLOR=#000080>Set</FONT> m_objDbs = <FONT COLOR=#000080>Nothing</FONT>
m_objWks.<FONT COLOR=#000080>Close</FONT>: <FONT COLOR=#000080>Set</FONT> m_objWks = <FONT COLOR=#000080>Nothing</FONT>
<FONT COLOR=#000080>End</FONT> <FONT COLOR=#000080>Sub</FONT>

</FONT></PRE>

<font face="Verdana" size="2">HTH</font>

Judith
26.06.2001, 18:27
Hallo Stefan!

Danke. Für deine Hilfe. Noch eine Frage und zwar wenn ich z.B. einen Datensatz hinzufügen möchte schreibe ich dann:

Private Sub cmdPrevious_Click()
With m_objRst
.AddNew
???
EndWith
End Sub

Und beim Löschen???

Vielleicht kannst du mir das noch beantworten. Danke hast mir sehr geholfen! :)

Judith

P.S. Ich habe gehört ADO soll angeblich besser sein als DAO was sagtst du dazu?

Judith
26.06.2001, 19:26
Hallo!

Beim Neuen Datensatz habe ich das jetzt so versucht:

Private Sub cmdNeuer_Click()
Dim Nr As Long
Dim Anzahl As Integer
m_objRst.AddNew
m_objRst.MoveLast
Anzahl = m_objRst.RecordCount
Nr = Anzahl + 1
m_objRst.Edit
m_objRst.Fields("AdressNr").Value = Nr
m_objRst.Update
End Sub

Und zwar möchte ich da einen Zähler einbauen nur funktioniert irgendwie nicht richtig.

Judith
26.06.2001, 19:51
Danke Danke Danke

Bin auf das andere selbst draufgekommen!
Wenn es dich interessiert?

Private Sub cmdNeuer_Click()
Dim Nr As Long
Dim Anzahl As Integer
With m_objRst
.Edit
.AddNew
Anzahl = .RecordCount
Nr = Anzahl + 1
.Fields("AdressNr").Value = Nr
.Fields("Vorname").Value = ""
.Fields("Zuname").Value = ""
.Update
.MoveLast
txtAdressNr.Text = .Fields("AdressNr")
txtVorname.Text = .Fields("Vorname")
txtZuname.Text = .Fields("Zuname")
End With
End Sub

Die Frage kannst du mir schon beantworten :)
Ich habe gehört ADO soll angeblich besser sein als DAO was sagtst du dazu?

Stefan Kulpa
26.06.2001, 20:12
<font face="Verdana" size="2">Hallo,

schön, dass es klappt!
Hier vielleicht noch eine Alternative zum Hinzufügen und Löschen ...</font>

<PRE><FONT SIZE=1 FACE=Courier New><FONT COLOR=#000080>Private</FONT> <FONT COLOR=#000080>Sub</FONT> cmdAdd_Click()
<FONT COLOR=#000080>Dim</FONT> rstTmp <FONT COLOR=#000080>As</FONT> Recordset
<FONT COLOR=#000080>With</FONT> m_objRst
.AddNew
.Fields("sName") = "Garfield"
.Update
.Move 0, .LastModified
txtName.Text = .Fields("sName")
<FONT COLOR=#000080>End</FONT> <FONT COLOR=#000080>With</FONT>
<FONT COLOR=#000080>Set</FONT> rstTmp = m_objRst.Clone
rstTmp.MoveLast
MsgBox rstTmp.RecordCount & " Datensätze vorhanden!"
<FONT COLOR=#000080>End</FONT> <FONT COLOR=#000080>Sub</FONT>
<FONT COLOR=#808080><HR></FONT>

<FONT COLOR=#000080>Private</FONT> <FONT COLOR=#000080>Sub</FONT> cmdDelete_Click()
<FONT COLOR=#000080>With</FONT> m_objRst
<FONT COLOR=#000080>If</FONT> <FONT COLOR=#000080>Not</FONT> .BOF <FONT COLOR=#000080>And</FONT> <FONT COLOR=#000080>Not</FONT> .EOF <FONT COLOR=#000080>Then</FONT>
.Delete
.MovePrevious
<FONT COLOR=#000080>If</FONT> .BOF <FONT COLOR=#000080>Then</FONT> .MoveFirst
txtName.Text = .Fields("sName")
<FONT COLOR=#000080>End</FONT> <FONT COLOR=#000080>If</FONT>
<FONT COLOR=#000080>End</FONT> <FONT COLOR=#000080>With</FONT>
<FONT COLOR=#000080>End</FONT> <FONT COLOR=#000080>Sub</FONT>

</FONT></PRE>

<font face="Verdana" size="2">Was ADO betrifft - sicher ist diese Technologie zukunftsweisend (obwohl es bereits wieder einen "Nachfolger" gibt - ADO+), allerdings ist dies meines Erachtens nichts für die ersten Versuche bei Datenzugriffen, da ungleich aufwendiger zu implementieren und - zumindest was den Zugriff auf lokale Access Datenbanken angeht - nicht zwingend schneller. DAO wird es noch eine ganze Zeit geben, und für nicht unbedingt komplexe Lösungen wohl eher angebracht.

Gruß</font>

Judith
26.06.2001, 20:15
Hallo!

Meins ist wahrscheinlich zu umständlich :)

Nein.

Danke