Zum Inhalt springen

ListBox füllen mit einem Recordset schlägt fehl


Empfohlene Beiträge

Geschrieben

Hallo Zusammen,

Ich hab nen Problem mit VBA unter Access.

In einem Formular, was ich in Excel erstellt, und dann im Access importiert habe gibt es viele Stuerelemente.

Ich kann auch sämtliche Steuerlemente füllen (von hand), nur bei der Listbox habe ich auf die Hilfe vertraut, denn die sagt ja aus, eine Listbox kann auch mit Recordsets umgehen (wie in VB6 ja schließlich auch)

Mein Recordset wie wie folgt gefüllt:

Set rstAufschuettung = db.OpenRecordset("SELECT MatArt.Beschreibung, Materialaufschuettung.Herkunft, MatQualität.Qualität, Materialaufschuettung.Bemerkung FROM MatQualität INNER JOIN (MatArt INNER JOIN (Maßnahme INNER JOIN Materialaufschuettung ON Maßnahme.StandortID = Materialaufschuettung.StandortID) ON MatArt.MaterialID = Materialaufschuettung.MaterialID) ON MatQualität.MatQualität = Materialaufschuettung.QualitätID WHERE ((Materialaufschuettung.StandortID)= " & rstMaßnahme!StandortID & " )", dbOpenDynaset, dbReadOnly)

sämtliche Datenfelder des Recordsets sind Text nur Bemerkung ist ein Memo-Feld hier stelle ich die Anzahl der Spalten ja ein:
lstMaterial.ColumnCount = rstAufschuettung.Fields.Count

und hier möchte ich eigentlich gerne meiner ListBox nun dieses Recordset übergeben:
lstMaterial.RowSource = rstAufschuettung

kommt verständlicherweise "Typen unverträglich"
lstMaterial.RowSource = "rstAufschuettung"

hier kommt Fehler 380: Eigenschaft RowSource konnte nicht gesetzt werden. Üngültiger Eigenschaftswert

zitat Hilfe:

Gibt die Quelle an, die eine Liste für ein Kombinationsfeld-Steuerelement (ComboBox) oder Listenfeld-Steuerelement (ListBox) zur Verfügung stellt.

Syntax

object.RowSource [= String]

Die Syntax für die RowSource-Eigenschaft besteht aus folgenden Teilen:

Teil Beschreibung

object Erforderlich. Ein gültiges Objekt.

String Optional. Die Quelle der Liste für das Kombinationsfeld-Steuerelement oder das Listenfeld-Steuerelement.

nur frage ich mich nun, welcher Eigenschaftswert ungültig ist :/

Weiß jemand Rat ?

Verwendet wird Access 2000, die Verweise sind als Anhang mit aufgeführt

post-63538-14430448799844_thumb.png

Geschrieben (bearbeitet)

Ich hab in der Online-hilfe lokal gesucht, jedoch steht dort so ziemlich das gleiche wie auf der MSDN Seite.

Jedoch muckt Access2000 schon auf, wenn ich:

lstMaterial.RowSourceType = "Table/Query"

mache.

ich denke das liegt an den verschiedenen klassen :/

access hat ja etwas andere klassen als VB6 oder VBA für die controlls.

Gleiche ist ja auch bei textfeldern ... in VB6 geb ich nen RecordSource, und hab die Dinger gebunden, jedoch unter Access muß ich das ja alles zu fuß machen ...

Breche mir grad die Ohren, aber ich denke ich werde es auf die Klassische machen ...

For ... additem/list() ... next

muß nur mal sehen wie ich es dann mit dem Zeiger in der DB mache ... oder ich mach nen clone oder sowas ...

und danke für die schnelle reaktion

ps:

wenn ich das Formular nach Excel packe, und dort die Daten in ein Tabellenblatt schreibe, dann kann ich dieses mit

RowSource = "A1 : D5"
deklarieren ... aber ich will doch nun garnicht eine Excelinstanz öffnen um dieses Feature nutzen zu können ^^ Bearbeitet von PromiseYou
Geschrieben
Mit einer Fehlerbeschreibung wie "muckt auf" ist die Diagnose einigermaßen schwierig.

Fehler 13: Typen unverträglich ist das Ergebnis, nur das hilft auch absolut nicht weiter ...

Er will an dieser Stelle nen String

hier mal der lange auszug aus der Hilfe:

RowSourceType-, RowSource-Eigenschaften (Herkunftstyp, Datensatzherkunft)



Sie können die Eigenschaften RowSourceType und RowSource zusammen verwenden, um Microsoft Access mitzuteilen, wie Daten für ein Listenfeld, ein Kombinationsfeld oder ein ungebundenes OLE-Objekt (z.B. ein Diagramm) bereitgestellt werden sollen. Wenn Sie z.B. in einem Listenfeld Datenzeilen anzeigen möchten, die aus einer Abfrage namens Kundenliste stammen, stellen Sie die Eigenschaft RowSourceType des Listenfelds auf Tabelle/Abfrage und dessen Eigenschaft RowSource auf die Abfrage namens Kundenliste ein.


Einstellung


Die Eigenschaft RowSourceType hat die folgenden Einstellungen.


Einstellung Beschreibung 

Tabelle/Abfrage (Standardeinstellung) Die Daten stammen aus einer Tabelle, Abfrage oder SQL-Anweisung, die von der Einstellung der Eigenschaft RowSource festgelegt wurde. 

Wertliste Die Daten entsprechen einer Liste von Einträgen, die von der Einstellung der Eigenschaft RowSource festgelegt wurden. 

Feldliste Die Daten entsprechen einer Liste von Feldnamen einer Tabelle, Abfrage oder SQL-Anweisung, die von der Einstellung der Eigenschaft RowSource festgelegt wurde. 



Anmerkung   Sie können die Eigenschaft RowSource auch mit einer benutzerdefinierten Funktion einstellen. Der Funktionsname wird ohne vorstehendes Gleichheitszeichen (=) und ohne nachfolgendes Klammernpaar eingegeben. Geben Sie bestimmte Code-Argumente der Funktion an, um Microsoft Access mitzuteilen, wie das Steuerelement gefüllt werden soll.


Die Einstellung der Eigenschaft RowSource ist abhängig von der Einstellung der Eigenschaft RowSourceType.


Einstellung von RowSourceType Zugehörige Einstellung von RowSource 

Tabelle/Abfrage Der Name einer Tabelle bzw. einer Abfrage oder eine SQL-Anweisung. 

Wertliste Eine Liste von Einträgen mit Semikolons ( als Trennzeichen. 

Feldliste Der Name einer Tabelle bzw. einer Abfrage oder eine SQL-Anweisung. 



Anmerkung   Wird die Eigenschaft RowSourceType auf eine benutzerdefinierte Funktion eingestellt, dann kann die Eigenschaft RowSource leer gelassen werden.


Sie können die Eigenschaften RowSourceType und RowSource im Eigenschaftenfenster des Steuerelements, in einem Makro oder in Visual Basic einstellen.


Für solche Felder, deren Eigenschaft DisplayControl auf Kombinationsfeld oder Listenfeld eingestellt ist, können Sie diese Eigenschaft für Tabellenfelder in der Tabellenentwurfsansicht auf der Registerkarte Nachschlagen im Bereich Feldeigenschaften einstellen.


Anmerkung   Microsoft Access stellt diese Eigenschaft automatisch ein, wenn Sie in der Tabellenentwurfsansicht Nachschlage-Assistent als Datentyp für ein Feld auswählen.


Stellen Sie in Visual Basic die Eigenschaft RowSourceType unter Verwendung eines Zeichenfolgenausdrucks auf einen der folgenden Werte ein: "Table/Query", "Value List" oder "Field List". Sie können einen Zeichenfolgenausdruck auch verwenden, um den Wert der Eigenschaft RowSource einzustellen. Sie stellen die Eigenschaft RowSourceType auf eine benutzerdefinierte Funktion ein, indem Sie den Namen der Funktion eingeben.


Anmerkung


Verfügen Sie über eine begrenzte Anzahl an Werten, die sich nicht ändern, so können Sie die Eigenschaft RowSourceType auf Wertliste einstellen und dann die Werte eingeben, die in der Liste in der Eigenschaft RowSource enthalten sind.


Wenn Sie eine benutzerdefinierte Funktion erstellen, um Elemente in ein Listenfeld oder Kombinationsfeld einzufügen, ruft Microsoft Access die Funktion mehrmals auf, um die benötigten Informationen zu erhalten. Benutzerdefinierte Funktionen für RowSourceType werden in einem ganz bestimmten Funktionsformat geschrieben.

[/code]

naja und dort steht halt, es soll auch mit nen SQL-Befehl gehen

ich bin dann aber nun mal wech ... koffer packen und dann nach hause ... werde mich dort weiter dran setzen, vllt kommt mir ja dort die Eingebung :eek

Geschrieben

Moin,

es fällt mir schwer, dein Problem nachzuvollziehen. Ich habe mir das eben in A03 angeschaut, aber das war in A2k definitiv schon genauso:

Erstelle eine Listbox mit dem Assistent und gib danach als Datensatzherkunft dein SQL-Statement ein. Fertig. Wenn das SQL dynamisch sein muss, sich also die Rowsource zur Laufzeit ändert (zB weil die Listbox abhängig von etwas anderem ist) kann es natürlich sein, das du ein requery oä machen musst.

Reinhold

Geschrieben

ja, aber ....

ich nutze nicht das Form aus Access, sondern aus der VBA-Libary. Warum ?

Ich habe ein Form mit Excel erstellt. Dieses Form habe ich dann unter Access importiert. Mit dem Trugschluß, dass die Steuerelemente sich identisch verhalten. Wie ich nun feststellen muß, ist dies nicht der Fall.

Eine ListBox in einem importierem Excel-VBA-Form verhält sich anders, als das Access interne Steuerelement.

Das Access-Steuerelement kann ich jedoch nicht auf dem importiertem Form editieren.

Warum nutze ich nicht das Access eigene Form ?

In meiner Ausbildung habe ich VB6 gelernt, und danach auch einige Anwendungen drin geschrieben, und mich daran gewöhnt. Da fiel mir der Umstieg nach VBA mit Office nicht schwer. Aber als ich dann die Forms von Access mir angeschaut habe, habe ich sehr viel vermisst, was ich unter VB/VBA so eigentlich mit meinen Daten machen kann ... Gerade in hinsicht auf Gestaltung der Oberfläche.

Sicherlich kann mach auch mit den Access-Forms wunderebare Sachen machen, aber dafür muß ich mir es dann erstmal richtig anschauen, und kann das nicht mal adHook machen.

Wenn es mir sonst alles zuviel wird, mach ich ne DDE mit Excel auf, und lass dort die Forms rennen (oder spricht etwas aus irgendeiner Erfahrung dagegen?)

Geschrieben

du kannst der listbox kein bereits geöffnetes recordset zuweisen

probier mal folgende methoden aus und schreib, ob du deinem ziel etwas näher gekommen bist ;-)

1)

    Dim db As DAO.Database

    Dim rst As DAO.Recordset


    strQuery = "SELECT 0, '<Ausw>' AS Produkt " & _

                 "FROM tbProdukte " & _

                "UNION " & _

               "SELECT Produkt_ID, ProduktArt " & _

                 "FROM tbProdukte " & _

                "WHERE ..."

    Me!cbErweiterProdukte.RowSourceType = "Table/Query"

    Set db = CurrentDb

    Set rst = db.OpenRecordset(strQuery, dbOpenDynaset)

    Set Me!cbErweiterProdukte.Recordset = rst

' bzw. bei Standard Listenfeld einfach

'   Me!cbErweiterProdukte.RowSource = strQuery
2)
Dim lstStrFill as String


#Ein ADO.Recordset rs öffnen und dann:


lstStrFill=rs.GetString(adClipString, ColumDelimeter:=";", _

RowDelimeter:=";")


'Es entsteht eine Liste mit Einträgen, getrennt durch ";"


Form.Controls("DeineListBox").RowSourceType="Value List"

Form.Controls("DeineListBox").DeineListBox.RowSource=lstStrFill

rs.Close
3)
rs.MoveFirst

h = 1

With UserForm1

Do Until rs.EOF


.NameDeinesListenfeldes.AddItem (rs.Fields(0))

.NameDeinesListenfeldes.Column(1, h) = rs.Fields(1)

.NameDeinesListenfeldes.Column(2, h) = rs.Fields(2)

.NameDeinesListenfeldes.Column(3, h) = rs.Fields(3)

h=h+1

rs.MoveNext

Loop

  • 4 Wochen später...
Geschrieben

hallo Saifai,

hat was gedauert bis ich mich wieder Zeit hatte mich weiter dran zu setzen.

Ich mache es so ähnlich wie Du es geschrieben hast. (halt angepasst an meine Bedingungen), aber das Kreiseln zwischen den Controls innerhalb von Frames geht dann doch ganz gut. Viel zu schreiben und zu überwachen, aber es geht.

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...