2016-08-25 7 views
0

Ich übertrage eine Access-Benutzeranwendung von der Verwendung nativer Access-Tabellen auf die Verwendung von ODBC-verknüpften SQL Server-Tabellen.Warum funktioniert dieser Dropdown-Filter für eine native Tabelle, aber nicht für eine ODBC-verknüpfte Tabelle?

Ich habe eine Reihe von Formularen, die durch eine Auswahl aus einem Dropdown (in einem eigenständigen Auswahlformular) gefiltert werden. Wenn der Benutzer das Dropdown-Feld leer lässt, wird das Formular standardmäßig ungefiltert gestartet.

Das alles arbeitet mit den nativen Tabellen, aber wenn ich es versuchen, die verknüpften Tabellen ich ein ODBC--call failed Fehler

Die SQL-Abfrage Zugriff erzeugt für die Abfrage verwende ich als Datenquelle des Formulars erhalten mit das ist gefiltert ist:

SELECT linked.ASSIGNED_CARE_COORDINATOR, [rest of the variables] 
WHERE (((linked.ASSIGNED_CARE_COORDINATOR)=[Forms]![frmCoord_Selector]![cmbCoords])) 
OR (((([linked].[ASSIGNED_CARE_COORDINATOR]) 
    Like [Forms]![frmDeadline_Report_Coord_Selector]![cmbCoords]) Is Null)); 

Ich weiß, dass die ODBC-Verbindung selbst in Ordnung ist; Wenn ich den Code nach OR entferne, arbeitet die Abfrage mit der verknüpften Tabelle, hat aber natürlich nicht die show-all-if-null-Funktionalität.

Warum sollte dies mit einer nativen Tabelle funktionieren, aber nicht mit der verknüpften Version der exakt gleichen Tabelle?

+0

Bitte geben Sie eine * Abfrage an, die dem Filter zugrunde liegt *. Ist diese Abfrage eine Formular-Records-Quelle, die Steuerquelle eines Dropdown-Felds, ein VBA-Recordset oder ein anderes? Außerdem ist die Logik von "OR" unklar, da Sie scheinbar zwei Ausdrücke kombinieren: 'LIKE' und' IS NULL'. Hast du das hier richtig kopiert? – Parfait

+0

@Parfait die Abfrage ist die Form Datensatzquelle (hinzugefügt, dies ist auch Fragetext). Ich habe die Kopie überprüft, es ist richtig. – Rominus

Antwort

0

Das Problem ist die LIKE in der OR -Klausel, aber Access kann scheinbar diesen seltsamen Code auf nativen Tabellen ausführen. Der richtige Code, der unabhängig von der verknüpften oder systemeigenen Tabelle zum gewünschten Verhalten führt, lautet daher wie folgt:

SELECT linked.ASSIGNED_CARE_COORDINATOR, [rest of the variables] 
FROM linked 
WHERE ((linked.ASSIGNED_CARE_COORDINATOR)=[Forms]![frmCoord_Selector]![cmbCoords]) 
    OR [Forms]![frmCoord_Selector]![cmbCoords] Is Null 
+2

* Access hat scheinbar das 'LIKE' unnötig hinzugefügt * ... wie hat MS Access es hinzugefügt? Sie als Designer aktualisieren Formulare einschließlich Datenquellen. – Parfait

+0

@Parfait Hmm, zurückgehen und die Entwurfsansicht der Abfrage überprüfen, es scheint, dass der Code mit dem "LIKE" manuell in das Feld "Field" eingegeben wurde. Es ist lange genug her, seit ich das Original mit den nativen Tabellen entworfen habe, an die ich mich nicht erinnere. Ich werde meine Antwort bearbeiten, um diesen Teil zu entfernen. – Rominus

Verwandte Themen