MS Access позволяет использовать GUID с числовым типом (по-немецки он называется «Replikations-ID», поэтому я предполагаю, что на английском языке это будет «идентификатор репликации»), который хранится в виде 16-байтового двоичного поля в базе данных.Как установить идентификатор GUID как параметры запроса ADO из Delphi?
Я нашел, как доступ к этим полям в Delphi с TADOQuery/TADOTable использованием
(TheQuery.FieldByName('SomeGuidField') as TGUIDField).AsGuid;
Но теперь я хочу, чтобы выполнить SQL-запрос, как это:
SELECT * FROM SomeTable WHERE SomeGuidField=:AGuid
Я попытался установки TADOQuery.SQL свойство в вышеуказанный оператор, но не нашел способа фактически установить параметр AGuid
, чтобы запрос можно было открыть. Все, что я пытался привело к (ADO/COM) ошибки
Нет Значение, заданное для одного или более требуемых параметров
Например:
TheQuery.ParamByName('AGuid').Value := QuotedString(GuidToStr(AGuid));
TheQuery.Open; // <<== crashes here
Это не работает либо:
TheQuery.ParamByName('AGuid').Value := GuidToStr(AGuid);
TheQuery.Open; // <<== crashes here
Я посмотрел на то, как TGuidField(...).AsGuid
работ и нашел что он сначала преобразует GUID в строку, а затем строку в вариант (и наоборот).
Он отлично работает, если я всегда генерировать SQL-заявление так:
SELECT * FROM SomeTable WHERE SomeGuidField='<a guid goes here>'
Как я передаю, что TADOQuery объект вокруг в программе я хотел бы изменить только AGuid
параметрическое к сохраняйте большинство методов агностиком в реальном SQL-заявлении.
Есть ли другой способ установить GUID-параметр, чем всегда изменять полный SQL-Statement?
(Это должно быть GUID, потому что мне нужно глобально уникальный идентификатор для синхронизации с другими базами данных, которые MS SQL или MS Access на основе.)
Редактировать vradmilovic правильно, это работает:
TheQuery.ParamByName('AGuid').Value := GuidToStr(AGuid);
TheQuery.Open;
Я не понимаю, почему это не сработало в первый раз, когда я попробовал.
Ждать, закрытый как слишком локализованный? Я бы категорически не согласился. Я должен воскресить этот вопрос и повторить открытый голос. – 2016-11-22 02:26:46