PDA

Vollständige Version anzeigen : DAO-Move


MadCat
29.06.2001, 15:52
Ich versuche mit dem DAO und dem Move-Befehl auf einen Datensatz zu springen. Die Datensatz-Nummer ist in einer Variable gespeichert. Das ganze sieht wie folgt aus:

Dim Temp As Long
Form.txtIndex = Temp
Form.Data1.Recordset.MoveLast
LetzterDatensatz = Form.txtIndex.Text
Form.Data1.Recordset.Move (Temp)

Die Funktion soll dazu dienen mir die Nummer des letzten Datensatzes auszugeben. Aber er springt nicht auf den alten zurück! Wo ist mein Fehler

Stefan Kulpa
29.06.2001, 20:34
<font face="Verdana" size="2">Hallo,

probier's mal so:</font>

<PRE><FONT SIZE=1 FACE=Courier New> <FONT COLOR=#000080>Dim</FONT> objWks <FONT COLOR=#000080>As</FONT> DAO.Workspace
<FONT COLOR=#000080>Dim</FONT> objDbs <FONT COLOR=#000080>As</FONT> DAO.Database
<FONT COLOR=#000080>Dim</FONT> objRst <FONT COLOR=#000080>As</FONT> DAO.Recordset
<FONT COLOR=#000080>Dim</FONT> vBkm <FONT COLOR=#000080>As</FONT> Variant

<FONT COLOR=#000080>Set</FONT> objWks = DAO.DBEngine.Workspaces(0)
<FONT COLOR=#000080>Set</FONT> objDbs = objWks.OpenDatabase("MyDb.mdb", <FONT COLOR=#000080>True</FONT>)
<FONT COLOR=#000080>Set</FONT> objRst = objDbs.OpenRecordset("MyTable", dbOpenDynaset)
<FONT COLOR=#008000>'** Aktuelle Position merken</FONT>
vBkm = objRst.Bookmark
<FONT COLOR=#008000>'** Zum letzten Datensatz wechseln</FONT>
objRst.MoveLast
<FONT COLOR=#008000>'** Nummer ermitteln</FONT>
<FONT COLOR=#008000>'...</FONT>
<FONT COLOR=#008000>'** Zurückspringen</FONT>
objRst.Bookmark = vBkm

<FONT COLOR=#008000>'** Alternative:</FONT>
<FONT COLOR=#000080>Dim</FONT> objTmp <FONT COLOR=#000080>As</FONT> DAO.Recordset
<FONT COLOR=#000080>Set</FONT> objTmp = objRst.Clone
objTmp.MoveLast
<FONT COLOR=#008000>'** Nummer ermitteln</FONT>
<FONT COLOR=#008000>'...</FONT>
<FONT COLOR=#000080>Set</FONT> objTmp = <FONT COLOR=#000080>Nothing</FONT>

</FONT></PRE>

<font face="Verdana" size="2">Entweder arbeitest Du mit der Bookmark-Eigenschaft oder Du erzeugst eine Kopie des Recordsets und ermittelst so einen Wert des letzten Datensatzes.

HTH</font>

MadCat
29.06.2001, 23:16
Ich habe diese Lösungen ausprobiert, die liefern mir aber dasselbe Ergebnis wie mein Code. Irgendwie schaff ich das nicht das er nach getaner Arbeit zurückspringt *verzweifel*
Was tun???

Stefan Kulpa
30.06.2001, 04:48
<font face="Verdana" size="2">Hallo,

das waren eigentlich zwei Lösungen. Die erste arbeitet mit Bookark und die zweite mit einer Kopie des Recordsets.
Versuch nochmal nur die zweite Variante (ab Alternative) - in der Kopie kannst Du Dich beliebig bewegen, ohne das Original zu verändern.

Gruß</font>

------------------
Hier könnte man auch was finden... (http://vbtipps.gmxhome.de/MyLinks.html)

MadCat
02.07.2001, 23:01
Ich hab beide Lösungen Ausprobiert, mir kam allerdings aus dem Info-Unterricht 'ne andere Idee worans liegen könnte. Wie am Anfang zu sehen belege ich die Variable "LetzterDatensatz" von Typ Long mit dem Inhalt einer Text-Box. Kann es sein daß dazu der Inhalt selbiger erst wie bei Java mit einer Expliziten Typumformung in Long umgeformt werden muß?

MadCat
05.07.2001, 09:31
Ich habe auch beide Lösungen Ausprobiert, aber ich glaube nun zu wissen wo das eigendliche Problem liegt:
Wie im ersten Teil ersichtlich versuchte ich die Index-Nummer aus einem Textfeld direkt mit
Variable = Index.Text
einzulesen, aber nun kam mir aus dem Info-Unterricht die Idee, daß diese Typen nicht zusammenpassen, wie in Java wo unterschiedliche Variabeln auch nur über Explizite Typumwandlung gleichsetzbar sind. Kann ich Integer-Variabeln und Textfeld-Inhalte direkt gleichsetzen und wenn nicht, wie dann?

Stefan Kulpa
05.07.2001, 16:32
<font face="Verdana" size="2">Hallo,

wenn der Inhalt der Textbox einer Ganzzahl entspricht, dann ist die direkte Zuweisung zu einer Integer-Variablen möglich. Generell sollte man jedoch ein Typecast durchführen; Beispiel:

iValue = CInt(Val(Text1.Text))

Die Val-Funktion vor dem CInt ist sinnvoll, falls es sich nicht um einen numerischen Wert handelt. Alternativ funktioniert auch folgende Variante:

iValue = CInt(0 & (Text1.Text))

HTH</font>