我有一个名为Candidates
的表格,其中包含字段C_ID
,C_Surname
,C_Names
和C_Gender
。单词NAMES
在Microsoft Jet 4.0中保留,因此SQL语句SELECT C_Names AS Names
不起作用。是否有任何解决方法可以使用名称作为标识符?
注意:我的连接方法是ADO。
看到没有提供的答案有效,这是我的完整SQL语句:
SELECT
C.C_ID AS ID,
StrConv(C.C_Surname, 3) AS Surname,
StrConv(C.C_Names, 3) AS Name,
Sum(V.V_ClassA * M.M_Multiplier) AS ClassA,
Sum(V.V_ClassB * M.M_Multiplier) AS ClassB,
Sum(V.V_ClassC * M.M_Multiplier) AS ClassC
FROM
((Candidates AS C
INNER JOIN Votes AS V ON C.C_ID = V.C_ID)
INNER JOIN Parties AS P ON V.P_ID = P.P_ID)
INNER JOIN Multiplier AS M ON P.P_Type = M.P_Type
GROUP BY
C.C_ID,
C.C_Surname,
C.C_Names
ORDER BY
Sum(V.V_ClassA * M.M_Multiplier) DESC,
Sum(V.V_ClassB * M.M_Multiplier) DESC,
Sum(V.V_ClassC * M.M_Multiplier) DESC;
begin
with dmBKElections.qryTallyVotes, SQL do
begin
Clear;
Add('SELECT');
Add(' C.C_ID AS ID,');
Add(' StrConv(C.C_Surname, 3) AS Surname,');
Add(' StrConv(C.C_Names, 3) AS Name,');
Add(' Sum(V.V_ClassA * M.M_Multiplier) AS ClassA,');
Add(' Sum(V.V_ClassB * M.M_Multiplier) AS ClassB,');
Add(' Sum(V.V_ClassC * M.M_Multiplier) AS ClassC');
Add('FROM');
Add(' ((Candidates AS C');
Add(' INNER JOIN Votes AS V ON C.C_ID = V.C_ID)');
Add(' INNER JOIN Parties AS P ON V.P_ID = P.P_ID)');
Add(' INNER JOIN Multiplier AS M ON P.P_Type = M.P_Type');
Add('GROUP BY');
Add(' C.C_ID,');
Add(' StrConv(C.C_Surname, 3),');
Add(' StrConv(C.C_Names, 3)');
Add('ORDER BY');
Add(' Sum(V.V_ClassA * M.M_Multiplier) DESC,');
Add(' Sum(V.V_ClassB * M.M_Multiplier) DESC,');
Add(' Sum(V.V_ClassC * M.M_Multiplier) DESC;');
Open;
end;
end;
当我改变
Add(' StrConv(C.C_Names, 3) AS Name,');
到
Add(' StrConv(C.C_Names, 3) AS [Names],');
我收到错误:
项目BKElections_P.exe引发异常类$ C0000005,并在0x0062ee2a处发出消息'访问冲突:读取地址0x000000e2'。
答案 0 :(得分:0)
如果您使用SQL Server或MySQL,则必须有两个选择:
SELECT Fieldname as "Name" ...
这是ANSI
OR
SELECT Fieldname as [Name]
这是SQL Server和MS Access
在MySQL上你可以使用:
SELECT Fieldname as ´Name´
但是你有可能在.NET中而不是在SQL中得到错误吗? 如果您将列重命名为" name",只有在某些情况下您想要访问具有保留名称的列时,您才会收到此错误。
所以在ADO.NET中你可以尝试:
rst![Name]
rst.Fields("Name")
或者最好的想法:给我们一个代码示例。 请在SSMS中尝试SQL。
答案 1 :(得分:0)
您应该将任何保留字包装在方括号中,如下所示:
[Name]而不是Name