Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 12.09.2012, 04:08
ArtIntellAnd ArtIntellAnd вне форума
Прохожий
 
Регистрация: 23.09.2011
Сообщения: 11
Репутация: 10
По умолчанию Записать в базу данных шестнадцатеричную переменную

Привет всем. Вопрос. Записываю в базу данных SQL Server в поле типа binary(50) переменную равную r.intv2 := $FFFF;. В базу значение записывается равное 0x8E0014000000FFFF00000000...., от куда берутся первые шесть байт и как мне их убрать. Код программы:
Код:
var
  Form1: TForm1;

 type
  TTest = packed record
    intv2 : integer;

end;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var dp : TParameter;
    ms : TMemoryStream;
    r : TTest;
begin
    r.intv2 := $FFFF;

    ADOQuery1.SQL.Text := 'INSERT INTO qwe(qwe) VALUES (:qwe)';
    dp := ADOQuery1.Parameters.ParamByName('qwe');

    ms := TMemoryStream.Create();
    ms.Write(r, sizeof(r));
    dp.LoadFromStream(ms, ftBlob);

    ADOQuery1.ExecSQL();
end;

Может кто подскажет более правильное решение....
Ответить с цитированием
  #2  
Старый 12.09.2012, 08:10
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Посмотри, что в стриме. Попробуй стриму задать размер с твое поле и записать туда нули.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #3  
Старый 12.09.2012, 13:18
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от ArtIntellAnd
Привет всем. Вопрос. Записываю в базу данных SQL Server в поле типа binary(50) переменную равную r.intv2 := $FFFF;. В базу значение записывается равное 0x8E0014000000FFFF00000000...., от куда берутся первые шесть байт и как мне их убрать. Код программы:
Код:
var
  Form1: TForm1;

 type
  TTest = packed record
    intv2 : integer;

end;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var dp : TParameter;
    ms : TMemoryStream;
    r : TTest;
begin
    r.intv2 := $FFFF;

    ADOQuery1.SQL.Text := 'INSERT INTO qwe(qwe) VALUES (:qwe)';
    dp := ADOQuery1.Parameters.ParamByName('qwe');

    ms := TMemoryStream.Create();
    ms.Write(r, sizeof(r));
    dp.LoadFromStream(ms, ftBlob);

    ADOQuery1.ExecSQL();
end;
У меня этот код вылетает на ExecSQL с ошибкой "String or binary data would be truncated."

Если же я заменяю ftBlob на ftBytes, то всё нормально сохраняет:

Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 20:39.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter