2015-08-29 8 views
0

У меня есть вкладка-кросс запрос, как показано ниже:ИНЕКЕ имеет действительный недопустимый параметр

TRANSFORM Sum([Raw Scores].[Raw Score]) AS SumOfScore 
SELECT [Raw Scores].PlayerID, [Raw Scores].[First Name], [Raw Scores].[Last Name], [Raw Scores].[Round Number], Sum([Raw Scores].Score) AS [Final Score], Sum([Raw Scores].[Raw Score]) AS [Total Shots] 
FROM [Raw Scores] 
WHERE [Round Number] = [Enter Round Number:] 
GROUP BY [Raw Scores].PlayerID, [Raw Scores].[First Name], [Raw Scores].[Last Name], [Raw Scores].[Round Number] 
PIVOT [Raw Scores].[Hole ID]; 

[Raw Scores].[Round Number] представляет собой столбец в другой таблице, которая имеет в нем данные.
this.[Enter Round Number:] Однако, это параметр.


Проблема:

То, что я пытаюсь сделать, это отсортировать все баллы по раунду, что они были в приобретенных, однако, положение WHERE, кажется, есть проблема.
Всякий раз, когда используется имя не колонки, он выплевывает следующее сообщение об ошибке:

"The Microsoft Access database engine does not recognize '[Enter Round Number:]' as a valid field name or expression."

Но, когда определенное значение используется вместо (один написан в запросе, а не параметр) используется, запрос выполняется отлично.

TRANSFORM Sum([Raw Scores].[Raw Score]) AS SumOfScore 
SELECT [Raw Scores].PlayerID, [Raw Scores].[First Name], [Raw Scores].[Last Name], [Raw Scores].[Round Number], Sum([Raw Scores].Score) AS [Final Score], Sum([Raw Scores].[Raw Score]) AS [Total Shots] 
FROM [Raw Scores] 
WHERE [Round Number] = 1 
GROUP BY [Raw Scores].PlayerID, [Raw Scores].[First Name], [Raw Scores].[Last Name], [Raw Scores].[Round Number] 
PIVOT [Raw Scores].[Hole ID]; 

Примечание:[Raw Scores] является запрос. Добавление предложения WHERE с параметром к этому запросу дает результаты совершенно точно, но при использовании в сочетании с вышеуказанным запросом отображает сообщение об ошибке (показано на рисунке выше) ...

Вот [Raw Scores] Запрос, с параметр, который работает (и имеет неизвестную переменную в ней):

SELECT Scores.PlayerID, Scores.Score AS [Raw Score], Scores.[Hole ID], Holes.Par, IIf([Raw Score]=0,Holes.Par,[Raw Score]-Holes.Par) AS Score, Players.[First Name], Players.[Last Name], Scores.[Round Number], Players.Country 
FROM (Scores INNER JOIN Holes ON Scores.[Hole ID] = Holes.[Hole Number]) INNER JOIN Players ON Scores.PlayerID = Players.[Player ID] 
WHERE [Round Number] = [Enter Round Number:]; 

Update: не определяющий параметр, как поле, кажется, решить эту проблему, но для удобства чтения, я до сих пор это нужно отображать правильное имя ,

TRANSFORM Sum([Raw Scores].[Raw Score]) AS SumOfScore 
SELECT [Raw Scores].PlayerID, [Raw Scores].[First Name], [Raw Scores].[Last Name], [Raw Scores].[Round Number], Sum([Raw Scores].Score) AS [Final Score], Sum([Raw Scores].[Raw Score]) AS [Total Shots] 
FROM [Raw Scores] 
WHERE [Round Number] = ? 
GROUP BY [Raw Scores].PlayerID, [Raw Scores].[First Name], [Raw Scores].[Last Name], [Raw Scores].[Round Number] 
PIVOT [Raw Scores].[Hole ID]; 

Вопрос:

Как получить запрос на работу; спросить цену?

Как так:
Enter Round Number: |

ответ

1

Проблема заключается в том, что

WHERE [Round Number] = [Enter Round Number:] 

Тогда он считает [Enter Round Number:] как выражение или значение, и это выглядит как это ни один из них и, следовательно, вы получаете ошибку, о которой вы упомянули.

Вам необходимо предоставить соответствующее значение выражению [Enter Round Number:]. Вы можете передать значение в параметре, а затем использовать его. Вы можете использовать QueryDefs, а затем создать запрос с параметрами.

Imports Data.OleDb 

dim cmd as new OleDbCommand 
cmd.Connection = con 
cmd.CommandType = CommandType.Text 
cmd.CommandText = "SELECT [Raw Scores].PlayerID, [Raw Scores].[First Name], [Raw Scores].[Last Name], [Raw Scores].[Round Number], Sum([Raw Scores].Score) AS [Final Score], Sum([Raw Scores].[Raw Score]) AS [Total Shots] 
FROM [Raw Scores] 
WHERE [RoundNumber] = ? 
GROUP BY [Raw Scores].PlayerID, [Raw Scores].[First Name], [Raw Scores]. [Last Name], [Raw Scores].[Round Number] 
PIVOT [Raw Scores].[Hole ID];" 

cmd.Parameters.Add("@RoundNumber", OleDbType.VarChar).value = "RoundNumber" 

Dim da as new OleDbDataAdapter(cmd) 
+0

Erm .. Как это сделать?(Я знаю, что в запросе 'Raw Scores',' [Enter Round Number:] 'является параметром, но как я могу сделать его в моем <Запрос в самом верхнем> '' [Enter Round Number:] 'one?) – aytimothy

+0

@aytimothy: - Вы используете .net, если да, то vb.net или что? –

+0

Я делаю это с .NET в C# и внутри самого Access. (Как и в: Подстановка того, что '1' с переменной на C# является простой, но не такой-то в Access, поскольку она запутывается). – aytimothy

0

По-видимому, все, что вам нужно сделать, - это установить его, чтобы устранить путаницу, когда он проверяет, является ли это полем или нет.

PARAMETERS [Enter Round Number:] Value; 
TRANSFORM Sum([Raw Scores].[Raw Score]) AS SumOfScore 
SELECT [Raw Scores].PlayerID, [Raw Scores].[First Name], [Raw Scores].[Last Name], [Raw Scores].[Round Number], Sum([Raw Scores].Score) AS [Final Score], Sum([Raw Scores].[Raw Score]) AS [Total Shots] 
FROM [Raw Scores] 
WHERE ((([Raw Scores].[Round Number])=[Enter Round Number:])) 
GROUP BY [Raw Scores].PlayerID, [Raw Scores].[First Name], [Raw Scores].[Last Name], [Raw Scores].[Round Number] 
PIVOT [Raw Scores].[Hole ID]; 
Смежные вопросы