Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hallo Leute!

Ich hoffe Ihr könnt mir bei meinem Problem weiterhelfen, ist wirklich dringend !

Folgendes :

Ich programmiere in Access (mittels VB) ein Formular, das folgendermaßen aussieht :

----------------------------------------------------

|

|

FELD1 | Feld2

|

|

----------------------------------------------------

Feld1 ist ein ActiveX - Treeview Objekt und Feld2 soll einfach eine Liste (nicht hierarchisch) darstellen. Das TreeView funktioniert auch wunderbar, ebenfalls wird die Liste dargestellt.

Ich möchte nun folgendes machen :

Ich möchte auf der linke Seite (treeview Feld1) ein Objekt makieren und dann auf der Liste (Feld2) ebenfalls ein oder mehrere Elemente makieren. Durch drücken eines Knopfes (noch

nicht vorhanden) soll nun ein ein Feld der Liste, die ID des makierten Elements von Feld1 hineingeschrieben werden (entweder in einen Satz, oder in mehrere, je nachdem wieviele makiert worden sind) !!

Bitte helft mir und sagt mir, wie ich das bewerkstelligen kann! Ich arbeite erst seit gestern mit VB und Access und morgen muss das funktionieren :(

Viele Dank für Eure Hilfe

Helpless2001

Geschrieben

Moin !

hmm hab ich das jetzt richtig verstanden,

Du willst in der Liste (Feld2) Einträge markieren, und dann mit dem Knopf in die dazugehörigen Datensätze den markierten Wert aus dem Treeview eintragen lassen ?

Das kannst Du über eine For Each .. Next Schleife lösen, in der Du die selektierten Zeilen der Liste durchgehst und dann mit einem Update den neuen Wert eintragen läst...

das sieht dann in etwa so aus:

For Each Selektion In feld2.ItemsSelected

DoCmd.RunSQL ("UPDATE Tabelle SET Inhalt = '" & Feld1.SelectedItem & "' WHERE ID = " & Feld2.ItemData(Selektion))

Next

Hoffe das hilft Dir weiter ! (wenn nicht einfach weiterfragen :) )

gruß

Christian

Geschrieben

Hi!

>hmm hab ich das jetzt richtig verstanden,

>Du willst in der Liste (Feld2) Einträge markieren, und dann mit dem Knopf in die >dazugehörigen Datensätze den markierten Wert aus dem Treeview eintragen lassen ?

Richtig !

In welcher Reihenfolge ist mir gleich ! Ich wähle EINEN Eintrag aus dem TreeviewControl (Feld1) aus und EINEN oder MEHRERE aus Feld2.

Jetzt muss er sich die ID vom ausgewählten Satz aus Feld1 merken und diese ID in ein Tabellenfeld der markierten Einträge aus Feld2 eintragen.

Ich bin wie gesagt ein blutiger Neuling (seit gestern nachmittag). Welchen Knopf muss ich denn auswählen und wie sage ich ihm das ?

Mit welcher Aktion mache ich das ? Könntest Du mir so eine Art doofie-Anleitung geben ?

Muss ich das mit einer Subform machen und ist es egal, wie ich Feld2 darstelle ?

Sorry, das ich mich so doof anstelle, aber das ist alles neuland :(

>Das kannst Du über eine For Each .. Next Schleife lösen, in der Du die selektierten Zeilen der >Liste durchgehst und dann mit einem Update den neuen Wert eintragen läst...

>

>das sieht dann in etwa so aus:

>

>For Each Selektion In feld2.ItemsSelected

>DoCmd.RunSQL ("UPDATE Tabelle SET Inhalt = '" & Feld1.SelectedItem & "' WHERE ID = " & >Feld2.ItemData(Selektion))

>Next

Danke

Helpless2001

Geschrieben

das hat nix mit Doof zutun.. behaupte nie das Du Doof bist, nur weil Du etwas (noch) nicht kannst ! No one was born running ;)

Jetzt zum Problem, ich geh mal davon aus, daß der Treeview und das Listenfeld sich schon im Formular befinden..

du legst Dir in dem Formular einen Knopf (Befehlschaltfläche) an und gehst in dessen Eigenschaften unter den Reiter "Ereignis". Dort ist eine Liste der ganzen möglichen Ereignisse. Hinter dem "Beim Klicken"-Ereignis wählst Du "[Ereignisprozedur]" aus und klickst die "..." Schaltfläche an. Jetzt landest Du im Code der ausgeführt wird, wenn dieser Knopf gedrückt wird.

Nun muss das Programm eine Schleife durchlaufen, für jede markierte Zeile in dem Listenfeld. Dafür gibt es den Befehl .SelectedItems, der gibt die Nummern der selektierten Zeile zurück. Dann musst Du ein Update ausführen (Du willst ja in den Datensätzen etwas ändern) auf die Datensätze die zu den markierten Zeilen gehören.

Als Wert musst Du dann den markierten Wert des Treeview eintragen lassen. Und dann wird die Schleife erneut durchlaufen.

Soviel zur Theorie, hier ein Beispiel:

--------------------Schnipp--------------------

Private Sub DerKnopf_Click()

Dim selElement As Variant

'Systemmeldungen ausschalten, sonst kommt bei jeder Datensatzänderung ein Hinweis

DoCmd.SetWarnings False

'hier wird die For Schleife für jede ausgewählte Zeile des Listenfeldes durchlaufen und in jedem Schritt selElement die Nummer der gerade aktuellen Zeile zugewiesen

For Each selElement In DasListenfeld.ItemsSelected

'hier wird der Update ausgeführt, mit dem markierten Feld des Treeviews als Wert und dem Wert der gerade aktuellen Zeile als Datensatz

DoCmd.RunSQL ("UPDATE DieTabelle SET Inhalt_Feld = " & DerTreeview.SelectedItem & " WHERE Feld1 = " & DasListenfeld.ItemData(selElement))

Next

'Systemmeldungen wieder ein

DoCmd.SetWarnings True

End Sub

--------------------Schnipp--------------------

hmm sorry das es so lang geworden ist, aber ich hoffe es ist jetzt klarer !

gruß

Christian

Geschrieben

Vielen Dank,

jetzt sieht es schon viel besser aus !!

Eine Sache habe ich aber noch.

Ich benutze kein "Listenfeld" sondern ein "Unterformular", wenn dessen Namen verwende,

funktioniert das aber leider nicht, sondern gibt ein "Methode oder Datenobjekt unbekannt" aus.

Kannst Du mir nochmal helfen ?

Danke

Helpless2001

Geschrieben

Ups, da wollte ich doch was mehr schreiben !

Ich brauche die Sortierfunktionen, die das Unterformular bietet, und gleichzeitig muss ich ja wissen, welche Elemente markiert wurden.

Die Infos aus Feld1 habe ich mittlerweile und kann sie auch in das Tabellenfeld schreiben!

Ich muss jetzt halt nur noch wissen, in felche Sätze!

So ein Mist ;)

Helpless2001

Geschrieben

hmm mit Unterformularen kann ich Dir leider auch nicht weiterhelfen, bin mir auch nicht so sicher ob man da so einfach abfragen kann, welche Zeilen markiert sind..

ich ging halt von einem Listenfeld aus, weil es da recht einfach ist mehrere Markierungen vorzunehmen und auszulesen.

Geschrieben

So, ich habe es jetzt mit einem Listenfeld gemacht und alles funktioniert wunderbar !

Jetzt hätte ich aber noch 2 Fragen an Dich ;)

1. Ich möchte gerne die 5 Spalten des Listenfeldes sortieren können (auf- / abwärts) und auch

per Knopf (außerhalb des Listenfeldes) das Listenfeld mit einer neuen SQL Abfrage füllen.

und zwar soll der knopf dann 4 zustände haben, die mittels select ... where feldname=zustand die liste neuladen

2. abhänig ob in einem feld der liste was steht, hätte ich gerne diesen satz farbig hervor gehoben.

Wenn Du mir auch damit noch helfen könntest, wäre ich der glücklichste und dankbarste Mensch auf der

Welt !

Vielen Dank

helpless2001

Geschrieben

so zu erstens hab ich was.. aber mit dem farbig hervorheben, weiss ich nicht, das geht denk ich nicht..

am einfachsten geht es denk ich, wenn Du Dir zwei "Optionsgruppen" in dem Formular erzeugst. Die eine hat dann vier Optionsfelder (die Zustände) und die andere zwei (die Sortierung).

Dann erzeugst Du bei beiden eine Ereignisprozedur "Nach Aktualisierung", damit auch was passiert, wenn man dran dreht..

In den beiden Prozeduren steht dann das selbe drinn, die Datensatzherkunft (RowSource) des Listenfeldes wird anhand der getroffenen Wahl geändert und dann die Daten neu eingelesen.

Hier mein Beispiel:

--------------------Schnipp--------------------

Dim Sortierung as String

'Die Optionsgruppe gibt eine Zahl zurück welcher Knopf gedrückt ist, die wird hier in die SQL Klausel für Auf- bzw. Abwärtssortierung umgewandelt

Select Case GruppeSortierung.Value

Case Is = 1

Sortierung = "asc"

Case Is = 2

Sortierung = "desc"

End Select

'Jetzt verpasst Du dem Listenfeld den neuen SQL-String, mit dem Zustand als Where-Klausel und der Sortierung hintendran

DasListenfeld.RowSource = "SELECT DISTINCTROW feld1, feld2, feld3, Zustand FROM Tabelle WHERE Zustand = " & GruppeZustand & " ORDER BY feld1 " & Sortierung

'und hier werden die Daten nach der Änderung der Herkunft neu eingelesen

DasListenfeld.Requery

--------------------Schnipp--------------------

Wenn die Zustände keine Zahlen sind, musst Du das dann ähnlich wie bei der Sortierung anhand der Zahl den passenden Zustand zuordnen.

  • 3 Wochen später...
Geschrieben

Hallo !

Jetzt habe ich noch eine Frage !

Mein Programm funktioniert jetzt eigentlicht richtig gut ! Bis auf eine Kleinigkeit :

Ich habe einen Filter der nur eine bestimmte (ausgewählte) Gruppe ausgibt, also alle Datensätze mit der Gruppe.

Wenn ich aber nun die Spaltensortiere nimmt er wieder alle Datensätze. ;(

Wie kriege ich es jetzt hin, dass er sich die Gruppe merkt ?

Vielen Dank

Helpless2001

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...