2012-04-04 2 views
2

Ich habe eine gebundene Form. Die Datenquelle für das Formular ist eine Abfrage mit Parametern. Können die Parameter in Vba festgelegt werden, bevor das Formular geladen wird? Das Popup für die Parameter erscheint noch vor dem Ereignis form_open:/Möglich, die Parameter einer gebundenen Abfrage in Vba vor dem Laden von Formular festzulegen?

Ich kenne die Alternativen .. Erstellen Sie meine eigenen Abfragezeichenfolgen mit Parametern, oder manipulieren Sie die SQL der Querydefs. aber ich mag sie nicht.

Momentan verwende ich ungebundene Formulare während der Entwurfszeit und binde sie zur Laufzeit an Parameterabfragen. aber ungebundene Formen während der Designzeit ist nicht so praktisch.

Wer eine Idee?

Grüße

Egi

+0

Können Sie die Parameter auf die Werte von Steuerelementen in einem ausgeblendeten Formular festlegen? – Fionnuala

+0

Ich mag auch keine versteckten Formulare, D .. Ich arbeite gerne mit Code. – Egi

+0

Also .. Sie wollen nicht eine SQL-Zeichenfolge erstellen, Sie möchten nicht ändern, die Abfrage def, und Sie möchten kein verstecktes Formular. Es bleibt nicht viel Platz, oder? Ich schätze, du könntest ADO benutzen, aber das wird dein Leben noch komplizierter machen. – Fionnuala

Antwort

4

Sie sagte:

im Moment habe ich nicht gebundene Formen während Entwurfszeit verwenden und sie zu parameterqueries während der Laufzeit binden. , aber ungebundene Formulare während der Designzeit ist nicht so praktisch.

Eine Alternative wäre eine „Dummy“ Datenherkunft zu verwenden, so dass Sie eine gebundene Form zur Entwurfszeit haben, aber immer noch die Datenherkunft aktualisieren Sie Ihre Parameter-Abfrage zur Laufzeit mit.

Ein Beispiel für eine Dummy-Abfrage würde wie folgt sein:

SELECT 1 AS EmployeeID, 'John' AS FirstName, 'Doe' AS LastName, #1/1/1980# AS DoB 

, dass das Feld Listenfeld mit den Feldern EmployeeID, FirstName, LastName, DoB bevölkern würde. Offensichtlich möchten Sie Ihre Dummy-Abfrage-Feldnamen widerspiegeln, was die Feldnamen zur Laufzeit sind.

Dadurch wird auch das Problem vermieden, dass die Parameter-Popups zur Ladezeit angezeigt werden.

+0

Ich habe das schon mal gemacht und es funktioniert gut. Ändern Sie einfach die Datenquelle, wenn dann laden lädt –

+0

mmmh nicht schlecht .. vielleicht kommt jemand mit einer anderen Idee. Wenn nicht, werde ich diese Antwort akzeptieren. meine Hoffnung ist, dass es eine Lösung ohne zusätzlichen Overhead wie mehr querydefs, sqlstrings oder andere Extras gibt. nur ein Formular, ein Querydef und ein wenig VBA, um jede Bedingung zu decken :) – Egi

0

Eigentlich ist die grundlegende Lösung hier, einfach die Parameter zu entfernen und die verwendete SQL NICHT zu ändern. Zugriffsformulare haben eine Where-Klausel. Sie sind entworfen, um dieses Problem zu lösen. Und das bedeutet, dass Sie keine Abfrage mit Parametern benötigen und Sie die Formular- oder Berichts-SQL nicht ändern müssen.

Sie übergeben einfach die Where-Klausel, wenn Sie das Formular öffnen.

So die Alternativen zum Erstellen einer Abfragezeichenfolge sind nicht erforderlich, und die Alternative, den SQL eines Querydef zu manipulieren, ist ebenfalls nicht erforderlich. Und die Alternative, die Formulardatenquelle ändern zu müssen, ist ebenfalls nicht erforderlich.

Und mit Parametern aus der Abfrage entfernt, dann können Sie die Abfrage in Formularen, Berichten, Exportroutinen und alle Arten von Verwendungen verwenden.

+0

Wie ich in einem Kommentar oben erwähnt habe, kann ich DoCmd.OpenForm nicht verwenden, weil ich meine eigenen Ereignisse verwende. Ich denke, benutzerdefinierte Ereignisse sind dann nicht Teil einer grundlegenden Lösung. – Egi

+0

Fair genug. Sie können das Formular einfach starten und eine benutzerdefinierte Eigenschaft des Formulars haben. myForm.MyWhere = "InvoiceNumber =" & lngIngvoiceNum Das obige würde somit die Datenquelle + Where-Klausel Formulars festlegen. Und so verlassen Sie die Datenquelle des Formulars als SQL mit der ID = 0 –

Verwandte Themen