2016-12-22 1 views
1

Ich wurde beauftragt, eine Access-Anwendung in .NET zu konvertieren. Ich weiß nichts über Access. Mein Problem ist, dass ich in der Lage sein muss, die tatsächliche Abfrage zu sehen, die über VBA aus einem Formular aufgerufen wird.Wie SQL-Anweisung angezeigt wird, die von Access ausgeführt wird DoCmd.OpenForm

Der VBA-Code verwendet einen Befehl namens DoCmd.OpenForm, um ein Formular zu öffnen und Datensätze anzuzeigen. Der VBA-Code befindet sich in einem Ereignishandler für eine Schaltfläche. Wenn Sie darauf klicken, öffnet die Schaltfläche ein Formular mit DoCmd.OpenForm und den zugehörigen Parametern. Der vierte Parameter in der DoCmd.OpenForm ist WhereCondition nach MSDN, und der Entwickler verwendet dies, um eine WHERE-Klausel einzufügen (ohne das Wort WHERE pro MSDN). Die verwendete WHERE-Klausel ist ProjectNumber = Me![ProjectNumber].

Das Problem ist, dass ich den Rest der Abfrage nicht sehen kann, d. H. Was ist die gesamte SELECT-Anweisung und wie weiß Access, welche Felder zum Ausfüllen des vom Befehl DoCmd.OpenForm geöffneten Formulars ausgewählt werden? Gibt es das überhaupt, um das herauszufinden? Um die Verwirrung zu erhöhen, ist das mit DoCmd.OpenForm geöffnete Zielformular mit einer eigenen Abfrage verknüpft. Mit anderen Worten: Wenn das Formular im Entwurfsmodus geöffnet wird, wird unter Daten -> Datensatzquelle eine Abfrage aufgelistet. Ich kann die Syntax für diese Abfrage sehen, nur nicht die "teilweise", die aus dem VBA-Code mit dem Befehl DoCmd.OpenForm aufgerufen wird. Es sieht so aus, als würden zwei verschiedene Abfragen verwendet, um das Zielformular zu füllen.

Ich habe versucht ODBC-Tracing und es zeigte nichts. Da die Anwendung mit einem SQL Server-Backend kommuniziert, kann mein Datenbankadministrator möglicherweise die Ablaufverfolgung aktivieren, aber dies ist keine großartige Option, da die Anwendung sehr umfangreich ist und dieses Szenario in vielen Formen vorhanden ist und ich bin mir nicht sicher fange sogar alles. Jede Hilfe wird sehr geschätzt.

+1

Öffnen Sie das Formular in Layout oder Design-Ansicht Die Eigenschaften für das Formular enthält eine Daten Registerkarte Suchen Sie in dieser Daten Registerkarte für die Datensatzquelle für das Formular. Das sollte Ihnen geben, was Sie suchen. – tlemaster

+0

Beide gut Beantworten Sie unten, aber beachten Sie auch, dass es mehrere Möglichkeiten gibt, die SQL-Recordsource eines Formulars zu bearbeiten hake die OnOpen, OnLoad und OnCurrent Ereignisse. Überprüfen Sie, ob globale Variablen vor dem Aufrufen des Formulars festgelegt wurden oder ob das OpenForm OpenArgs-Argument verwendet wird. Dies ist ein Hinweis darauf, dass mehr Informationen an das Formular gesendet werden als nur das Öffnen. – SunKnight0

Antwort

1

Der WhereCondition-Parameter von DoCmd.OpenForm ist eine zusätzliche WHERE-Klausel in der Recordsource des Formulars. Oder ein zusätzlicher Filter, wie auch immer Sie ihn aufrufen möchten.

z. wenn das Formular Datenherkunft ist

SELECT * FROM Projects WHERE PrjStatus = 1 

und WhereCondition ist

ProjectNumber = Me![ProjectNumber] 

dann die tatsächliche SELECT-Anweisung für die geöffnete Form wird

SELECT * FROM Projects WHERE PrjStatus = 1 AND ProjectNumber = Me![ProjectNumber] 
1

Das Formular kann, oder nicht, basierend auf sein können eine Anfrage. Oft wird der Basistabellenname verwendet. So eine Datenquelle bilden können sein:

A base table name 
A saved query 
Have embedded sql right in the data source. 

Um zu sehen, zeigten die zugrunde liegende Datenquelle einer bestimmten Form, öffnen Sie das Formular im Entwurfsmodus, zeigen Sie das Eigenschaftsfenster (wenn Eigenschaftsblatt nicht bereits dann alt- nur Hit Enter-Taste in der Registerkarte Daten die Datenquelle sehen.

ZB dieses:

enter image description here

der Name oben Quelle kann eine Basistabelle, ein Name einer gespeicherten Abfrage oder sogar roh sQL richtig sein in diesem Datensatz Quelle wie folgt aus:

enter image description here

In oben können Sie auch die kleine Schaltfläche [...] getroffen (das erscheint, wenn Sie den Cursor in die Datenquelle setzen und das wird die Query Builder zeigen.dies zB:

enter image description here

Und von oben, können Sie die SQL-Ansicht Flip von SQL wie oben zeigt die Wahl.

Und das Ergebnis ist folgende:

enter image description here

so oft gibt es keine SQL oder die Abfrage für das Formular angegeben, sondern nur die Basistabelle. (Wenn Sie also aufgefordert werden, den Abfrage - Generator aufzurufen, gehen Sie sicher, dass Sie die Eingabeaufforderung ändern und die Formulardatenquelle in eine eingebettete Abfrage für das Formular ändern.

In allen Fällen wird die "where" -Klausel des openform -Befehls der Datenquelle als Filter hinzugefügt. Und wenn sql bereits eine where-Klausel hat, dann werden sie kombiniert (genau wie bei Verwendung einer sql select + where in einer SQL Server-Ansicht)

Verwandte Themen