Последние записи
- TChromium (CEF3), сохранение изображений
- Как в Delphi XE обнулить таймер?
- Изменить цвет шрифта TextBox на форме
- Ресайз PNG без потери прозрачности
- Вывод на печать графического файла
- Взаимодействие через командную строку
- Перенести программу из Delphi в Lazarus
- Определить текущую ОС
- Автоматическая смена языка (раскладки клавиатуры)
- Сравнение языков на массивах. Часть 2
Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk
Online-курс Java с оплатой после трудоустройства. Каждый выпускник получает предложение о работе
И зарплату на 30% выше ожидаемой, подробнее на сайте академии, ссылка - ttps://clck.ru/fCrQw
12th
Сен
Записать в базу данных шестнадцатеричную переменную
Posted by micher under Delphi
Skail
Записываю в базу данных 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;
Прик
Заменить тип поля binary на varbinary.
И можно обойтись без BLOB.
//запись
procedure TForm1.Button1Click(Sender: TObject);
var
r : TTest;
Ch : array of Byte;
begin
r.intv2 := $FFFF;
SetLength(Ch, SizeOf(r.Intv2));
Move(r.intv2, Ch[0], SizeOf(r.intv2));
ADOQuery1.SQL.Text := 'insert into Tbl1 (qwe) values (:qwe)';
ADOQuery1.Prepared := True;
if ADOQuery1.Parameters.Count = 0 then
ADOQuery1.Parameters.Add;
ADOQuery1.Parameters[0].DataType := ftVarBytes;
ADOQuery1.Parameters[0].Value := Ch;
ADOQuery1.ExecSQL;
end;
//чтение
procedure TForm1.Button2Click(Sender: TObject);
var
r : TTest;
Ch : TBytes; //проверено в D2010
// Ch : array of Byte; для D7
begin
ADOQuery1.SQL.Text := 'select * from Tbl1'; //+where;
ADOQuery1.Open;
if not ADOQuery1.Eof then begin
Ch := ADOQuery1.FieldByName('qwe').AsBytes; //проверено в D2010
// Ch := ADOQuery1.FieldByName('qwe').Value; для D7
if Length(Ch) > 0 then begin
Move(Ch[0], r.intv2, Length(Ch));
end;
end;
ADOQuery1.Close;
end;
Проверка на наличие параметров (if ADOQuery1.Parameters.Count = 0 then) нужна, если компонент используется для записи и чтения.
Случайные статьи
Купить рекламу на сайте за 1000 руб
пишите сюда - alarforum@yandex.ru
Да и по любым другим вопросам пишите на почту
пеллетные котлы
Пеллетный котел Emtas
Наши форумы по программированию:
- Форум Web программирование (веб)
- Delphi форумы
- Форумы C (Си)
- Форум .NET Frameworks (точка нет фреймворки)
- Форум Java (джава)
- Форум низкоуровневое программирование
- Форум VBA (вба)
- Форум OpenGL
- Форум DirectX
- Форум CAD проектирование
- Форум по операционным системам
- Форум Software (Софт)
- Форум Hardware (Компьютерное железо)