piomode1 Geschrieben 23. Oktober 2001 Teilen Geschrieben 23. Oktober 2001 Hallo, alle zusammen! Ich habe ein Problem, bei dem Ihr mir vielleicht helfen könnt. Ich versuche bisher, es mit VBA zu lösen. ~~~~~ Daten: Tabelle 'tKunde': IDKunde (Autowert, Primary Key) / Firma 108 / B 109 / A 127 / C Auswahlabfrage 'aKunde' (Aufsteigend nach Firma sortiert): IDKunde / Firma 109 / A 108 / B 127 / C [i.O.] Die Datensätze sind löschbar. ~~~~~ Ziel: Ich möchte in einem ungebundenen Kombinationslistenfeld (cbo) als Standardwert beim Öffnen des Formulars jedesmal die jeweilig erste IDKunde stehen haben (Nach Firma alphabetisch aufsteigend sortiert). Also mit den Daten im Beispiel oben die 109. ~~~~~ Problem: DMin ("[iDKunde]", "aKunde") = 108 [i.O.] DMax ("[iDKunde]", "aKunde") = 127 [i.O.] DFirst("[iDKunde]", "aKunde") = 108 [WARUM?] DLast ("[iDKunde]", "aKunde") = 127 [hier: i.O.] Access scheint die Reihenfolge der Ausgabe der Abfrage nicht zu beachten!? ~~~~~ Würde es evtl. auch mit einem Rückgabewert aus einem SQL-String funktionieren? Falls eine solche Lösung von Euch kommt: Ich beherrsche dieses noch nicht so gut und wäre dann dankbar, wenn der "gesamte" VBA-Code angegeben wird: ( "Das Öffnen des rs" MeineVariable = "und nun weiß ich die genaue Syntax nicht" MeineCbo.DefaultValue = Meine Variable "Das Schließen des rs" ) Aus irgendeinem Grund gelingt es mir nicht, den aus einer Abfrage kopierten SQL-String VBA-tauglich zu machen. 'MeineCbo.ListIndex = 0' funktioniert nicht: "Falsche Verwendung der Eigenschaft." ~~~~~ Danke an dieser Stelle schon einmal an alle, die mir helfen wollen! Grüße piomode1 <FONT COLOR="#a62a2a" SIZE="1">[ 25. Oktober 2001 21:22: Beitrag 3 mal editiert, zuletzt von piomode1 ]</font> Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Wolle Geschrieben 23. Oktober 2001 Teilen Geschrieben 23. Oktober 2001 <BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Zitat:</font><HR>Original erstellt von piomode1: <STRONG>Ich beherrsche dieses noch nicht so gut und wäre dann dankbar, wenn der "gesamte" VBA-Code angegeben wird: ( "Das Öffnen des rs" MeineVariable = "und nun weiß ich die genaue Syntax nicht" MeineCbo.DefaultValue = Meine Variable "Das Schließen des rs" ) </STRONG> Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
piomode1 Geschrieben 25. Oktober 2001 Autor Teilen Geschrieben 25. Oktober 2001 Hi, Wolle! Ersteinmal vielen Dank für Deine Hilfe. cbo.RowSource="SQL-String" wird mir in Zukunft nützlich sein. Leider löst Dein Vorschlag mein Problem nicht: Es werden zwar alle Firmen sortiert in die Komboliste aufgenommen; DAS macht meine Abfrage auch... Das Problem (mein Wunsch) besteht darin, daß ich beim Öffnen des Formulars kein leeres KomboFeld sehen möchte, sondern schon in diesem Moment automatisch eine Firma. Mit der Eigenschaft "Standardwert" kann ich zwar eine IDKunde eintragen. Das löst mein Problem aber auch nicht, denn es kommen und gehen ständig Kunden. Ich weiß also nie, welcher Kunde alphabetisch jetzt an erster Stelle steht. Nocheinmal wie bereits geschrieben: 1) Die Abfrage und auch Wolles .RowSource liefern die Daten in alphabetischer Reihenfolge. 'DFirst' und 'DMin' liefern nicht das richtige Ergebnis. 2) cbo.ListIndex = 0 liefert Laufzeitfehler '7777' In gespannter Erwarung Eurer Kreativität. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Meenzer Geschrieben 26. Oktober 2001 Teilen Geschrieben 26. Oktober 2001 Hallo und guten Morgen! Ich hoffe, ich habe es geschnallt und hier ist meine Lösung. Beim Anzeigen des Formulares soll die erste Firma in Deinem Kombifeld stehen. Richtig?? Wenn ja: Private Sub Form_Current() 'erstmal zwei Variable deklarieren Dim sql As String Dim rs As Recordset 'die kundenID nach firma sortier holen sql = " SELECT IDKunde, Firma FROM tKunde ORDER BY Firma;" 'Kombifeld zuweisen Me.Kombinationsfeld0.RowSource = sql 'recordset öffnen mit dem gleichen sql Set rs = CurrentDb.OpenRecordset(sql, dbOpenSnapshot) 'zum ersten springen rs.MoveFirst 'da die ID die gebundene spalte ist, erster Kunde=Kombifeld Me.Kombinationsfeld0 = rs![idKunde] 'recordset schliessen rs.Close Set rs = Nothing End Sub Jetzt sollte das Formular die erste Firma anzeigen. Ich hoffe, das hilft Dir weiter. Gruss Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
piomode1 Geschrieben 27. Oktober 2001 Autor Teilen Geschrieben 27. Oktober 2001 Hallo, Leute! Der Code von Mercutio ist schlüssig und müßte meines Wissens nach funktionieren. Nur bei mir nicht... Es kommt zum Laufzeitfehler 13: Typen unverträglich. Das Problem taucht auch auf, wenn ich statt SQL eine existierende Abfrage einsetze! Ich habe dazu ein neues Thema gestartet: Access 2000, OpenRecordset, Lzf. 13 An dieser Stelle ersteinmal vielen Dank an alle! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
HELLmut Geschrieben 28. Oktober 2001 Teilen Geschrieben 28. Oktober 2001 hi wenn ich das mal schnell überblicke denke ich das es statt Me.Kombinationsfeld0 = rs![idKunde] Me.Kombinationsfeld0.value = rs![idKunde] heißen müsste. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
piomode1 Geschrieben 29. Oktober 2001 Autor Teilen Geschrieben 29. Oktober 2001 Hi, s35i! Im Prinzip hast Du recht, es ist sauberer so zu programmieren, wie Du es vorschlägst: _____ Me.Kombinationsfeld0.value = rs![idKunde] _____ Nun ist es aber so, daß sich MS manchmal etwas anstellt, und nur Zuweisungen an Felder zulässt, wenn dieses Feld den Fokus besitzt. Das ist manchmal aber unerwünscht bzw. etwas schwer zu realisieren. Abhilfe schafft hier die Möglichkeit unsauber zu implementieren. Es gibt für jedes Steuerelement eine Standardeigenschaft. Und wenn genau diese Eigenschaft manipuliert werden soll, braucht sie nicht mit angegeben zu werden: _____ Me.Kombinationsfeld0 = rs![idKunde] _____ Und wenn man den Feldnamen ohne Leerzeichen und Bindestrich und sonstwelche 'Sonderzeichen' gewählt hat, kann man auch die eckigen Klammern weglassen: _____ Me.Kombinationsfeld0 = rs!idKunde _____ Und wenn der Code als Klassenmodul (gebunden im Formular) vorliegt, kann auch das Me. wegfallen. ABER das Me. nimmt viel Schreibarbeit ab, da dann in der KomboListe alle Eigenschaften und auch die Steuerelemente in diesem Formular aufgelistet werden, so daß folgende Zeile nur eine (theoretische aber funktionierende) Möglichkeit darstellt: _____ Kombinationsfeld0 = rs!idKunde _____ Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.