powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как из Delphi работать с MS SQL полями типа binary(8)?
4 сообщений из 4, страница 1 из 1
Как из Delphi работать с MS SQL полями типа binary(8)?
    #32048880
igornov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi All!
У меня возникла такая проблема:
Работаю из Delphi c MS SQL 7.0. В таблицах содержатся поля типа binary(8). В
Query Analizer значения этих полей выводятся в формате 0x8001000000D32767.
Delphi же определяет эти поля как TbytesField И в качестве значений выводит
(BYTES). Как в Delphi увидеть реальное значение в том же формате что выводит
Query Analizer? (0x0000000000000000)
Заранее благодарен за помощь
...
Рейтинг: 0 / 0
Как из Delphi работать с MS SQL полями типа binary(8)?
    #32048952
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно возврашать клиенту значение поля, преобразованное в Int, а затем преобразовывать его в 16-ричное значение.

Код: plaintext
select ..., convert(int,binaryfield) as bf from ....

Преобразовать к виду, как в QA можно, например так.

Код: plaintext
1.
2.
3.
4.
5.
6.
var s : string;
begin
s:=format('%x',[ADODataSet1.fieldByName('bf').asInteger]);
s:='0x'+StringOfChar('0', 20 -length(s))+s;

edit1.text:=s;
end;
...
Рейтинг: 0 / 0
Как из Delphi работать с MS SQL полями типа binary(8)?
    #32049606
igornov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо!

Но хочу заметить что это работает не полностью...

Например:
convert(int,0x8001000000D32767) возвращает 13838183

а преобразование при помощи приведённого кода

var s : string;
begin
s:=format('%x',[ADODataSet1.fieldByName('bf').asInteger]);
s:='0x'+StringOfChar('0',20-length(s))+s;

edit1.text:=s;
end;

вернёт: 0x0000000000D32767

обратите внимание на результат - он похож только в конце...

Так что думаю возвращать клиенту нужно 2 int числа...
...
Рейтинг: 0 / 0
Как из Delphi работать с MS SQL полями типа binary(8)?
    #32049828
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да. Не просек сразу. Но идея изначально верна. И идея о нескольких Int - тоже. Нужно возвращать 5 int.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
select ...,  
cast(substring(binaryfield, 1 , 2 ) as int) as bf1, 
cast(substring(binaryfield, 3 , 2 ) as int) as bf2,
cast(substring(binaryfield, 5 , 2 ) as int) as bf3, 
cast(substring(binaryfield, 7 , 2 ) as int) as bf4,
cast(substring(binaryfield, 9 , 2 ) as int) as bf5

from Table1


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
procedure ...Form.Button1Click(Sender: TObject);
var i : integer;
function hexs(c : integer) : string;
begin
result:=format('%x',[c]);
result:=StringOfChar('0', 4 -length(result))+result;
end;

begin
edit1.text:='';
for i:= 1  to  5  do
edit1.text:=edit1.text+hexs(ADODataSet1.fieldByName('bf'+inttostr(i)).asinteger)
edit1.text:='0x'+edit1.text;
end;
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как из Delphi работать с MS SQL полями типа binary(8)?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]