Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Checkbox liste aus relationaler Datenbank

Frage Microsoft Microsoft Office

Mitglied: Peak

Peak (Level 1) - Jetzt verbinden

14.04.2010 um 17:42 Uhr, 6495 Aufrufe, 10 Kommentare

Checkboxliste in einem Unterformular aus einer relationaler Datenbank erstellen, so dass sichtbar ist, welche Werte aktiv sind und welche nicht.

Hallo zusammen.

Folgende Situation:
Eine Accessdatenbank mit drei Tabellen die wie folgt aufgebaut sind.

tblAdresse (Tabelle für alle Adressen)
adr_ID
adr_Name
adr_ Vorname
adr_Strasse
adr_PLZ
....

tblGruppen (Gruppen, in die die adressen aus tblAdressen aufgeteilt werden können.
grp_ID
grp_Text

tblAdrGrp
FID_adr
FID_grp

Das Ziel der ganzen Übung ist, dass eine Adresse eingegeben kann, welcher dann noch Gruppen (Lieferant, Kunde,... ) zugeteilt werden können.

Als müsste ich eigentlich ein Formular für die Adresse haben. In dem Formular müsste dann ein Unterformular sein, mit den Gruppen. Und genau da komme ich nicht weiter.

Ich möchte, dass alle vorhanden Gruppen aus der tblGruppen als checkbox im Formular der Adresse sichtbar sind. Wenn eine vorhandene Adresse im Formular geöffnet wird, dann soll das Unterformular mit den Gruppen auch alle verfügbaren Gruppen anzeigen. Jedoch aber die Adresse/Gruppen kombinationen welche schon in der tblAdrGrp eingetragen sind, als checked markieren. Nur wie macht man das? Wäre toll, wenn mir da jemand weiter helfen könnte.

Ich hoffe, dass ich mich verständlich ausdrücken konnte und danke euch schon im Voraus,
Steff
Mitglied: Peak
15.04.2010 um 10:10 Uhr
Hmm. Ich weiss nicht ob es unverständlich war, was ich geschriben habe, oder ob wirklich bis jetzt niemand eine Lösung oder einen Lösungsansatz hat.

Falls etwas unklar sein sollte, werde ich gerne die Fragen beantworten.

Gruss,
Steff
Bitte warten ..
Mitglied: jato11
15.04.2010 um 13:12 Uhr
Hallo Steff,
ich bin mir nicht sicher, ob ich dich richtig verstanden habe.
Du willst in einer Tabelle Gruppennamen eintragen (grp_Text), das würde bedeuten du hast bei fünf Gruppen
auch fünf Datensätze.
Nun möchtest du für jede Gruppe ein Kontrollkästchen im Formular darstellen. Das geht nicht.

Du kannst für jede Gruppe in der Tabelle ein Feld (Kontrollkästchen) erstellen. Also bei fünf Gruppen auch fünf Felder.
Wenn dann eine weitere Gruppe dazu kommt muss die Tabelle, das Formular und evtl. die Abfrage angepasst werden.

Du kannst es auch mit einem Kobinationsfeld lösen. Damit bist du flexibel und kannst jederzeit im Formular Gruppen zufügen.
Der Nachteil ist wenn jemand in mehrere Gruppen eingtragen werden soll, dann brauchst du in der Gruppentabelle auch
mehrere Felder.

Viele Grüße
Torsten
Bitte warten ..
Mitglied: Peak
15.04.2010 um 13:24 Uhr
Hallo Torsten.

Danke erst mal für deine Antwort. Ich habe mir schon gedacht, dass das nicht ganz einfach werden wird. Meine Idee war folgende.

Ich mache ein Formular um die Adressen eingeben zu können, bzw. dann auch bearbeiten zu können. Das ist so weit ja noch nichts besonderes.
In diesem Adressformular wird dann ein Unterformular eingebunden. In diesem Unterformular werden, per VBA, aus der tblGrp alle Gruppen ausgelesen und, auch per VBA, eine Checkbox gemacht. Bevor diese Checkbox gemacht wird, muss in der tblAdrGrp überprüft werden, ob die Kombination adr_ID/grp_ID vorhanden ist. Wenn diese vorhanden ist, dann soll eine Checkbox gemacht werden, welche bereits selektiert ist. Wenn nicht, dann halt eine Checkbox die noch nicht ausgewählt ist.
In HTML und PHP wüsste ich wie ich das machen könnte. Aber leider nicht in Access. Zudem muss dann wahrscheinlich ja auch noch sicher gestellt werden, dass bei einer Änderung der Checkbox, die Änderung auch in die tblAdrGrp übertragen wird.

Deine Idee mit dem Kombinationsfeld ist sicherlich eine Überlegung wert. Das könnte dann auch per Unterformular eingebunden werden und dann könnte man auch mehrere Gruppen auswählen. Das Problem bei dieser Lösung ist halt, dass das Abwählen einer Gruppe nicht ganz so komfortabel ist wie mit Checkboxen.

Viele Grüsse
Steff
Bitte warten ..
Mitglied: jato11
15.04.2010 um 21:53 Uhr
Hallo Steff,
wenn es nur ein paar Gruppen wie Kunde, Lieferant, Privat, Geschäftlich o.ä. ist würde ich die Checkbox nehmen und
für jede Gruppe eine in der Tabelle erstellen. So mache ich es in meiner Kundenverwaltung.
Beim Kombinationsfeld kannst du eine Gruppe "Keine" erstellen und schon gehörst du keiner Gruppe an.
Das würde bei mir aber nicht vorkommen, denn in irgendeine Gruppe passen die Adressen immer.

Viele Grüße
Torsten
Bitte warten ..
Mitglied: Peak
17.04.2010 um 10:30 Uhr
Hallo Torsten,
Wie meinst du das mit den Checkboxen genau? Kannst du mir das ein bischen genauer erklären?

Vielen Dank,
Steff
Bitte warten ..
Mitglied: jato11
19.04.2010 um 12:01 Uhr
Wie meinst du das mit den Checkboxen genau? Kannst du mir das ein bischen genauer erklären?

Hallo Steff
In der Tabelle erstellt du ein ja/nein Feld fürt jede Gruppe (eins für Kunden und eins für Lieferanten usw.)

Wenn dein Formular als Datenquelle eine Abfrage hat musst du auch da die Felder übernehmen und
anschließend im Formular dann für jede Gruppe ein Kontrollkästchen erstellen.

Nun kannst du einer Person oder Firma eine Gruppe zuordnen, indem du einfach auf das Kästchen klickst.
Mehrfachauswahl ist natürlich möglich.

Wenn du eine Telefonliste o.ä. erstellen möchtest, trägst du in deiner Abfrage bei z.B. Kunden im Kriterium "-1" ein
Dann werden alle angezeigt die zur Gruppe Kunden gehören bzw. in dem Kästchen einen Haken haben

Viele Grüße
Torsten
Bitte warten ..
Mitglied: Peak
21.04.2010 um 10:20 Uhr
Gelöst :D

Nach langem überlegen und hin und her was und wie ich das nun machen soll, habe ich jetzt eine, bis jetzt funktionierende Lösung.

Als erstes wird die listbox mit den Daten aus der tblGroups gefüllt. Dann werden per VBA alle Einträge abgewählt. Dann wird für jeden eintrag überprüft ob die Kombination adr_ID / grp_ID in der Tabelle tblAdrGrp vorhanden ist. Wenn ja, dann als selected markieren.

Beim Wechsel auf den nächsten Datensatz werden zuerst alle Einträge in der tblAdrGrp mit der entsprechenden adr_ID gelöscht und anschliessend für jeden ausgewählten Eintrag in der Listbox einen neuen Eintrag in tblAdrGrp gemacht.

Das ganze scheint bis jetzt zu funktionieren.

Wenn jemand interesse am VBA Code haben sollte, werde ich den gerne zu Verfügung stellen.


Eine Frage habe ich dazu aber noch. Wenn ich nun auf den nächsten Datensatz wechsle und es im aktuellen Datensatz Änderungen gegeben hat, wird der Benutzer darauf aufmerksam gemacht, dass er Datensätze in der Tabelle löschen, bzw. hinzufügen möchte. Kann man dies irgend wie umgehen?

Danke viel mal
Gruss, Steff
Bitte warten ..
Mitglied: jato11
21.04.2010 um 10:32 Uhr
Prima
stell den Code ruhig hier rein, dann können andere das vielleicht auch nutzen.

Unter Optionen kannst du einstellen wann Access meckert.

Viele Grüße
Torsten
Bitte warten ..
Mitglied: Peak
21.04.2010 um 10:42 Uhr
Hier dann also noch den Code

Private Sub Form_AfterUpdate() 
    'MsgBox "after update" 
     
    'MsgBox "Form After Insert - adrID: " & Me.adr_ID 
 
    Dim rs As Recordset 
    Dim strSQL As String 
     
    'zuerst alle Einträge in tblAdresseAdrGroup mit der adr_FID löschen 
    strSQL = "DELETE * FROM tblAdresseAdrGroup WHERE adrAdrGrp_adr_FID = " & Me.adr_ID 
    DoCmd.RunSQL strSQL 
 
    'für jeden eintrag in der lstGrp prüfen, ob selektiert. Wenn ja, dann neuer eintrag in tblAdresseAdrGroup 
    For i = 0 To Me.lstGrp.ListCount - 1 
        'MsgBox lstGrp.Column(0, i) & " - " & lstGrp.Selected(i) '-1 = selected / 0 = unselected 
 
        If lstGrp.Selected(i) = -1 Then 
            'MsgBox "Selected: " & lstGrp.Column(0, i) & " - " & lstGrp.Column(1, i) 
            strSQL = "INSERT INTO tblAdresseAdrGroup (adrAdrGrp_adr_FID, adrAdrGrp_adrGrp_FID) VALUES (" & Me.adr_ID & ", " & Me.lstGrp.Column(0, i) & ")" 
            DoCmd.RunSQL strSQL 
        End If 
 
 
    Next i 
End Sub 
 
Private Sub Form_BeforeUpdate(Cancel As Integer) 
    'wenn etwas geändert hat, wird adr_LastChange auf jetzt gesetzt 
    Me.adr_LastChange.Value = DateValue(Now) & " " & TimeValue(Now) 
End Sub 
 
Private Sub Form_Current() 
    'Me.adr_LastChange.Value = DateValue(Now) & " " & TimeValue(Now) 
     
    Dim rs As Recordset 
    Dim strSQL As String 
     
    'Alle Elemente in der Listbox deaktivieren 
    For i = 0 To lstGrp.ListCount - 1 
        lstGrp.Selected(i) = False 
    Next i 
     
    'Auslesen der kombis die in Ausgleichstabelle tblAdresseAdrGroup sind 
    If adr_ID <> "" Then 
        strSQL = "SELECT * FROM tblAdresseAdrGroup WHERE adrAdrGrp_adr_FID = " & Me.adr_ID 
        Set rs = CurrentDb.OpenRecordset(strSQL, dbOpenDynaset) 
         
        'Vorselektion der bereits ausgewählten Gruppen 
        Do While Not rs.EOF 
             
            For i = 0 To lstGrp.ListCount - 1 
                Dim lstGrpIndex As Integer 
                Dim adrGrpFID As Integer 
                 
                lstGrpIndex = Me.lstGrp.Column(0, i) 
                adrGrpFID = rs!adrAdrGrp_adrGrp_FID 
                 
                If lstGrpIndex = adrGrpFID Then 
                    Me.lstGrp.Selected(i) = True 
                End If 
                 
            Next i 
             
            rs.MoveNext 
        Loop 
         
        rs.Close 
        Set rs = Nothing 
    End If 
End Sub 
 
Private Sub lstGrp_Click() 
    'wenn in lstGrp etwas geändert wird, dann wird LastChange auf jetzt gesetzt 
    Me.adr_LastChange.Value = DateValue(Now) & " " & TimeValue(Now) 
End Sub
Bitte warten ..
Mitglied: NetWolf
21.04.2010 um 18:25 Uhr
Hallo,

ja kann man, schau dir mal die Grundeinstellungen von Access genau an. Genauere Hinweise leider nicht möglich, da du deine Version nicht mit angegeben hast.

Dein Problem hätte ich z.B. binär gelöst
Du speicherst den aktuellen Stand der Checkboxen in ein zusätzliches Feld pro Adresse z.B. mit den Werten : 010101
1 = gesetzt
0 = nicht gesetzt
über die MID Funktion ausgelesen, fertig.


Grüße aus Rostock
Wolfgang
(Netwolf)
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Datenbanken
Access Checkbox mit Kombifeld und dann filtern

Frage von atomas42 zum Thema Datenbanken ...

Exchange Server
Exchange 2007 Datenbank restore ohne Exchange zu verändern - SBS2008

Frage von pitamerica zum Thema Exchange Server ...

Datenbanken
Datenbank API Automation

Link von Frank zum Thema Datenbanken ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (20)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Festplatten, SSD, Raid
M.2 SSD wird nicht erkannt (14)

Frage von uridium69 zum Thema Festplatten, SSD, Raid ...