Показать сообщение отдельно
  #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, то всё нормально сохраняет:

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