2016-08-25 1 views
0

Durch einige Insert/Update-Abfragen auf eine Anwendung heute arbeiten und stieß auf ein Ergebnis, das ich nicht erwartet hatte.Warum kann ich den Feldnamen nicht als Parameter in einer Access-Parameterabfrage verwenden?

Abfragen

Mein Einsatz Abfragen ähnlich aussehen, dies zu:

PARAMETERS nm TEXT(10), st TEXT(2); 
INSERT INTO park(pname, pstate) 
VALUES([nm],[st]); 

Und ihre Begleiter Updates wie diese waren:

PARAMETERS id LONG, nm TEXT(10), st TEXT(2); 
UPDATE park 
SET 
pname = [nm], pstate = [st] 
WHERE 
ID = [id]; 

Der Tisch sie ähnlich war dies waren die Aktualisierung :

park 
ID LONG | pname TEXT(10) | pstate TEXT(2) 

unerwartetes Ergebnis

Arbeiten durch die Abfragen zu schreiben, die ich getestet jeweils gegen die Datenbank ausgeführt wird und die Testwerte für die verschiedenen Parameter bereitstellt. Nach der Einfügeabfrage würde ich das Update testen, indem ich den neu eingefügten Datensatz aktualisiere.

In den meisten Fällen waren die Tabellen leer, so dass das Update den einzelnen Datensatz einfach aktualisieren würde.

jedoch, sobald ich das Update auf einer vorher befüllte Tabelle lief, fand ich die Abfrage ALLE Datensätze, nicht nur denjenigen, dessen ID durch den Parameter zur Verfügung gestellt zu aktualisieren wurde versucht wurde. Die Frage ist Warum ??

Antwort

5

Problem

Während ID war sicherlich ein Feld in der park Tabelle, mit id als ein Parameter im Wesentlichen die folgenden in der WHERE Klausel wurde:

WHERE ID = id; 

oder

WHERE ID = ID; 

Seit ID ist immer gleich zu sich selbst, die UPDATE versucht, ALLE Datensätze statt nur den erwarteten Datensatz mit der bereitgestellten ID zu aktualisieren.

Lösung

das Problem zu beheben, habe ich einfach die erste und letzte Buchstabe der Tabelle vor dem id für jeden Fall aktualisiert ich eine Platte von seiner ID identifiziert wurde aktualisiert wird. So ist der Arbeitskreis -, die nur aktualisiert die Aufzeichnung identifiziert - ist:

PARAMETERS pkid LONG, nm TEXT(10), st TEXT(2); 
UPDATE park 
SET 
pname = [nm], pstate = [st] 
WHERE 
ID = [pkid]; 

Offensichtlich war ich nicht in der Nähe Aufmerksamkeit, während ich die Abfrage schreibe - während ich verschiedene Namen für andere Parameter benutzt hatte, I didn tun Sie es nicht, wenn es um die ID für die Update-Abfrage kam.

Bottom Line

Wann immer mit paramaterized Abfragen arbeiten, stellen Sie sicher, dass Ihre Parameternamen NICHT Ihre Tabelle Feldnamen übereinstimmen.

Dadurch vermeiden Sie das oben erwähnte Problem sowie andere damit zusammenhängende Probleme.

Sie sollten auch reservierte Wörter für Ihre Tabellen-, Feld- und Parameternamen vermeiden.

Hoffen, das hilft jemand vermeiden eine möglicherweise böse Überraschung beim Aktualisieren von Datensätzen - oder versuchen herauszufinden, warum ihre Parameter Abfragen nicht zu funktionieren scheinen.

Verwandte Themen