Запрос выбора SQL не работает.в MS Access 2010 - PullRequest
3 голосов
/ 02 ноября 2011

enter image description here

Вот мои две диаграммы и мой запрос.Очевидно, вы видите, что некоторые имена параметров совпадают.но мой запрос отображается как нет результатов.ЭТО ПОЧЕМУ?

Спасибо.

Хотя этот запрос был сделан в Access 2010, он также работает в 2003 и 2007 годах

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

ОБНОВЛЕНИЕЕЕЕЕЕЕЕЕЕЕЕЕЕЕЕЕЕЕЕЕЕЕЕЕЕЕ: *********************************** 8

спасибо за вашу помощь, но я решил ее по-своему.и потому что я делаю это для работы, мне нужно, чтобы это было сделано быстро, и у меня не было слишком много времени, чтобы разобраться с тем, почему триммер доступа не работает = (... я все еще не знаю, почему.

, но, хотя моя исходная таблицабольшой, что у одного не было пробельных пробелов. только таблица параметров, которую я загрузил из другой таблицы, которая была файлом Excel и 99 строк.

я вернулся в исходный файл Excel. попробовал обрезать там.copy вставил обрезанный столбец и вставил специальные значения, чтобы избавиться от формулы, и в нем все еще есть место !! это просто ошибка в функции обрезки или что?

в любом случае вместо этого я использовал a = left (ячейка,len (ячейка) -1), чтобы избавиться от одного пробела trailign

, затем повторно загрузил таблицу параметров Excel и теперь она работает. Длинная история, но если у кого-то есть другие предложения о том, почему TRIM не работает, объясните. Я использовалLTRIM RTRIM. ОБА и вместе TRIM

Ответы [ 5 ]

2 голосов
/ 02 ноября 2011

В ответе на @flayto вы сказали: «* оказывается, что после каждого значения Parameter_Name в ParameterTable есть один завершающий пробел. Но я попытался обрезать его, он говорит, что он обновляет все записи в этой таблице, но один пробел сител делаетне уходи! * "

Несколько раз я копировал диапазон ячеек из электронной таблицы Excel в таблицы Access.Данные в Access включали невидимые конечные символы после текста, который я ожидал.Поскольку эти символы не были пробелами, они не были удалены функцией Trim ().Посмотрите, что у вас есть на самом деле после значений Paramater_Name.

SELECT
    Parameter_Name,
    Len(Parameter_Name) AS Length_of_Parameter_Name
    Asc(Right(Parameter_Name, 1)) AS rightmost_character
FROM ParameterTable;

Исправление будет зависеть от того, что вы найдете.Например, если всегда присутствует один и только один нежелательный символ, вы можете отбросить его с помощью следующего оператора UPDATE:

UPDATE Parameter_Table
SET Parameter_Name = Left(Parameter_Name, Len(Parameter_Name) -1);

Независимо от того, что вы пытаетесь выполнить ОБНОВЛЕНИЕ, сначала сделайте резервную копию базы данных на случай, если что-то пойдет не так.

1 голос
/ 02 ноября 2011

Если ваша таблица связана, и базовый тип данных - это char, а не varchar, тогда он будет заполняться пустыми значениями даже после того, как вы думаете, что его обрезали.Вам придется изменить базовый тип данных или присоединиться к отделке (имя_параметра), что будет дорого!

1 голос
/ 02 ноября 2011

Вы уверены, что в значениях полей нет начальных или конечных пробелов? Попробуйте обернуть каждое поле LTRIM / RTRIM, как в LTRIM (RTRIM (T1_SourceTable.Parameter_Name)), просто чтобы убедиться, что это не проблема.

1 голос
/ 02 ноября 2011

Это один и тот же тип данных? Если нет, то для доступа попробуйте использовать LIKE вместо equals.

t1.parameter_name наподобие t2.parameter_name

Смотрите пример здесь. http://office.microsoft.com/en-us/access-help/access-sql-where-clause-HA010278156.aspx

1 голос
/ 02 ноября 2011

Потому что вы сравниваете ParameterTable.Full_Name с T1_SourceTable.Parameter_Name.

Вы должны сравнивать ParameterTable.Parameter_Name с T1_SourceTable.Parameter_Name.

*** ПРИМЕЧАНИЕ: я оставляю это, пока я смотрю на это, но я подозреваю, что пробелы в начале / конце (как упомянуто несколькими другими).

*** Возможное другое решение: Измените это в определенное Внутреннее Соединение. Ссылки, которые я нахожу от MS, не позволяют вам делать то, что вы сделали, но все они используют явный синтаксис INNER JOIN.

Так что вы можете попробовать:

SELECT T1.Full_Name, T2.Parameter_Name
FROM ParameterTable T1
INNER JOIN T1_SourceTable T2
  ON T1.Parameter_Name = T2.Parameter_Name

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

...