2013-07-22 1 views
0

Я пытаюсь использовать свойство фильтра ADO для фильтрации набора записей с помощью столбца uniqueidentifier. Я подключаюсь к SQL Server 2008 с использованием ADO в Windows 7, используя провайдера SQLOLEDB.1.Каковы правила использования фильтра ADO Recorset с столбцом уникального идентификатора SQL Server?

Я создаю набор записей и использую его для отправки SQL-запроса на сервер. Затем я установил свойство ADO Recordset.Filter. Я получаю ошибки независимо от того, что я пробовал для фильтра.

Если я пытаюсь

[column name] = '5D9C83FB-E758-0D4B-B1C7-E751D951B67C' 

я

фильтр не может быть открыт.

Если я пытаюсь

[column name] like '%5D9C83FB-E758-0D4B-B1C7-E751D951B67C%' 

я

строку Invalid класса.

(Примечание: Я оставил любые необходимые двойные кавычки для ясности я могу искать другие типы строковых столбцов, поэтому цитирую не проблема.).

Я использую Delphi XE2, но я думаю, что это, вероятно, не актуально, поскольку я создаю свой объект ADO напрямую, вместо того, чтобы использовать любой из их кода оболочки. У меня нет проблем с свойством Filter на любом из столбцов типа string, всего uniqueidentifier.

Мой основной вопрос в том, можете ли вы сделать эту работу, как вы это делаете (не до преобразования столбца в строку во время запроса)? Более общий вопрос заключается в том, какие правила используют колонки uniqueidentifier с свойством Filter. Я не мог найти ничего подходящего.

+2

Вы попробовали '' {5D9C83FB-E758-0D4B-B1C7-E751D951B67C} ''? –

+0

См. Комментарий к вашему ответу ниже. – jep

ответ

1

В обоих случаях вы рассматриваете их как строки. Я предлагаю попробовать обертывание значения GUID в фигурных скобках:

[column name] = '{5D9C83FB-E758-0D4B-B1C7-E751D951B67C}' 
+0

Спасибо, что сработало для равного оператора. Я все еще не могу понять, есть ли способ заставить оператора LIKE работать. Пробовал несколько вещей с фигурными фигурными скобками, но это никому не нравилось. Я буду отмечать ваш ответ как принятый, если никто не публикует фактические правила (надеюсь, с некоторыми цитатами) об Filter и uniqueidentifier. – jep

+2

Почему вы используете LIKE против уникального идентификатора? –

+0

Это действительно имеет значение? Хорошо, потому что пользователь прочитал это вам по телефону, и вы уверены, что они перенести пару писем. Это, в основном, часть расширенной специальной системы запросов. Если я не могу использовать LIKE, пусть будет так. Но если смогу, мне было бы интересно, как это сделать.: D – jep

1

В Delphi (и большинство других структур), вы не можете отфильтровать GUID локально в RecordSet с синтаксисом подобным НРАВЯТСЯ со строками. Для фреймворков GUID - это всего лишь куча байтов, а не строка.

Вы должны сделать фильтрацию на стороне сервера, используя синтаксис LIKE, который поддерживает сам SQL Server (пример синтаксиса находится в How to use SQL's LIKE on a guid in Entity Framework?).