[Access-Gui] Ein- und Ausklappbares Unterformular

dmncstmpfl

Lt. Commander
Registriert
Dez. 2003
Beiträge
1.348
Hallo Zusammen

Ich mache gerade für einen Schulauftrag ein Gui für ne DB in Access.

Habe zwei Hauptformulare. Diese kann man per Registerkarten im Startformular anwählen.

In den Hauptformularen sind ein paar Kombinationsfelder. Diese sollte der User auch editieren können, da es unter umständen seine Einträge noch nicht hat.

Nun möchte ich das so lösen, das man neben den Kombinationsfeldern auf das + klicken kann, uns sich unter dem Kombfeld ein Unterformular öffnet, wo man dann den fehlenden Eintrag erfassen kann.

Leider habe ich nicht grosse Ahnung von VB. Kann mir da jemand helfen?

Im Anhang ist erstens mal ein Screenshot des jetztigen Formulares und zweitens ein bearbeitetes Bild, wie es dann in etwa aussehen soll. (ist zusammengeschnitten) höchstwahrscheinlich braucht es dann noch einen Speichern-Button damit der Eintrag dann auch im Kombinationsfeld erscheint.
 

Anhänge

  • db01.jpg
    db01.jpg
    15,3 KB · Aufrufe: 481
  • db02.jpg
    db02.jpg
    19,1 KB · Aufrufe: 461
Zuletzt bearbeitet:
oke hab jetzt rausgefunden wie ich das Unterformular auf Knopfdruck ein- und ausblenden kann:

Code:
Select Case add_per_id
  Case True: Me.[ufo].Visible = True
  Case False: Me.[ufo].Visible = False
  End Select

jetzt habe ich es so, dass das aufpoppende Formular über die anderen Felder kommt. Jetzt könnte ich ja mit einer if schlaufe die restlichen Felder bei Case True nach unten verschieben, um die grösse des Unterfromulares.

Welche Variable muss ich da verändern? oder kann ich mit Move arbeiten?

Am besten währe für mich ein code-Beispiel da ich VB noch nicht so gut kann.

Vielen Dank ;)
 
moin,

warum nicht direkt in die Combo eingeben lassen, und wenn er Enter drückt an die Liste anhängen?
Code:
Private Sub Combo1_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = 13 Then
    Combo1.AddItem Combo1.Text
    Combo1.Text = ""
End If
End Sub
 
schreibt es das dann auch in die Tabelle rein? funktioniert irgendwie nicht

Combo1 ist ja der name des Kombinationsfeldes nicht?

Wenn ich den Code so einsezte kommt bei mir der Fehler "das von ihnen eingegebene objekt ist kein Element der liste..."
 
was für ein Code denn? Das ist "nur" ein Kombinationsfeld welches seine Einträge aus einer Tabelle holt.
 
ah so meinst du das. ;)

möchte dann eigentlich das Formular nicht mehr anzeigen:

zuerst wollte ich es ja so: Kombinationsfeld mit Button neben dran, damit man fehlende Eintäge im Kombinationsfeld gleich in einem erscheinenden Formular hinzufügen konnte.

Jetzt, wo ich weiss das man das kann: Kombinationsfeld wo man einerseits einen Eintrag auswählen kann oder einen fehlenden direkt in das Kombinationsfeld eintragen kann. Enter oder was auch immer und der Eintrag ist dann in der Tabelle / im Kombinationsfeld gespreichert.
 
hmmm, geht schlecht, da die Tabellen von einer mysql-db sind. aber in der Entwurfsansicht lassen sich die Forumlare ja öffenen. Dann sollte es rein vom Code her ja gehen...

Als Beispielkombinationsfeld kannst bez_id (Bezeichnung) im Formular form_tel nehmen.

http://www.neon-mirkwood.net/data/db_tel_ohnedaten.zip

/edit
noch ne andere Frage (wahrscheinlich nicht die Letzte :p): Ich habe ja Registerkarten. Mit welchem Code kann ich per Knopfdruck auf eine bestimmte Registerkarte springen?
 
Zuletzt bearbeitet:
moin,

entweder im Form Load oder auf den Button Click diesen Code nutzen:
Code:
Private Sub Form_Load()
    Telefone.SetFocus
End Sub
und hier der für die Combo:
Code:
Private Sub bez_id_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = 13 Then
    ' so ungefähr
     Call DoCmd.RunSQL("Insert Into <deine Tabelle> (bezeichnung,typ,verbindungsart,...) Values ('" & bez_id.Text & "',....)")
End If
End Sub
sorry ist normales SQL das von Access kann ich nicht ;)
 
Zuletzt bearbeitet:
danke vielmals, werde das gleich mal versuchen ;)
 
Zuletzt bearbeitet:
hatte bis jetzt no keine Zeit ;) bin hier in der IT-Abteilung. Kommen immer wieder neue Sachen rein. Und die DB hat im Moment noch keine allzu grosse Priorität ;)

aber bis heute abend wird sich schon noch Zeit finden.
 
Ok, folgendermassen:

Habe jetzt den Code, natürlich mit den richtigen Zellennamen etc genau so eingefügt.
Wenn ich jetzt versuche, direkt im Kombinationsfeld einen neuen Eintrag zu machen, kommen folgende fehlermeldungen:
1. "sie beabsichtigen einen neuen datensatz hinzuzufügen....sind sie sicher? ja / nein
das ist schon mal gut, aber die fehlermeldung müsste man natürlich unterbinden, oder anpassen können.

2. wenn ich auf JA klicke: "Das element ist kein element der liste"

wenn ich aber anschliessend in die tabelle schau, sehe ich, das der neue Eintrag erfasst wurde.

Ich denke es ist noch ein aktualisierungs-problem, welches ich auch bei den normalen Formularen habe. Wenn ich in einem Formular einen neuen Eintrag machen will, kann ich das machen, muss aber dann aktualisieren damit der neue eintrag dann auch angezeigt wird. Man kann also eingeben, es schreibt es in die tabelle, aber wenn ich den datensatz dann nochmals ansehen will, steht da nur in jedem Fald "#gelöscht".

Wenn ich anschliessend aber gleich aktualisiere, ist der eintrag drin.

Denke, bin mir ziemlich sicher, das es mit der MySQL datenbank zusammenhängt.

Die Tabellen sind ja wie gesagt alle nur verknüpft.
 
ich würde wenn ich di wäre das ganze nicht auf Access-Basis löen, sondern gleich mit einem VB Projekt mit ADO, ist erstens schneller und man hat mehr Manipulationsmöglichkeiten. Bei der jetzigen Größe des Projektes müsste das in 1-2 Stunden erledigt sein.

Wenn ich dir Sample Code für VB geben soll musst du es sagen.

Ach ja zu deinem Problem, du kannst mal probieren den Datensatz mit den Access Bordmitteln hinzuzufügen, ob das dann besser geht.
 
Zuletzt bearbeitet:
tja, das ist das Problem über da ich mich seit anbeginn dieses Projektes aufrege:

Ich bin noch in der Ausbildung und somit auch noch in der Berufsschule. Von dort kommt auch der Auftrag: Eine MySQL DB via ODBC-Treiber ins Access reinverknüpfen, um dort dann ein GUI zu erstellen.
Das die Kurzfassung des Auftrages.

Thema konnte man selber wählen oder im Betrieb nachfragen. Ich habe natürlich gleich nachgefragt und die geben mir dieses Telefonverwaltungs-Projekt. Auch sie fragten mich, ob ich das nicht direkt mit VB / PHP / C oder sonstwas lösen will, da nur für ein Gui Access zu gebrauchen nicht sehr schlau sei.

Doch der Auftrag schreibt es leider vor :(

Ich muss jetzt, für die Schule, diese Gui in Access machen. Anschliessend muss ich dann das Gui nochmals für den produktiven Gebrauch in der Firma machen, diesmal als alleinstehende applikation.

"freude herrscht" um unseren einstigen Bundesratspräsidenten zu zitieren :)

/edit:
halt ich muss mich noch von oben korrigieren:
Der neue Datensatz erscheint auch nicht nach Aktualisiere, Speichern oder sonst was. Es muss zwingend ein schliessen und wiederöffnen des Formulares her.
 
Zuletzt bearbeitet:
Hi,

der code für das keydown event:
Code:
Dim strSQL As String
If KeyCode = 13 Then
    strSQL = "insert into MAZ_P_T_SYSLOGS tp (tp.CONTID,tp.APPLICATION,tp.EVENT,tp.REGULAR,tp.DATETIME) Values " & _
                 "(16683,'test','test','true',sysdate)"
    Debug.Print strSQL
    DoCmd.RunSQL (strSQL)
    
    Kombinationsfeld0.Requery
End If
und bei der Combo "Nur Listeneinträge" auf nein

Das Statement musst du noch auf dein system anpassen, irgendwas mag er bei mir nicht
 
also, habe jetzt diesen code eingefügt:
Code:
Private Sub bez_id_KeyDown(KeyCode As Integer, Shift As Integer)
 
 	Dim strSQL As String
 		If KeyCode = 13 Then
 		    strSQL = "Insert Into tbl_bez (bez_name) Values ('" & bez_id.Text & "')"
 		Debug.Print strSQL
 		DoCmd.RunSQL (strSQL)
 	
 	Me.bez_id.Requery
 
 End If
 End Sub

Die Option "nur listeneinträge" kann ich nicht auf Nein stellen. Es kommt der Fehler das ich zuerst die Spaltenbreite anpassen müsse. Das kommt wohl davon, dass ich eigentlich 2 Spalten im Kombi-feld habe. Die IDs und den Namen. Die IDs brauche ich, damit es mir nur die in die Tabelle schreibt.

Habe jetzt das mal belassen, und denn Code mal ausprobiert:

Es erscheint die "Datensatz hinzufügen" - Warnung. Danach gibt es einen Code-Fehler.

Es verlangt, das ich das Formular zuerst Speichere bevor ich es refreshe. Sollte wohl kein Problem sein, oder? Brauche nur den Code fürs Speicher davor zu setzen.
 
weiss niemand wie ich das Formular vor dem "Me.bez_id.Requery" speichern kann?
 
Zurück
Oben