Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запись двоичных данных в поле БД типа ftBytes, Как записать по байтам в поле БД 
:(
    Опции темы
oleg2s
Дата 12.9.2012, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 12.5.2012

Репутация: нет
Всего: 1



Доброе время суток
Есть переменные
Var ClientDataSet: tClientDataSet;
      Data: Array of Byte;   // Динамический массив

В переменной ClientDataSet есть поле типа ftByte. Как мне из Data записать в ClientDataSet.Fields[i].Value ?

PM MAIL   Вверх
Akella
Дата 12.9.2012, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



почитай про типы данных в Delphi для начала
PM MAIL   Вверх
oleg2s
Дата 12.9.2012, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 12.5.2012

Репутация: нет
Всего: 1



Уважаемый Akella, я конечно новичок, но не настолько.
Вы можете конкретно сказать как это делается?
PM MAIL   Вверх
Akella
Дата 12.9.2012, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Я может тоже сильно-сильно в типах не силен. Просто покажите, где написано, что тип ftByte предназначен для хранения двоичных (бинарных) данных.
PM MAIL   Вверх
oleg2s
Дата 13.9.2012, 05:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 12.5.2012

Репутация: нет
Всего: 1



Читаем документацию:
ftBytes - Fixed number of bytes (binary storage) 
PM MAIL   Вверх
Akella
Дата 13.9.2012, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Цитата(oleg2s @  12.9.2012,  13:07 Найти цитируемый пост)
Как мне из Data записать в ClientDataSet.Fields[i].Value ?



а покажи, как пробовал
а нам отсюда не видно, что там у тебя в Data
PM MAIL   Вверх
oleg2s
Дата 13.9.2012, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 12.5.2012

Репутация: нет
Всего: 1



Var ClientDataSet: tClientDataSet;
      Data: Array of Byte;   // Динамический массив

Data[0] := 1;
Data[1] := 2;
...
ClientDataSet.Fields[i].Value := Data;

Пишет несовпадение типов
Поле ClientDataSet.Fields[i] описано как ftBytes

Добавлено через 2 минуты и 55 секунд
Как ввобще работать с двоичными полями базы данных?
PM MAIL   Вверх
Akella
Дата 13.9.2012, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Мне кажется BLOB тебе нужен.

Добавлено через 37 секунд
глянь сюды
http://it-blackcat.blogspot.com/2012/06/blob.html

Добавлено через 2 минуты и 4 секунды
и сюды
http://freepascal.ru/forum/viewtopic.php?t=8076&p=62248

Добавлено через 3 минуты и 40 секунд
Цитата(oleg2s @  12.9.2012,  13:07 Найти цитируемый пост)
В переменной ClientDataSet есть поле типа ftByte.


не опечатка ли?

Цитата(oleg2s @  13.9.2012,  05:21 Найти цитируемый пост)
Читаем документацию:
ftByteS - Fixed number of bytes (binary storage)  


Добавлено через 10 минут и 21 секунду
В ftBytes можно хранить двоичные данные, например, 0х0001 smile
PM MAIL   Вверх
oleg2s
Дата 13.9.2012, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 12.5.2012

Репутация: нет
Всего: 1



ftbate - кАнеШно оЧеПятка !
За ссылки спасибо, буду пробовать
PM MAIL   Вверх
oleg2s
Дата 14.9.2012, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 12.5.2012

Репутация: нет
Всего: 1



Ничего не получается.
На выходе пусто.
Если ftBlob заменить на ftVarBytes, то передается только 18 байт.

Код

unit Unit5; 

interface 

uses 
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, 
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, 
  DBClient, 
  DB, Vcl.StdCtrls;

type 
  TForm5 = class(TForm) 
    Button1: TButton; 
    procedure Button1Click(Sender: TObject); 
  private 
    { Private declarations } 
  public 
    { Public declarations } 
  end; 

var 
  Form5: TForm5; 

implementation 

{$R *.dfm} 

Var ClientDataSet: tClientDataSet; 

procedure TForm5.Button1Click(Sender: TObject); 

Var D: TDate; 
    S: String; 
    I: Integer; 
    B: String; 
    Data1: Array of Byte; 
    Data2: Array of Byte; 

begin 

   SetLength(Data1, 20); 
   Data1[0] := 1; Data1[1] := 2; Data1[2] := 3; Data1[3] := 4; Data1[4] := 5; 
   Data1[5] := 6; Data1[6] := 7; Data1[7] := 8; Data1[8] := 9; Data1[9] := 10; 
   Data1[10] := 11; Data1[11] := 12; Data1[12] := 13; Data1[13] := 14; Data1[14] := 15; 
   Data1[15] := 16; Data1[16] := 17; Data1[17] := 18; Data1[18] := 19; Data1[19] := 20; 

   ClientDataSet := tClientDataSet.Create(Nil); 
   with ClientDataSet do 
      begin 
      with FieldDefs.AddFieldDef do begin DataType := ftDate;    Name := 'ft_Date';     end; 
      with FieldDefs.AddFieldDef do begin DataType := ftString;  Name := 'ft_String';   Size := 10; end; 
      with FieldDefs.AddFieldDef do begin DataType := ftInteger; Name := 'ft_Integer';  end; 
      with FieldDefs.AddFieldDef do begin DataType := ftBlob;    Name := 'ft_Blob';     end; 
      CreateDataSet; 
   end; 

   ClientDataSet.Append; 
   ClientDataSet.Fields[0].Value := '2012-09-14'; 
   ClientDataSet['ft_String'] := 'qwerty'; 
   ClientDataSet['ft_Integer'] := 123456; 
   ClientDataSet.Fields[3].SetData(DataBlob, True); 
   ClientDataSet.Post; 

   ClientDataSet.First; 
   SetLength(Data2, ClientDataSet.Fields[3].DataSize); 

   D := ClientDataSet['ft_Date']; 
   S := ClientDataSet['ft_String']; 
   I := ClientDataSet['ft_Integer']; 
   ClientDataSet.Fields[3].GetData(Data2, True); 

   ClientDataSet.Free; 

   ShowMessage(DateToStr(D) + ' ' + S + ' ' + IntToStr(I) + ' ' + IntToStr(Length(Data2))); 
end; 

end. 





Это сообщение отредактировал(а) oleg2s - 14.9.2012, 10:55
PM MAIL   Вверх
Akella
Дата 16.9.2012, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Цитата(oleg2s @  14.9.2012,  10:53 Найти цитируемый пост)
ClientDataSet.Fields[3].SetData(DataBlob, True); 


А что это за DataBlob?


И вообще, я вроде другие примеры давал.
PM MAIL   Вверх
oleg2s
Дата 17.9.2012, 05:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 12.5.2012

Репутация: нет
Всего: 1



Это ошибка. Экспериментировал с разными вариантами. Надо Data1 поставить.
Смысл тут такой: записываем из Data1, а потом пытаемся прочитать в Data2. В результате в Data2 не все записывается.

Это сообщение отредактировал(а) oleg2s - 17.9.2012, 05:34
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.1407 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.