Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Zeos и mysql блоб поле, проблемы с инсертом


Автор: SergSW 2.3.2011, 13:00
Zeos 6.6.6, Mysql 5.1

Пытаюсь сохранить файл в блоб поле, передается как параметр, на некоторых файлах падает с такой ошибкой

---------------------------
SQL Error: Data too long for column 'Data' at row 1.
---------------------------

судя по коду зеоса он при подстановке параметра квотит недопустимые символы, такое ощущение что несовсем коректно.

Пробовал ставить SET NAMES, не помогает.

Автор: Akella 2.3.2011, 13:29
Цитата(SergSW @  2.3.2011,  13:00 Найти цитируемый пост)
Data too long

слишком большой файл, наверное

Добавлено через 36 секунд
Цитата(SergSW @  2.3.2011,  13:00 Найти цитируемый пост)
Пробовал ставить SET NAMES, не помогает. 

А как это может быть с блобами связано?

Автор: SergSW 2.3.2011, 13:47
Размер файа 115 Кб, наврядли дело в размере.


Цитата(Akella @  2.3.2011,  15:29 Найти цитируемый пост)
А как это может быть с блобами связано?

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

Автор: Akella 3.3.2011, 21:32
Хм.. я думал, что кодировка влияет только на текстовые поля. Разве нет?

Добавлено через 1 минуту и 7 секунд
Цитата(SergSW @  2.3.2011,  13:00 Найти цитируемый пост)
Пытаюсь сохранить файл в блоб поле, передается как параметр, 

С блобами нужно через TStream работать.

Добавлено через 1 минуту и 59 секунд
разве в тырнете нет инфы?
http://www.google.com/search?ie=UTF-8&oe=UTF-8&sourceid=navclient&gfns=1&q=%D1%81%D0%BE%D1%85%D1%80%D0%B0%D0%BD%D0%B8%D1%82%D1%8C+%D1%84%D0%B0%D0%B9%D0%BB+%D0%B2+%D0%B1%D0%BB%D0%BE%D0%B1+%D0%BF%D0%BE%D0%BB%D0%B5

Добавлено через 2 минуты и 32 секунды
http://www.google.com/search?ie=UTF-8&oe=UTF-8&sourceid=navclient&gfns=1&q=%D1%81%D0%BE%D1%85%D1%80%D0%B0%D0%BD%D0%B8%D1%82%D1%8C+%D1%84%D0%B0%D0%B9%D0%BB+%D0%B2+%D0%B1%D0%BB%D0%BE%D0%B1+%D0%BF%D0%BE%D0%BB%D0%B5#sclient=psy&hl=ru&q=zeos+%D1%81%D0%BE%D1%85%D1%80%D0%B0%D0%BD%D0%B8%D1%82%D1%8C+%D1%84%D0%B0%D0%B9%D0%BB+%D0%B2+%D0%B1%D0%BB%D0%BE%D0%B1+%D0%BF%D0%BE%D0%BB%D0%B5&aq=f&aqi=&aql=&oq=&pbx=1&fp=ff55dce2f37070e2

Добавлено через 3 минуты и 32 секунды
Посмотри в ZEOS примеры, как с блобами работать.

Добавлено через 4 минуты и 19 секунд
может этот пример поможет?
http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=704166&msg=7806470

Автор: SergSW 4.3.2011, 06:36
боюсь пример не покатит, т.к. я использую инсерт и соответственно FieldByName('b_image') в моем случае ничего не вернет(((

Тогда перефразирую вопрос. Как вставить блоб поле через Insert в базу mysql?

Автор: Akella 4.3.2011, 12:17
Цитата(SergSW @  4.3.2011,  06:36 Найти цитируемый пост)
Как вставить блоб поле через Insert в базу mysql?

Может так: Как сохранить файл в блоб поле MySQL?

Добавлено через 1 минуту и 49 секунд
Цитата(Akella @  3.3.2011,  21:32 Найти цитируемый пост)
Добавлено через 4 минуты и 19 секунд
может этот пример поможет?
Zeos + blob

ЧЕМ тебе этот пример не угодил?

Код

procedure TForm1.Button1Click(Sender: TObject);
var
  BlobStream: TStream;
  FileStream: TStream;
  fname: string;
begin
  Fname := 'myfile.bmp';
  if ZQuery1.State <> dsEdit then
     ZQuery1.Edit;

  BlobStream := ZQuery1.CreateBlobStream(ZQuery1.FieldByName('b_image'), bmWrite);
  try
    FileStream := TFileStream.Create(fname, fmOpenRead);
    try
      BlobStream.CopyFrom(FileStream, FileStream.Size);
    finally
      FileStream.Free;
    end;
  finally
    BlobStream.Free;
  end;

  ZQuery1.Post;
end;

Автор: SergSW 4.3.2011, 12:31
Цитата(Akella @  4.3.2011,  14:17 Найти цитируемый пост)
Может так: Как сохранить файл в блоб поле MySQL?

Нет не так.
Этот вариант потребует вначале сделать инсерт записи, потом фетч еёпосле чего по указанной схеме... что не очень красиво, очень не удобно, и плохо адаптируется под другие sql сервера.


Цитата(Akella @  4.3.2011,  14:17 Найти цитируемый пост)
ЧЕМ тебе этот пример не угодил?

Уже писал чем... на закрытой квери филда не найдет и соответственно не выполнится... только если делать как я писал выше... а этого хочется всеми силами избежать

Автор: Akella 4.3.2011, 12:39
Цитата(SergSW @  4.3.2011,  12:31 Найти цитируемый пост)
Может так: Как сохранить файл в блоб поле MySQL?

Нет не так.


Цитата(SergSW @  4.3.2011,  06:36 Найти цитируемый пост)
 Как вставить блоб поле через Insert в базу mysql?

Но само выражение "как вставить блоб поле" уже бредовое само по себе.

Автор: SergSW 4.3.2011, 12:42
Цитата(Akella @  4.3.2011,  14:39 Найти цитируемый пост)
Но само выражение "как вставить блоб поле" уже бредовое само по себе.


а как тогда?

Автор: Akella 4.3.2011, 12:44
я ж уже дал нормальное определение

Добавлено через 18 секунд
Дал ссылки на пример.

Добавлено через 40 секунд
Ну не нравится - читай документацию и делай как сам знаешь.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)