PDA

Vollständige Version anzeigen : Variable in Abfrage speichern?


Mamon
18.01.2003, 10:53
Hi,

Ich habe in einem Formular eine Textbox, deren Wert in einem Feld einer Abfrage gespeichert werden soll.

Formular: frm_Start
Abfrage: qy_Infos
textbox: Name

Wie kann ich das mit VBA machen :confused:

fishmeck
18.01.2003, 11:59
Hallo,

beschreibe mal genauer, was Du machen willst. Handelt es sich hier um eine SELECT- oder um eine Aktionsabfrage (INSERT, UPDATE)?
Wird die Abfrage noch woanders benutzt außer für Dein frm_Start oder gilt sie nur für dieses Formular?

Gruß

fishmeck

Mamon
18.01.2003, 14:16
Ok, also erstmal wird die Abfrage von mehreren formularen verwendet.

Ich muss wirklich vom Formular aus Zugriff auf ein Feld dieser Abfrage erlangen. Damit ich z.B. da etwas reinschreiben kann !!!

Markus
18.01.2003, 15:33
ich vermute das deine textbox ungebunden ist, und das du mit speichern in der Abfrage die zugrundeliegende Tabelle meinst. (Eine Abfrage selbst enthält keine Daten!)

dein Formular sollte in den Eigenschaften Datenherkunft deine Abfrage enthalten, und deine Textbox als Steuerelementinhalt das entsprechende Feld der Abfrage

Gruss Markus

Mamon
18.01.2003, 20:32
Und wie könnte ich mit VBA direkt auf das Feld der Tabelle zugreifen?? :confused:

Das mit dem Datenherkunft geht nicht, aber mein ganzes Problem zu schildern wäre zu kompliziert.

Also möchte ich es auf das Zugreifen belassen.
Wäre nett wenn mir diese Frage einer beantworten könnte :)

Nouba
18.01.2003, 20:42
Hallo Mamon,

Gedankenlesen kann hier keiner. Deswegen wäre es nett, wenn Du mitteilst, wie die Tabelle aussieht, wohin der Inhalt gespeichert werden soll (Tabellenname, Feldtyp, Feldname, Primärschlüssel, Beziehungen)? Wenn Du von speichern sprichst, wohin soll gespeichert werden? In einen neuen Datensatz, oder soll ein Datensatz aktualisiert werden? Für den letzteren Fall sollten die Bedingungen für die Aktualisierung genannt werden.

Aquarii
18.01.2003, 20:47
Hallo Mamon,

da Du nicht genau geschrieben hast, ob Du in die Tabelle schreiben oder nur Werte auslesen willst, hier mal ein Codebeispiel zum Auslesen aller Tabellenfelder:

<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet"><pre><span class="TOKEN">Public Function</span> fktTabFelderAuslesen(strTabName <span class="TOKEN">As</span> <span class="TOKEN">String</span>)
<span class="REM"> '// -----------------------------------------------------</span>
<span class="REM"> '// Methode | Zum Auslesen aller Felder einer Tabelle.</span>
<span class="REM"> '// | Ausgabe in Direktfenster</span>
<span class="REM"> '// -----------------------------------------------------</span>
<span class="REM"> '// Parameter | strTabName = zu &uuml;berpr&uuml;fende Tabelle</span>
<span class="REM"> '// -----------------------------------------------------</span>
<span class="REM"> '// R&uuml;ckgabe |</span>
<span class="REM"> '//------------------------------------------------------</span>
&nbsp;
<span class="TOKEN">On Error GoTo</span> fehler
&nbsp;
<span class="TOKEN">Dim</span> DB <span class="TOKEN">As</span> <span class="TOKEN">Database</span>
<span class="TOKEN">Dim</span> tdf <span class="TOKEN">As</span> TableDef
<span class="TOKEN">Dim</span> FLD <span class="TOKEN">As</span> Field
&nbsp;
<span class="TOKEN">Set</span> DB = CurrentDb()
<span class="TOKEN">Set</span> tdf = DB.TableDefs(strTabName)
&nbsp;
<span class="REM">' Felder in Fields-Auflistung des TableDef-Objekts durchlaufen.</span>
<span class="TOKEN">For</span> <span class="TOKEN">Each</span> FLD <span class="TOKEN">In</span> tdf.Fields
<span class="TOKEN">Debug.Print</span> FLD.Name
<span class="TOKEN">Next</span> FLD
&nbsp;
ende:
<span class="TOKEN">Exit Function</span>
&nbsp;
fehler:
MsgBox Err.Description, 16
<span class="TOKEN">Resume</span> ende
&nbsp;
<span class="TOKEN">End</span> <span class="TOKEN">Function</span></pre></div>


@Nouba

Du hast natürlich Recht, erst mal die genauen Voraussetzungen abzufragen

Mamon
18.01.2003, 22:01
Na gut, dann versuche ich es etwas genauer zu beschreiben:

(Tabellenname, Feldtyp, Feldname, Primärschlüssel, Beziehungen)?

Tabellenname: tb_Info

Felder: Anzahl (Zahl), Datum (Datum), Titelnummer (Zahl)

Beziehung mit der Tabelle tb_Titel über Titelnummer

Felder von tb_Titel: ID (Primärschlüssel!!!) (Zahl), Titel (Text)


Nun kommt noch ein Formular und mein Hauptproblem: ein Unterformular!

Das Formular:
Oben ist eine Combobox in der ich den Titel auswähle, darunter ist dann das Unterformular mit den Feldern Anzahl, Datum

Nun kann man ja im Unterformular einen neuen Datensatz anlegen nur muss in dem neuen Datensatz ja auch Titelnummer sein wegen der Beziehungen !!!

Ich habe schon den Wert aus der Combobox mittels cb_Titel.Value und der Wert müsste dann, wenn man einen neuen Datensatz im Unterformular macht, in die Tabelle im Feld Titelnummer geschrieben werden!


puhhh, das ist ziemlich viel, ich hoffe ihr schaut da durch. Und sagt mir jetzt nicht ich solle im Unterformular einfach das Feld Titelnummer hinzunehmen und die Nummer selber eintragen

Nouba
18.01.2003, 22:38
Hallo Mamon,

ich habe mal versucht, die Schilderung in ein Beispiel zu fassen.

Mamon
19.01.2003, 00:11
Also erstmal vielen Dank für deine Mühe !!! :)

Das hilft mir wirklich weiter.

Nur möchte ich das nicht einfach nur stupide übernehmen, sondern auch ein bisschen wissen was da eigentlich passiert.

Kannst du vielleicht kurz beschreiben was du da gemacht hast?

Private Sub cboFindeTitel_AfterUpdate()
' Find the record that matches the control.
Dim rs As Object

Set rs = Me.Recordset.Clone
rs.FindFirst "ID = " & Str(Nz(Me!cboFindeTitel, 0))
If Not rs.EOF Then Me.Bookmark = rs.Bookmark
Set rs = Nothing
End Sub

Private Sub Form_AfterUpdate()
Me!cboFindeTitel.Requery
End Sub

Private Sub Form_Current()
Me!cboFindeTitel.Visible = Not Me.NewRecord
End Sub

Und noch eine kleine Frage. Wenn man in der Combobox einen titel auswählt wird dementsprechend die dazugehörigen werte angezeigt.
Ich weiss wie man das anhand einer abfrage macht, aber wo hast du das denn eingestellt :confused:

Nouba
19.01.2003, 13:08
Hallo Mamon,

die erste Sub hat der Assistent erstellt und wird im AfterUpdate des KF ausgeführt, die zweite aktualisiert das Kombifeld nach Änderung des Form Recordsets und die dritte blendet das Kombifeld bei Neuanlage eines DS aus.

Mamon
19.01.2003, 15:09
Hallo nouba,

du sagst die erste sub hätte der assistent gemacht. Wo kann ich diesen Assistenten für diese Aufgabe aufrufen.

Und ich bitte dich meine zweite frage nochmal genau zu beantworten

"Wenn man in der Combobox einen titel auswählt wird dementsprechend die dazugehörigen werte angezeigt. Wo hast du das eingestellt?"

Nouba
19.01.2003, 15:50
Hallo Mamon,

wenn eine gebundene Form existiert und dann ein Kombifeld erstellt wird (vorrausgesetzt aktiver Zauberstab in der Werkzeugleiste), besteht die Möglichkeit, sich eben diesen ominösen Kode erstellen zu lassen. Dieser Kode wird im NachAktualisieren-Ereignis des Kombifelds ausgeführt. Du kannst mal das Kombifeld im Entwurf anklicken. Im 3. Eigenschaftsregister findest Du dann einen Eintrag [Event Procedure] bzw. auf deutsch [Ereignisprozedure].

Mamon
19.01.2003, 16:35
Ok, nochmals vielen Dank !!! :)

Mamon
19.01.2003, 17:47
Zu früh gefreut !!! :bawling:

Also ich bin jetzt schon ein gutes Stück weiter gekommen, aber jetzt gibt es noch ein kleines Problem das ich nicht wegbekommen.

Anhand deines Beispiels habe ich einiges zusammen gebastelt und es funktioniert auch vieles.

Nur wenn ich jetzt im Formular einen neuen Datensatz anlege, speichert er noch nicht die ausgewählte TitelID (Combobox) in das Feld Titelnummer in der Tabelle tb_Info.

Es muss irgendwie am Unterformular liegen, das übrigens bei dir ganz anders aussieht als bei dir.


Es wäre nett, wenn du ein kleines Tutorial hättest wie ich das Unterformular mache. Oder es wenigsten schritt für schritt beschreibst.

Nouba
19.01.2003, 18:57
Hallo Mamon,

stelle die Beziehungen zwischen den Tabellen ein und klicke im Eigenschaftsfenster des UFSteuerelements auf die <b>...</b> (siehe Anhang). Dort ist analog zu verfahren. Wenn das nicht hilft, stelle doch mal ein Minimalbeispiel hierher, damit es anschaulicher wird, wodran es hapert.

Mamon
19.01.2003, 19:28
Hallo Nouba,

Also mit deinem letzten Vorschlag konnte ich nix anfange. Ich finde einfach die Einstellung nicht. :(

Aber ich habe mal was anderes probiert:

Im UF habe ich jetzt das Feld Titelnummer hinzugenommen und einfach den Standardwert auf den Wert der Combobox gesetzt! Also wenn man nun einen neuen Datensatz anlegt, steht da automatisch der richtige Wert drin.
Nun ist das blöde ja, dass dann das Feld TitelNummer auch angezeigt wird.
Ich habe es leider nicht geschafft es unsichtbar zumachen, wenn das überhaupt geht. :confused:

PS:
Als Anhang mal die DB. Ist mit 2000 gemacht.

Nouba
19.01.2003, 20:52
Hallo Mamon,

wenn Du jetzt in das Suchkombi einen unbekannten Titel eingibst, erscheint ein Dialog, der das Speichern ermöglicht. Kommentare findest Du im Kode.

fishmeck
19.01.2003, 22:15
Hallo Mamon,

falls das Problem noch besteht:
das Du im UF nichts speichern kannst, liegt daran, das das Feld für die Titelnummer fehlt. Lege diese im UF an mit Visible = False und Datenherkunft 'Titelnummer'.

Gruß

fishmeck