PDA

Vollständige Version anzeigen : Bezug in Suchfeld herstellen


JB2012
30.05.2012, 08:51
Ich möchte meine DB mal wieder etwas komfortabler gestalten.
Im Formular "Gigs" werden mir in der Songliste alle verfügbaren Songs angezeigt.
Ich möchte nun, daß abgegrenzt wird, um welche Band es sich überhaupt handelt (steht ja im Formular) und daß nur aktive, bzw. in Planung befindliche Songs für diese Band zur Auswahl stehen.
Zum besseren Verständnis habe ich mal 2 Screenshots angefügt.

Thomas Möller
30.05.2012, 09:34
Hallo!

Zum besseren Verständnis habe ich mal 2 Screenshots angefügt.

Danke für den Screenshot. Er zeigt mir, dass Dein Datenmodell noch nicht richtig ist. So wie Du es programmierst, musst Du für jede weitere Band ein Feld in Deiner Tabelle hinzufügen. Das ist nicht der richtige Weg.

Mein Vorschlag ist, dass Du Dir für den Anfang die Grundlagen der Datenmodellierung anschaust. Einen guten Einstieg in das Thema findest Du hier:
http://www.access-tutorial.de/tabellen/normalformen.htm

Am Ende solltest Du Dein Datenmodell überarbeiten. IMHO solltest Du mindestens vier Tabellen haben.

Als erstes eine Tabelle mit den Bands. Hier speicherst Du alle Informationen, die eine Band ausmachen, z.B. den Namen, das Gründungsjahr usw.

Als zweitest erstellst Du Dir eine Tabelle mit den verschiedenen Status (der Plural von Status ist nicht Stati (http://schreibweise.org/status-stati)), die ein Song haben kann, z.B. geplant, aktiv, nicht mehr aktiv usw.

Als drittest brauchst Du noch eine Tabelle mit den verschiedenen Songs. Hierin speicherst Du alle Informationen, die einen Song ausmachen, z. B. Titel, Interpret, Erscheinungsjahr, etc.

Als vierts legst Du dann eine Tabelle an, in der Du zu jeder Band für jeden Song des Status speicherst. In dieser Tabelle brauchst Du mindestens drei Felder. Das sind jeweils die Primärschlüssel aus den drei erstgenannten Tabellen.

Mit einem solchen Datenmodell bist Du wesentlich flexibler. Wenn später Songs, Status oder Bands hinzukommen, brauchst Du nur neue Datensätze anlegen. An den Feldern der Tabellen ändert sicht nichts.

HTH

Atrus2711
30.05.2012, 09:41
Hallo Thomas,

ist alles schon durch:
http://www.ms-office-forum.de/forum/showthread.php?t=289255

Thomas Möller
30.05.2012, 09:46
Hallo Martin,

ist alles schon durch:

aber es scheint sich noch nicht gefestigt zu haben. ;)

CU

Atrus2711
30.05.2012, 09:47
@JE:
Im "monströsen" Strang von damals (siehe mein Link) ist irgendwo der Abruf der Setlist der aktuellen Band implementiert. Den müssest du doch nutzen oder zumindest variieren können.

JB2012
30.05.2012, 11:46
ich hatte gehofft, daß die Struktur passt
jetzt muß ich das doch wieder anpassen :-((
mal sehen ob ich das so ohne weiteres hinbekomme
auf jeden Fall habe ich die Erklärung von Thomas verstanden und sie erscheint mir auch logisch

Atrus2711
30.05.2012, 12:05
Hi,

auch wir zwei hatten das alles schon durch... du hörst das nicht zum ersten Mal.

Aber du bist ja auch noch nicht verloren. Hast du meine Antwort von heute morgen (30.05.2012 10:47) übersehen, oder gab es dabei Probleme? Wenn ja, welche?

JB2012
30.05.2012, 12:13
Deine Antwort hatte ich schon gelesen, bin aber jetzt schon wieder durch Thomas' Aussage irritiert, daß diue Struktur noch anzupassen ist

Du meinst sicher diesen Code?: Private Sub Befehl30_Click()
CurrentDb.Execute "INSERT INTO t_Setlist (Gig, Song, Reihenfolge) " _
& "SELECT " & Me.ID & ", SongID, Reihenfolge " _
& "FROM t_songs " _
& "WHERE (" & Me.Band & " = 1 AND Band1 = 1) OR " _
& "(" & Me.Band & " = 2 AND Band2 = 1)", dbFailOnError
Me.Untergeordnet27.Requery
End Sub

Atrus2711
30.05.2012, 12:22
Genau.

Schau dir die WHERE-Klausel in dieser SQL mal genau an, am besten für eine konkrete Band (sagen wir 1).

Ahnst du, wie die Band und der Aktiv-Status da reingebaut werden müssten?

JB2012
30.05.2012, 12:42
Ehrlich gesagt nicht
ich kann SQL Selects eigentlich schon lesen, zumindest wenn sie so aufgebaut sind:
SELECT Feld1, Feld12, Feld33 FROM tbltest1 WHERE Feld1 IN (1) ORDER BY Feld33
In diesem Code irritiert mich schonmal das "Me"

jetzt hab ich gerade nochmal u.a Code ausprobiert - läuft der net glatt auf einen Fehler... :(
Laufzeitfehler 3061
1 Parameter wurden erwartet, aber es wurden zu wenig Parameter übergeben

Es ist zum Verrücktwerden

Atrus2711
30.05.2012, 12:56
Der bisherige Code
CurrentDb.Execute "INSERT INTO t_Setlist (Gig, Song, Reihenfolge) " _
& "SELECT " & Me.ID & ", SongID, Reihenfolge " _
& "FROM t_songs " _
& "WHERE (" & Me.Band & " = 1 AND Band1 = 1) OR " _
& "(" & Me.Band & " = 2 AND Band2 = 1)", dbFailOnError
"wird" beim Ausführen an den Me...-Stellen mit Werten aus dem aktuellen Formular bestückt. Der aktuelle Gig und die aktuelle Band sind ja nur (!) im Formular ersichtlich.

Und was das Kriterium angeht: bisher testet das Kriterium zwei Fälle ab:

Ist die aktuelle Band = 1 und ist das Lied für Band1 aktiv (=1)
oder
Ist die aktuelle Band = 2 und ist das Lied für Band2 aktiv (=1)

Wenn nun statt der aktiven Songs auch die geplanten Songs der Band verfügbar sein sollen, dann wären das:
'...
& "WHERE (" & Me.Band & " = 1 AND Band1 IN (1,2)) OR " _
& "(" & Me.Band & " = 2 AND Band2 IN (1,2))", dbFailOnError[/CODE]
Dabei stehen die IN (1,2) für: der Wert von Band1 bzw. Band2 muss 1 oder 2 sein. 1 = aktiv, 2 = geplant.

JB2012
30.05.2012, 13:41
erstmal kommt ja leider dieser Fehler 3061

Atrus2711
30.05.2012, 13:42
Dann lad mal den aktuellen Stand hoch. Damals hats ja noch geklappt :p

Der 3061 kommt gerne

wenn die Feldnamen nicht stimmen
wenn die Feldnamen nicht (mehr) eindeutig sind, etwa weil andere Tabellen in der Datenquelle eingebaut wurden
wenn die Feldnamen Leerzeichen, Bindestriche o.ä. enthalten, wodurch der Feldname "getrennt" wird. Solche Namen meiden oder eckig einklammern.

JB2012
30.05.2012, 13:51
bin gespannt was ich jetzt schon wieder verbockt hab :-(

Atrus2711
30.05.2012, 14:03
Die Reihenfolge fehlt in den Songs. Nimm sie aus der SQL raus, damit man die später manuell nachtragen kann.

Wie hab ich das rausgefunden? Die entstehende SQL in eine neue Abfrage kopiert, dort auf die Fehlermeldung gelauert und geschaut, wo der Feldname als Ausdr1 bezeichnet wird.

Und, nochwas: die Statuswerte sind 1 und 3 statt 1 und 2. Mea culpa.

JB2012
30.05.2012, 14:13
Hab die Reihenfolge rausgenommen - jetzt klappt's
Weiß allerdings nicht warum es vorher geklappt hat, denn eine Reihenfolge gibt es zu diesem Zeitpunkt ja noch nicht...

Was mir bei dem Code auffällt: wird da der echte Bandname abgefragt?
& "WHERE (" & Me.Band & " = 1 AND Band1 IN (1,2)) OR " _
& "(" & Me.Band & " = 2 AND Band2 IN (1,2))", dbFailOnError
Was wenn die nun umbenannt werden?

JB2012
30.05.2012, 14:21
jetzt sehe ich's selber - es werden die Feldnamen abgefragt

Atrus2711
30.05.2012, 14:24
Das ist alles SQL, da werden die Feldnamen genutzt, die in den Tabellen stehen. Band1 ist die Spalte der tblSongs, die den Wert "Songstatus dieses Songs für Band1" enthält. Ich hätte sie ja "StatusInBand1" genannt oder noch besser ganz ausgelagert... Aber der Feldname ist Band1. Wie die Band1 nun heißt ist, dem wurscht.

PS: Der Grollgnom in mir sagt: Du hast die Felder so benannt. Du wurdest gewarnt... schon damals. Nun friss es auch ;) :p :)

denn eine Reihenfolge gibt es zu diesem Zeitpunkt ja noch nicht...
War da nicht mal angedacht, eine Reihenfolge einzubauen, die dann bei Einspielen in die Setlist "hinten anschließt"?

JB2012
30.05.2012, 14:31
…oder noch besser ganz ausgelagert...

Jaja - ich sehe es ein
War "Suboptimal", aber strukturell hoffentlich der einzige "Fehler" der noch drinsteckt

War da nicht mal angedacht, eine Reihenfolge einzubauen, die dann bei Einspielen in die Setlist "hinten anschließt"?
Ja schon; wahrscheinlich hab ich vorher immer getestet wenn bereits Einträge drin waren. Führe ich die Funktion jetzt aus, dann setzt er die eingespielten an den Anfang :-(
Schön wäre es, wenn er selbstständig durchnummeriert und die somit dann auch hinten anfügt, aber da simmer schon wieder beim "schöner wohnen"

Atrus2711
30.05.2012, 14:52
Es gibt aber bisher keine "Normal-Reihenfolge". In welcher Reihenfolge sollen die relevanten Songs reinkommen, wenn du sie per Button reinholst?

JB2012
30.05.2012, 14:57
…so wie sie jetzt auch kommen - ich vermute nach ID aufsteigend
man muß die eh individuell sortieren, denn das variiert ja von Gig zu Gig;
wobei mir da schon wieder ein "Nice-To-Have" einfiele: Könnte man die Setlist eines beliebigen Gigs nicht auch kopieren?
Wir haben gerade nämlich diese Situation: die Setlist des kommenden Gigs basiert auf der des letzten (nur 3-4 Änderungen)

Atrus2711
30.05.2012, 15:07
man muß die eh individuell sortieren
Dann würde ich die Abfolge eh nicht durch Eintragen von Nummern regeln. Das wird bei größeren Umstellungen richtig eklig. Besser: Verschieben per Maus. Da bieten sich z.B. Listviews oder Treeviews an, Demo siehe Codearchiv, oder (einfacher) "Rauf- und Runter-Buttons", die den Song durchschieben.

Eine Standard-Abfolge hat dann auch wenig Sinn.

wobei mir da schon wieder ein "Nice-To-Have" einfiele: Könnte man die Setlist eines beliebigen Gigs nicht auch kopieren?
Klar. Bau dir ein Kombi, das die auswählbaren Gigs anbietet. Auf Buttonklick o.ä. wird dann die Setlist von damals in den aktuellen Gig kopiert, etwa so:
INSERT INTO Setlist (Gig, Song, Reihenfolge)
SELECT AktuelleGigNr, Song, Reihenfolge
FROM Setlist
WHERE Gig = QuellGigNrAusKombo
Die fetten Teile nimmst du aus den aktuellen Formularwerten, die restlichen sind Tabellenfelder der Ziel- bzw. Quelltabelle.

JB2012
30.05.2012, 15:39
Klar. Bau dir ein Kombi, das die auswählbaren Gigs anbietet.

ach so - na wenn's weiter nichts ist :(

Kann man Dich nicht buchen?:grins:

Atrus2711
30.05.2012, 15:43
Kombis hast du doch auch jetzt schon gebaut?!

JB2012
30.05.2012, 15:49
ja - aber wo soll das denn hin?
Ich bräuchte doch erstmal einen Button "Setlist kopieren", der nach Klick auf selbigen diese Kombi zum auswählen öffnet.
Habe gerade ein Problem mir das vorzustellen

Du siehst es bereits vor Dir, ich sehe lediglich drei Fragezeichen

Atrus2711
30.05.2012, 15:53
Kombi für Quellgig und Button zum Kopieren könnten einfach im Form drinstehen.

Atrus2711
30.05.2012, 15:54
Und der Code dazu:
CurrentDb.Execute "INSERT INTO t_setlist (Gig, Song, Reihenfolge) " _
& "SELECT " & Me.ID & " , Song, Reihenfolge " _
& "FROM t_setlist " _
& "WHERE Gig = " & Me.cboQuellGig, dbFailOnError
Me.Requery

JB2012
31.05.2012, 11:24
bei mir zeigt er schonmal nur das Datum an, obwohl ich alle relevanten Felder im SQL Statement drinhabe
Access tickt eindeutig anders als ich :mad:

maikek
31.05.2012, 11:28
Moin,
hast du dem Kombifeld selbst (Eigenschaften/Format) auch gesagt, dass es X Spalten hat und wie breit die jeweils dargestellt werden sollen?
maike

Atrus2711
31.05.2012, 11:38
Und die Eigenschaft Listenbreite wäre auch noch wichtig, da die aufgeklappte Liste sonst nicht breit genug wird, um alle x Spalten zu zeigen.

JB2012
31.05.2012, 11:43
Vielen Dank Euch beiden!
Ich hätte jetzt schon erwartet, daß alles aus dem Statement auch dargestellt wird.
So klappt's prima
Ich mach mich jetzt mal an den Code...

Atrus2711
31.05.2012, 11:48
Hier eine Übersicht, die ich auch in meinen Kursen als Grobüberblick aushändige.

JB2012
31.05.2012, 11:56
wie sollte es auch anders sein :weinen:

Atrus2711
31.05.2012, 12:55
Das Formular-Textfeld, das die Gignr darstellt, heißt offenbar nicht mehr ID. Such es, markiers, merke dir den Namen und trag anstelle von Me.ID eben Me.NameDeinesTextfelds ein.

Tipp: wenn due Me. eingibst, müsste die Liste der EIgenschaften und Controls des Formulars aufklappen. Vielleicht findest du dein Control da schon.

JB2012
31.05.2012, 13:12
es heißt aber schon ID :entsetzt:

Atrus2711
31.05.2012, 13:15
Das Bild gibt diese Aussage nicht her.

Das Textfeld ist zwar an das Tabellenfeld ID gebunden, aber es kann (und sollte) nicht so heißen. Den Namen eines Objekts erfährst du nur aus seiner Eigenschaft Name. Was steht da drin für das Vieh?

Eine Namenskonvention empfiehlt, dass sich Tabellen- und Formularcontrols im Namen "herleiten" lassen. Das Formulartextfeld zum Tabellenfeld Gigdatum sollte nicht ebenfalls Gigdatum, sondern txtGigdatum heißen. Dann bleiben einem solche Überraschungen erspart.

JB2012
31.05.2012, 13:19
es steht auch wirklich ID drin - ich geb's auf
scheiß auf schöner wohnen

Atrus2711
31.05.2012, 13:34
Durchhalten! Hochladen! :)

JB2012
31.05.2012, 13:49
Sorry, aber es frustet mich schon

Atrus2711
31.05.2012, 14:05
Das Problem lag nicht bei der ID.
Dein Kombi für den Quellgig heißt bei dir nicht cboQuellGig, sondern Kombinationsfeld44 :eek: . Im Code, den du von mir kopiert hast, wird dann diese Kombi als nicht vorhanden bemängelt. Die Meldung mit der ID ist irreführend, das geb ich zu.
Das QuellGig-Kombi enhält zwar mehrere Spalten, aber nicht die, die für die SQL wichtig wäre: die ID des Quellgigs. Die habe ich als 5. Spalte zugefügt und lese nun beim Abrufen diese Spalte aus. Dann tuts.


Tipps:

Benenne deine Teile sauber! Kombi44 ist ein Sch...name! Das ist lästige Arbeit, aber sie hilft.
Nimm alle Spalten in Kombis auf, die du brauchen kannst. Nicht nur die, die du sehen willst. Über die Columns-Mechanik kannst du in VBA auf die unsichtbaren Spalten "schielen" und so ausnutzen.

JB2012
31.05.2012, 14:33
Also die Benamung ist scheinbar für VBA-Zeugs dann schon sehr wichtig;
angekommen

Jetzt funktioniert's, ABER es gibt doch einige unschöne Eigenheiten
- Nachdem die Aktion ausgeführt wurde, springt er zurück auf den ersten Datensatz; er sollte schon auf dem aktuellen bleiben
- Das Datum des gewählten QuellGigs bleibt stehen - das Feld sollte wieder gellert werden
- Es sollten nur die Gigs der Band angezeigt werden, die im Kopf ausgewählt wurde

Eine Baustelle geschlossen - 3 neue geöffnet
Nicht zu glauben...

Atrus2711
31.05.2012, 14:45
Wenn du mit deinen unzureichenden Kenntnissen und den kostenlos erbrachten Diensten der Community unzufrieden bist, steht es dir frei, einen Auftrag in der Jobbörse zu erteilen. :rolleyes:

JB2012
31.05.2012, 15:06
hab ja gestern schon gefragt ob man Dich buchen kann ;)

Nein ich bin nicht unzufrieden - ganz im Gegenteil.
Bin sehr froh und dankbar über Eure Hilfe
Ich hätte mir das nur wesentlich einfacher vorgestellt
Das Handling mit den Objekten innerhalb Acces, sowie die SQL Statements sind
ja auch noch nachvollziehbar; aber wenn es an dieses VBA Zeugs geht da kommt
dann ganz schnell meine Ungeduld, weil ich da nichts aber auch gar nichts verstehe

Thomas Möller
31.05.2012, 16:42
Hallo!

Also die Benamung ist scheinbar für VBA-Zeugs dann schon sehr wichtig;

Ich habe diesen Hinweis nicht umsonst veröffentlicht: ;)
http://www.team-moeller.de/?Tipps_und_Tricks:Regeln_und_Hinweise_fuer_gutes_VBA:Steuerelemente_aussagekraef tig_benamsen

CU

Atrus2711
01.06.2012, 08:22
Hi,

VBA automatisiert. Mir persönlich fällt es schwer, Dinge zu automatisieren, die ich nicht auch manuell tun könnte (wenn auch natürlich langsamer und "einzeln" statt massenhaft). Wenn ich also nicht weiß, was wann zu tun ist, kann ich auch kein Programm drüber schreiben. Mir scheint, du traust VBA zu viel zu. VBA kann nicht zaubern oder hellsehen. Wenn du kein Bild hast, was jetzt passieren müsste, kann VBA dir nicht helfen. Um z.B. den gewünschten Ablauf - Quellgig auswählen, um dessen Songs zu übernehmen - zu schreiben, brauchst du erstmal ein Bild vor Augen. Darum habe ich dir auch nicht gleich die Lösung, sondern erstmal nur ein Bild dazu gegeben. Wenn das Bild da ist, kann man daran gehen, es Schritt für Schritt aufzubauen:

Kombifeld einrichten: Datenquelle (Gigs), gewünschte Spalten (mehrere!).
Auf eine "konkrete" Gigauswahl reagieren: Das Kombi soll zunächst "fest" den Gig 16 in den Gig 27 übertragen. Das ist einfacher, weil du da konstante Werte hast und eine Abfrage aufbauen kannst, die das für dich macht. Deren SQL testest du sorgfältig. Für diesen Schritt brauchst du eigentlich kein Formular, sondern nur die Tabellen und eine Abfrage.
Die Gigauswahl parametrisieren: Da nicht immer Gig 16 in Gig 27 kommen soll (und das Kombi auch so keinen Sinn hätte), wird die SQL aus dem vorigen Schritt an den relevanten Stellen parametrisiert, d.h. mit den aktuellen Feldwerten bestückt. Statt 16 und 27 kommen dann eben Zielgig und Quellgig rein - indem du sie aus dem Formular ausliest.


Du willst zu viel auf einmal. Auch von dir selbst.

JB2012
01.06.2012, 09:45
Ich weiß eigentlich schon ganz genau was passieren soll, bzw. welch aufwändige, manuelle Arbeit durch Automatisierung abgelöst werden soll.
Band stellt fest, daß die Songs des neuen Gigs (#27) zum Großteil aus dem Songmaterial aus Gig #16 bestehen soll.
Ich lege Gig #27 an und fülle den Kopf mit den relevanten Daten
nun gibt es 2 Möglichkeiten:
- Ich drucke mir Gig #16 aus und befülle Gig #27 mit diesen Werten
- Ich schaffe einen Automatismus, der sich aus der DB die Songs des Gig #16 holt.
Notwendig dafür ist das mehrspaltige Kombifeld im Kopf, um sich den passenden QuellGig heraussuchen zu können; sinnvollerweise werden nur Gigs der im Kopf gewählten Band angezeigt.
Ich weiß also schon, was genau passieren soll und mit "Zauberei" seitens VBA hat das glaub ich nichts zu tun.
Daß nun der gewählte Gig im Kombi stehenbleibt und auf den ersten Datensatz gesprungen wird, mag aus programmiertechnischer Sicht logisch sein - mich als "Anwender" irritiert das
Daß ich für meinen begrenzten Kenntnisstand vielleicht schon zuviel will, schließe ich nicht aus - hätte selbst nicht gedacht welche Dimensionen das annimmt; ich hatte das vorher ja mit Excel gemacht und das ist gar kein Vergleich.

Atrus2711
01.06.2012, 10:40
Daß nun der gewählte Gig im Kombi stehenbleibt...kannst du ändern. Setze als letzten Befehl im Klick-Ereignis ein:
Me!Kombifeld44.Value = Null 'oder wie das Kombi hieß
dann wird es leer. Wie käme VBA dazu, Benutzereingaben unaufgefordert zu entfernen? Wenn du es leeren willst, dann programmier das!

und auf den ersten Datensatz gesprungen wird
Das liegt am Requery. Da hab ich einen Fehler gemacht. Nach dem Einfügen der Songs sollte ja das Ufo requeryt werden, nicht das Hauptform. Der Code
Me.Requery 'aktualisiere das Hauptform
müsste also in
Me.Untergeordnet27.Requery 'aktualisiere das Ufoumgeändert werden.
Willst du dann auch im Ufo auf den neuen Datensatz springen, dann so:
Me.Untergeordnet27.Requery
Me.Untergeordnet27.SetFocus
DoCmd.GoToRecord acActiveDataObject, , acNewRec

JB2012
01.06.2012, 11:22
Super Sache :-) - recht herzlichen Dank
Was mir gut gefällt ist die Möglichkeit, kurze Kommentare in das VBA einzutragen
So kann ich das vielleicht mal wieder nachvollziehen :-)

Thomas Möller
01.06.2012, 12:05
Hallo!

Was mir gut gefällt ist die Möglichkeit, kurze Kommentare in das VBA einzutragen
So kann ich das vielleicht mal wieder nachvollziehen :-)

Du solltest Dir unbedingt auch angewöhnen, Deinen Steuerelementen einen aussagekräftigen Namen zu geben, bevor Du sie im VBA-Code verwendest. Auch das erhöht die Nachvollziehbarkeit. ;)

Den Link dazu habe ich Dir ja bereits gestern gepostet. Hier ist er zur Sicherheit noch einmal: ;)
http://www.team-moeller.de/?Tipps_und_Tricks:Regeln_und_Hinweise_fuer_gutes_VBA:Steuerelemente_aussagekraef tig_benamsen

CU

Atrus2711
01.06.2012, 12:16
Das wurde JB nun auch schon mehrfach gesagt. Watch him not care... :p

JB2012
01.06.2012, 13:12
nein es ist mir nicht egal - ist nur in meiner Prio nicht ganz so hoch angesiedelt, als daß ich da erstmal Daten reinbringen will

Atrus2711
01.06.2012, 13:28
Du stolperst aber einstweilen ständig über ungünstige Namen.

Analogie: Es ist ruhmreich und ehrenvoll, der schönen Wolkenkratzer schnell aufzurichten und Möbel reinzustellen. Es ist aber hilfreich, die Baustelle dabei halbwegs ordentlich zu halten, damit du nicht ständig in Gruben fällst und von Trägern zermalmt wirst.

Sprechende Controls erleichtern die Arbeit, z.B. dadurch, dass die Textfelder (txt...) und Kombifelder (cbo...) in VBA (Intellisense) automatisch beisammenstehen. Das Kombi Quellgig "müsste" also cboQuellgig heißen, und siehe, es heißt so. Kombi44 ist hingegen ein Sch..name und kann alles Mögliche darstellen.

u c?

JB2012
01.06.2012, 13:48
dem kann ich nichts entgegensetzen :p

werde das sofort bereinigen wenn mir was auffällt

JB2012
01.06.2012, 14:32
So - ich habe mal die Felder in den Formularen "Gigs" & "f_songs" nach der Anleitung umbenannt.
Ich würde mich freuen, wenn mal kurz jemand drüberschaut.
Hoffe es funktioniert jetzt noch alles :eek:

Atrus2711
01.06.2012, 14:39
Es wird so langsam. :)
So ganz strikt bist du noch noch nicht:

heißen deine Tabellen jetzt t_ oder tbl mit Präfix?
Abfragen haben gar kein Präfix?
Formular und Bericht Gig auch nicht?
Die Controls in f_setlist ist aber noch unorthodox benamst. z.B. unser heißgeliebtes Kombi44.

Und ob alles noch läuft, kannst du wohl selber testen!?

JB2012
01.06.2012, 15:03
wie gesagt - bis jetzt hab ich nur mal "Gigs" & "f_songs" bearbeitet
Tabellen möchte ich auch von t_xxxx in tblxxx umbenennen, aber da wird's dann wohl einiges durcheinanderhauen :-((

Thomas Möller
01.06.2012, 15:49
Hallo!

Tabellen möchte ich auch von t_xxxx in tblxxx umbenennen, aber da wird's dann wohl einiges durcheinanderhauen :-((

Deswegen macht man das gleich von Anfang an. Dann spart man sich die Mühe. ;)

Übrigens: Ich habe auch immer keine Luste, die Steuerelemente alle mühsam umzubenennen. Deswegen habe ich mir ein kleines Add-In für diese Aufgabe geschrieben:
http://www.team-moeller.de/?Add-Ins:TM-FixObjectNames

CU

JB2012
02.06.2012, 13:09
Deswegen macht man das gleich von Anfang an. Dann spart man sich die Mühe. ;)
CU
Sollte ich mal wieder eine DB brauchen, wird mir das wohl nimmer passieren


Übrigens: Ich habe auch immer keine Luste, die Steuerelemente alle mühsam umzubenennen. Deswegen habe ich mir ein kleines Add-In für diese Aufgabe geschrieben:
http://www.team-moeller.de/?Add-Ins:TM-FixObjectNames
CU
WOW - das is richtig cool!
Vielen Dank für den Tip

JB2012
05.06.2012, 14:00
So - DB komplett aufgeräumt :)
Auf geht's zur nächsten Baustelle;
das Kombi zum auswählen des Quellgigs soll auf die im Hauptformular eingestellte
Band gefiltert werden. Ist (noch) keine Band ausgewählt, so sollen alle Gigs angezeigt werden (so wie jetzt).
Wie löst man so etwas?

Atrus2711
06.06.2012, 07:43
Naja, den Bezug auf Steuerelemente, um sie als Kriterium auszulesen, hast du ja schon beim Abruf der Quellgig-Songs gesehen...

Hier nun ist die Neuigkeit eher, die Alternativen (Songs von Band1, von Band2oder alle) abzutesten.

Da greifst du wieder auf ein Steuerelement zu: die gewählte Band im Kombi.

Alle Songs, wenn keine Band gewählt ist, kriegst du nach dem Patent von Donkarl: http://www.donkarl.com?FAQ3.14

Thomas Möller
06.06.2012, 10:42
Hallo!

So - DB komplett aufgeräumt

Du warst echt fleißig. Warum aber im Formular frmSongs das Steuerelement mit dem Steuerelementinhalt Titel den Namen txtSong hat, erschließt sich mir noch nicht ganz.

Konsequent wäre es, entweder den Namen des Steuerelements (txtSong => txtTitel) oder den Namen des Datenfeldes (Titel => Song) zu ändern.

CU

JB2012
13.06.2012, 10:28
Naja, den Bezug auf Steuerelemente, um sie als Kriterium auszulesen, hast du ja schon beim Abruf der Quellgig-Songs gesehen...

Hier nun ist die Neuigkeit eher, die Alternativen (Songs von Band1, von Band2oder alle) abzutesten.

Da greifst du wieder auf ein Steuerelement zu: die gewählte Band im Kombi.

Alle Songs, wenn keine Band gewählt ist, kriegst du nach dem Patent von Donkarl: http://www.donkarl.com?FAQ3.14
bei den Quellgig-Songs wird aber ja was kopiert;
hier möchte ich etwas filtern
trage ich dann unter "Private Sub cboQuellgig_Click()"
nur ein Select ein? - wie genau muß das denn aussehen? Ich kenne ja die Befehle dafür gar nicht :confused: :sos:

Atrus2711
13.06.2012, 10:49
das Kombi zum auswählen des Quellgigs soll auf die im Hauptformular eingestellte
Band gefiltert werden.
Die Datenquelle des Quellgig-Kombis muss im Kriterium auf die gewählte Band zugreifen.

Etwa so (Luftcode aus dem Kopf):
SELECT * FROm Gigs WHERE F_Band_ID = Me!cboBand
Das Kriterium ist also bei WHERE unterzubringen und muss auf das Kombi des aktuellen Band zugreifen. Nix neues also.

JB2012
13.06.2012, 11:11
ach so - das wäre ja wiederum recht einfach, ABER
ich bekomme bei folgender Abfrage trotzdem kein Ergebnis, weil er "Me!cboBand" anscheinend nicht interpretieren kann.
SELECT tblGigs.Datum, tblGigs.Ort, tblGigs.Anlass, tblBands.Bandname, tblGigs.ID
FROM tblBands INNER JOIN tblGigs ON tblBands.ID = tblGigs.[Band]
WHERE tblBands.ID=Me!cboBand;
Das Kombi heißt aber definitiv cboBand

Atrus2711
13.06.2012, 11:29
Hups, ja. Formular-Datenquellen können sich mit Me auf sich selbst beziehen, aber Controls brauchen das ausführlich. Also Forms!frmGigs!cboBand statt Me!cboBand.

Das Kombi der Quellgigs muss übrigens beim Anzeigen des Forms und beim Ändern der Band ein Requery erfahren, da es sonst die durch Blättern bzw. Ändern geänderte Band nicht mitkriegt.

Hab das mal eingebaut (obacht, Daten sind verändert! Dient nur zur Veranschaulichung, nicht als Sicherheitskopie!).

JB2012
13.06.2012, 11:42
immer wieder so schöne Fallstricke :)
Funzt einwandfrei
Das mit den beiden Requerys hab ich ausprobiert und kann es auch nachvollziehen.
Jetzt kann ich bei der Auswahl Quellgig die Anzeige des Bandnamens weglassen

Atrus2711
13.06.2012, 13:06
Hab ich mir damit einen Auftritt eurer Band bei der nächsten Party verdient?

JB2012
13.06.2012, 13:19
ich denke das größte Problem wäre da wohl die Entfernung :(