Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Formular Füllen über Me.Recordset = rs | SQL-String (vs. Tabelle)

221 views
Skip to first unread message

Johannes Curio

unread,
Jan 29, 2008, 6:47:00 AM1/29/08
to
Moin, Moin

ich hatte es mal geschafft, ein Formular über folgenden Code zu füllen:

Private Sub Form_Load()
Dim rs As DAO.Recordset
Dim SQL$
SQL$ = "SELECT * from tbl_Artikel"
Set rs = CurrentDb.OpenRecordset(SQL$)
Set Me.Recordset = rs
rs.Close
Set rs = Nothing
End Sub

Die Schritte, wie ich zu dem Formular komme:
1. Aus einer Tabelle / Abfrage ein Formular mit Hilfe des Assistenten
erstellt.
2. Das Formular von seiner Datenquelle unter Eigenschaften entbunden.
3. Die Controls behalten ihre Datenquelle, d.h. im Feld Preis steht "Preis"
und nicht "ungebunden".
4. Den Code implementiert.

Ich erhoffte mir eine automatisches Füllen des Formulars. Aber leider nichts
passiert - nicht mal eine Fehlermeldung.
Was mache ich falsch?
Gruß und Danke im Voraus für die Hilfe
Johannes

P.S. Wenn wir schon dabei sind:
Warum führt dieser Code an der Stelle
"Set Me.Recordset = rs"
zur Fehlermeldung "7965 - Das eingegebene Objekt ist keine gültige
Recordeigenschaft" Fehlermeldung unter Acc07, aber ähnliche kommen auch bei
den Versionen 2002 und 2003.
Was ist der technische Unterschied zwischen SQL und öffnen als Tabelle,
Dynaset?
Private Sub Form_Load()
Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset("tbl_Artikel")
Set Me.Recordset = rs
rs.Close
Set rs = Nothing
End Sub

Peter Doering

unread,
Jan 29, 2008, 7:06:01 AM1/29/08
to
Hallo,

Johannes Curio wrote:

> ich hatte es mal geschafft, ein Formular über folgenden Code zu füllen:
>
> Private Sub Form_Load()
> Dim rs As DAO.Recordset
> Dim SQL$
> SQL$ = "SELECT * from tbl_Artikel"
> Set rs = CurrentDb.OpenRecordset(SQL$)
> Set Me.Recordset = rs
> rs.Close
> Set rs = Nothing
> End Sub

So waere es besser:

Private Sub Form_Load()
Dim SQL$ As String


SQL$ = "SELECT * from tbl_Artikel"

Me.RecordSource = SQL$
End Sub

Noch besser waere es, die Tabelle tbl_Artikel in der Formulareigenschaft
Datenherkunft einzutragen. In dem Fall braeuchtest du Form_Load nicht mehr.

Gruss - Peter

--
Ich beantworte keine Fragen per Email.
Mitglied im http://www.dbdev.org
FAQ: http://www.donkarl.com

Johannes Curio

unread,
Jan 29, 2008, 7:54:39 PM1/29/08
to
Moin, Moin,
ein Kollege (Danke, Hans) hat mich auf die Fehler aufmerksam gemacht:
Man darf den Recordset nicht schließen, d.h. die Zeile "rs.close" ist
falsch.
und bei "Set rs = CurrentDb.OpenRecordset("tbl_Artikel")" muss man als
Dynaset öffnen, d.h.
Set rs = CurrentDb.OpenRecordset("tbl_Artikel", dbOpenDynaset)
Danke
Johannes


"Johannes Curio" <J.C...@gmx.net> schrieb im Newsbeitrag
news:97C196DD-20ED-40F2...@microsoft.com...

Peter Doering

unread,
Jan 30, 2008, 6:04:22 AM1/30/08
to
Moin,

Johannes Curio wrote:
> "Johannes Curio" ...


>>
>> ich hatte es mal geschafft, ein Formular über folgenden Code zu füllen:
>>
>> Private Sub Form_Load()
>> Dim rs As DAO.Recordset
>> Dim SQL$
>> SQL$ = "SELECT * from tbl_Artikel"
>> Set rs = CurrentDb.OpenRecordset(SQL$)
>> Set Me.Recordset = rs
>> rs.Close
>> Set rs = Nothing
>> End Sub
>

> ein Kollege (Danke, Hans) hat mich auf die Fehler aufmerksam gemacht:
> Man darf den Recordset nicht schließen, d.h. die Zeile "rs.close" ist
> falsch.

Das wuerde fuer ADO gelten, du setzt aber explizit DAO ein, insofern ist
die Vorgehensweise schaedlich.

Entweder du steigst auf ADO um (siehe
http://support.microsoft.com/kb/281998 ) oder haelst dich an die Empfehlung
aus meiner anderen Antwort.

> und bei "Set rs = CurrentDb.OpenRecordset("tbl_Artikel")" muss man als
> Dynaset öffnen, d.h.
> Set rs = CurrentDb.OpenRecordset("tbl_Artikel", dbOpenDynaset)

dbOpenDynaset ist der Standardtyp bei Abfragen und verknuepften Tabellen,
siehe <F1>OpenRecordset. Die Angabe des Typs ist hier also nicht
erfolgskritisch, man sollte ihn aber trotzdem immer angeben.

0 new messages