Результаты запроса не ожидаются - PullRequest
2 голосов
/ 23 апреля 2010

Я был разработчиком CF в течение 15 лет, и я никогда не сталкивался ни с чем таким странным или разочаровывающим. Я часами вырывал волосы, гуглил, отвлекал, упрощал, молился и делал все наоборот. Вы можете мне помочь?

Функция cffunction принимает один строковый аргумент, и из этой строки я строю массив «фраз» для выполнения запроса, пытаясь сопоставить имя местоположения в моей базе данных. Например, строка "республика валуна" будет производить массив: ["the", "Republic", "of", "boulder", "Republic", "Republic of", "Republic of Boulder" , "республика", "республика валун", "валун"].

Другая функция использует вышеупомянутую функцию и запускает запрос. Запрос на основе ранее приведенного примера будет ...

выберите locationid, locationname, locationaliasname из vwLocationsWithAlias, где LocationName в (',' республика ',' республика ',' республика ',' республика ',' республика валуна ',' of ',' валуна ',' валун ') или LocationAliasName в (', 'республика', 'республика', 'республика', 'республика', 'республика валун', 'of', 'валун' 'валун')

Возвращает 2 записи ...

locationid - locationname - locationalias

99 - «Валун» - «республика»

68 - «Валун» - NULL

Это хорошо. Работает отлично и денди. ОДНАКО ... если строка изменяется на "республика", в результате получается массив фраз ["," республика "," республика "], который затем используется для создания запроса ...

выберите locationid, locationname, locationaliasname из vwLocationsWithAlias, где LocationName в («,» республика, «республика») или LocationAliasName в («,» республика »,« республика »)

Возвращает 0 записей. Чего-чего?! Хорошо, просто чтобы убедиться, что я невольно ВЫСОКИЙ, я выполняю тот же самый запрос в моей консоли SQL к той же базе данных в источнике данных cf. 1 ЗАПИСЬ!

locationid - locationname - locationalias

99 - «Валун» - «республика»

Я даже могу жестко закодировать этот sql в пределах одной и той же функции и получить этот единственный результат, но не из динамически сгенерированного SQL. Я могу получить свои фразы местоположения из другой функции с другим именем, которая возвращает жестко запрограммированные значения массива, и они работают, но никогда, если массив создается динамически. Я пытался удалить cfqueryparams, трижды проверять мои типы данных, настройки источника данных и т. Д., И т. Д., И т. Д. И т. Д. NO DICE

WTF !? Это неясная ошибка? Я схожу с ума? Я перепробовал все, что мог, и другие (включая Рэя Камдена) могли придумать.

ColdFusion 8 (со всеми последними исправлениями) SQL Server 2005 (со всеми лучшими пакетами обновлений) Windows 2003 Server (со всеми последними обновлениями, пакетами обновлений и ночным MS voodoo)

Ответы [ 2 ]

2 голосов
/ 23 апреля 2010

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

Может быть некоторые пробелы или что-то, в результате чего записи не найдены. Примечания: Вы ищете точные строки. Для поиска около строк используйте как в своих запросах.

0 голосов
/ 23 апреля 2010

Используете ли вы CF 8 или CF 8.01? Обновитесь до CF 8.01, если вы еще не используете его.

Вы также можете попробовать загрузить драйвер JDBC для SQL Server 2005, отличный от встроенного. См. http://kb2.adobe.com/cps/421/ded4216b.html Я предлагаю это, потому что связь между CF / JRUN и базой данных, по-видимому, является уровнем, на котором возникает ваша проблема. Эта статья немного устарела, поэтому она может не указывать на самую последнюю версию драйвера JDBC для SQL Server 05

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...