![]() |
VBA/Access: mehrere Abfragen in ein Listfeld
http://members.chello.at/ntsc-j/verleih.jpg
folgendes prob: ich gebe kundennummer und produktnummer ein auf hinzufügen und es sollte im listfeld erscheinen ist ja noch kein problem.. einfach ne abfrage aber was mach ich wenn er noch mehrere produkte hinzufügt werden? wie bring ich mehrere abfragen in ein listfeld? die einzige möglichkeit die mir einfiel ist ich erstell ne tabelle schreib das dann dort rein.. und das steht dann im listfeld.. aber mein professor maunzt dann wieder weils ne extra-tabelle is.. ich hoffe mir kann wer helfen kann man vielleicht im code ne tabelle erstellen? und wenns formular geschlossen wird lösch ichs wieder.. wenns ohne tabelle gehen würd wärs mir am liebsten ps: schulprojekt :D |
hmm. kannst du mir das bitte nocheinmal erklären.
ich verstehe das nicht so ganz, wo dein problem ist. danke chris |
wie ich 2 oder mehrere Abfragen in ein Listfeld bekomme
schau.. er schreibt ne produktnummer hin.. geht auf hinzufügen.. und der name erscheint unten.. erreich ich mit ner abfrage wenn er jetzt noch ein produkt hinzufügt.. wieder ne abfrage.. aber wie bekomm ich mehrere abfragen in ein listfeld ? |
Zitat:
also nocheinmal für die billigen plätze: du schreibst in produktnummer eine nummer rein (z.b.: 1234) und im listenfeld unten steht dann der dazugehörige wert (zb. handschuhe). richtig ?? frage eins: was passiert mit den werten die unten stehen. lasst du die nur anzeigen oder werden die in eine tabelle geschrieben. frage zwei: was soll passieren, wenn due eine zweite produktnummer eingibst. sorry, ich verstehe das ganze leider noch nicht. gruss chris |
wenn ich eine zweite produktnummer eingebe sollen beide artikel dortstehn
und wenn man dann auf ok drückt werden die artikel als "Verliehen", "Zurückgebracht" oder "Verkauft" in der tabelle vermerkt |
jetzt weiss ich was ich meine.
naja ist eh nicht so schwer. du musst einfach nur den listfeld die werte zuweisen. das kannst du mit den befehl: RowSource machen: hier ein kleines beispiel: dim source as string source =[Liste].RowSource & ";" & Produktnummer Me![Liste].RowSource = source fertig in diesen beispiel wird einen listenfeld mit den namen "Liste" der wert von den Feld "Produktnummer" angefügt. habe zum testen einen button gemacht und jedesmal wenn ich drauf klicke habe ich einen wert mehr in der liste. den ";" brauchst du, weil du damit den listfeld bekannst gibst, dass das ein neuer datensatz ist. alles klar ???? gruss chris |
ich denke
also immer wenn ich eine produktnummer hinzufügen will schreib ich erneut: source =[Liste].RowSource & ";" & Produktnummer Me![Liste].RowSource = source oder ? |
welche version von access hast du ???
2000 und xp kann ich jetzt gerade öffnen. ich schicke dir eine pm mit meiner email adresse. sende mir das file und baue dir das auf die schnelle ein. sagst halt deinen lehrer nicht, dass du das nicht warst :) gruss chris |
hi
hab office xp ich versuchs mal selber danke für die hilfe aber muss es ja können weil sonst kann ichs zur matura nicht ;) |
ok. selber machen ist eh besser :)
also nocheinmal für dich. du hast den button "hinzufügen". da wird dann unten in der liste ein wert angezeigt. was du aber brauchst, ist der liste einen wert hinzufügen. und das geht mit RowSource wie schon beschrieben. mit me! kannst du feldern werte setzten: me![liste] :wäre das listenfeld mit den namen "liste" me![liste].RowSource :damit sagst, dass das listenfeld folgende einträge von dir bekommt z.b: me![liste].RowSource = "Test1; Test2; Test3" in der liste würde dann stehen: Test1 und Test2 und Test3 ";" trennt die werte ab. da du aber den wert nicht jedesmal überschreiben willst, sondern dazuhängen muss du vorher den alten wert der liste auslesen. dafür brauchen wir eine variable: dim source as string 'varibale source als test jetzt müssen wir den alten wert auslesen: source =[Liste].RowSource ' die variable hat den alten listenwert jetzt den neuen wert noch dazuhängen: source =[Liste].RowSource & ";" & Produktnummer 'Produktnummer ist ein Feld und zum schluss den neuen wert wieder in die liste schreiben: Me![Liste].RowSource = source ich kann dir darüber ein kleines beispiel schreiben, wenn du mir deine mail adresse gibst. kennst dich jetzt aus ??? gruss chris |
danke
ich denke schon :) meld mich eben wieder wenns ned funkt :D |
hi
danke das funktioniert nur wie aktualisiere ich das listfeld? früher gings mit renew ... nur das kennt er nicht mehr :rolleyes: (aja - wir proggen mit ado (extras - verweise)) nächste frage wäre wie ich das dann wieder auslese weil wenn ich auf ok klicke soll er speichern ob es verliehen/zurückgegeben/verkauft wurde.. danke aja, kannst natürli a mailen => ntsc-j@chello.at :) |
Zitat:
was soll er, wie soll er und wann soll er, speichern. gruss chris |
wenn ich auf ok klicke soll er in einer tabelle speichern, dass er ausgeliehen hat (falls oben das gewählt wurde) oder ob es verkauft wurde oder zurückgebracht..
|
wie muss die tablle ausschauen, oder ist das egal ?
chris |
die tabellen sind alle schon vorhanden..
muss nur wissen welche titeln es sind, und der rest is ka prob mehr muss nur wissen wie ich es auslese und wie ich das listfeld aktualisiere, weil leider nichts drin steht.. |
Na da haben aber zwei ganz schön aneinander vorbei geredet :D
Eine Listbox kann man auf mehrere Arten befüllen. Man kann Werte aus einer Tabelle oder Abfrage nehmen (was BigNfan anscheinend ursprünglich gemacht hat), die Werte durch Semikola getrennt als RowSource angeben (das war Chrisnes Plan) und man kann sie auch über die Methode AddItem mit Werten befüllen. Ein Requery, also ein erneutes einlesen der Werte ist natürlich nur im ersten Fall sinnvoll da in den beiden anderen Fällen die Werte ja ohnehin direkt in der Listbox abgelegt und damit immer aktuell bekannt sind. Eine Möglichkeit wäre es das Listenfeld an ein ADO-Recordset zu binden und dem du die Datensätze zuerst hinzufügst um sie dann bei OK nacheinander in deine Tabelle zu schreiben. Ich würde aber eher vorschlagen beim Starten der Auswahl für eine ADO-Connection auf die betreffende Datenbank eine TRANSAKTION zu starten (=BeginTrans), dann ein Recordset für die betreffende Tabelle zu öffnen, die Werte bei Auswahl in das Recordset zu schreiben (AddNew) und erst bei OK die Änderungen zu übernehmen (=CommitTrans). Wenn der Vorgang nicht mit OK bestätigt wird brichst du die Änderungen einfach ab (=RollbackTrans). Alle Klarheiten beseitigt? Na dann is' ja gut ;) so long Seidl |
ich mache dir gerade ein demo. wenn du mir sagst, wie deine tabelle ausschaut, dann baue ich es dir im demo gleich so ein.
chris |
ich hab dir ne mail geschickt
dankeschön :) |
Zitat:
so wie es ausschaut hat bignfan nur "wenig" kenntnisse in access. darum sollte die lösung einfacher sein. deine lösung ist zwar hübsch, aber meine meinung nicht einfach. 3 zeilen programm mit RowSource :) chris |
Zitat:
|
Naja, für so kleine Datenmengen ist die Performance wohl auch nicht wirklich ausschlaggebend. Die Frage ist nur wie die Note bei einer getricksten Lösung ausfällt wenn der Lehrer schon eine zusätzliche Tabelle nicht wollte. Die wollte er ja wahrscheinlich nicht um seine Leute zur Verwendung von ADO zu treiben. Bei so kleinen Datenmengen wäre ja auch der Grössenzuwachs durch das Hinzufügen und Löschen aus einer Tabelle kein Thema und sogar das ließe sich bei einer Single-User-Anwendung die es ja sicher ist durch komprimieren beim Schliessen verhindern.
Jetzt liegt's an BigNfan: praktischer Minimalist oder performancegeiler Streber :lol: :lol: :lol: |
hast du dir den code schon angeschaut ?
|
Wie? Was? Wer?!?! :confused:
|
ich war damit gemeint.
ja kurz. bin/war gerade ur im stress. schaue das ich am wochenende dazu komme. zur info: die ansicht der liste kannst du mit: Me![list].Requery aktualisiere gruss chris |
leider steht nach requery immer no nix im listfeld
If (i = 0) Then 'Wenn noch nix im Listfeld steht Me!lst_artikel.RowSource = rst1!CDName MsgBox (rst1!CDName) Else 'Wenn schon etwas im listfeld steht source = lst_artikel.RowSource 'Alter Wert im Listfeld source = lst_artikel.RowSource & ";" & rst1!CDName Me!lst_artikel.RowSource = source 'Neuer Wert im Lisfeld End If Me!lst_artikel.Requery 'Listfeldaktualisierung aber msgbox(rst1!Cdname) gibt den richtigen wert aus.. *hm* |
Zitat:
habs jetzt mit deiner methode probiert weil chrisne hatte leider noch keine zeit meinen code anzuschauen lst_artikel.RowSourceType = "Value List" lst_artikel.AddItem source, 0 so, wenn ich nun ins listfeld klicke sehe ich das sich jedes mal eine neue zeile auftut, aber nur leider steht nix drin :rolleyes: hab mir aber angeschaut source isn string und da steht "unsterblich" drin, nur leider zeigt er es nicht an.. sondern nur ein leeres feld |
Zitat:
|
Kleines Beispiel. Ich hoffe nicht zu spät.
|
sehr gut danke!
werd i heut abend glei ausprobieren |
Alle Zeitangaben in WEZ +2. Es ist jetzt 07:16 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag