![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
uniqueidentifier и UpdateSQL [D7, MSSQL]
Gandrey © (2003-12-08 16:22:00)
Проблема с полями типа uniqueidentifier при работе с MSSQL посредством BDE
когда запрашиваются поля типа uniqueidentifier , то Query воспринимает их как поля типа Tbyte.
Модификацию таблиц я проивожу посредством UpdateSQL, например
Update table1 set
Field1=:Field1
where id=:old_id
на сервер в результате летит (смотрел в профайлере) что то вроде такого
Update table1 set
Field1=12
where id=0x9ac01d9356c9844da03803fc6e8a9cd6
а по идее должно выглядеть так
Update table1 set
Field1=12
where id="{931DC09A-C956-4D84-A038-03FC6E8A9CD6}"
Подскажите пожалуйста как с этим бороться
Gandrey (2003-12-10 19:00:00) [1]
В адо с этим типом никаких проблем нет ...
А вот в BDE приходится извращаться
что касаемо uniqueidentifier (Может кому интересно)
нарыл в SQL функцию
declare @b varbinary(16)
set @b=0x9ac01d9356c9844da03803fc6e8a9cd6
master.dbo.fn_varbintohexstr(@b)
возращает "0x9ac01d9356c9844da03803fc6e8a9cd6"
Пётр (2003-12-09 14:30:00) [2]
uniqueidentifier - большая гадость. Работать с ним очень сложно, поэтому везде, где нужно, преобразую его в varchar(38) и всё работает нормально. С параметрами тоже нет ни каких проблем, если uniqueidentifier передавать просто, как строку.
tchn (2003-12-09 13:00:00) [3]
да делов-то? нужно завести поля таблицы, и автоинкрементному полю явно указать значения:
AutoGenerateValue = arAutoInc
FieldKind = fkInternalCalc
тогда все заработает как часы, и не нужно городить ничего
Gandrey (2003-12-09 09:39:00) [4]
Спасибо, помогло разобраться в проблеме
sniknik (2003-12-08 17:41:00) [5]проба номер 2.
заглянем в BOL
uniqueidentifierconstants
uniqueidentifierconstants are a string representing a globally unique identifier (GUID) value. They can be specified in either a character or binary string format. Both of these examples specify the same GUID:
"6F9619FF-8B86-D011-B42D-00C04FC964FF"
0xff19966f868b11d0b42d00c04fc964ff
перевод последней строки оба этих примера определяют один и тотже GUID(значение).
своими словами: на сервер прилетает правильно, в чем проблема?
p.s. если уж приспичило чтонибудь преобразовать то за это в MSSQL отвечают функции CAST & CONVERT.
Gandrey (2003-12-08 17:23:00) [6]
исправление формулировки
update я делаю хранимой процедурой и в modifySQL компонента UpdateSQL у меня записано
exec SpUpdate_rah
( :OLD_N_R_Rah_id_rah
:V_U_Rah_KodRah,
:V_U_Rah_ImRah,
:V_U_Rah_TPAX)
на сервер прилетает
exec SpUpdate_rah
( 0x9ac01d9356c9844da03803fc6e8a9cd6
"12121",
"fghf",
2.0)
помгите мастера преобразовать Tbyte в uniqueidentifier
sniknik (2003-12-08 16:32:00) [7]
> id=0x9ac01d9356c9844da03803fc6e8a9cd6
это есть правильно, т.ю. uniqueidentifier это
TGUID = packed record
D1: Longword;
D2: Word;
D3: Word;
D4: array[0..7] of Byte;
end;
а не строка как может показатся.