Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вопрос по хранению файлов в БД


cyborg ©   (2009-02-13 14:41:00) 

Хочу сохранить в базе файл. Делаю это следующим образом.
procedure TForm1.Button1Click(Sender: TObject);
var
 blob: TStream;
 fs:TFileStream;
begin
 blob := MSQuery1.CreateBlobStream(MSQuery1.FieldByName('Enclosure'), bmWrite);
 try
   blob.Seek(0, soFromBeginning);
   fs := TFileStream.Create('d:\1.txt', fmOpenRead or fmShareDenyWrite);
   try
     MSQuery1.Insert;
     blob.CopyFrom(fs, fs.Size);
     MSQuery1.Post;
   finally
     fs.Free
   end;
 finally
   blob.Free
 end;
end;


Выдается сообщение: "MSQuery1: Field 'Enclosure' not found."

Что нужно сделать чтобы поле все-таки находилось?


cyborg   (2009-02-17 09:53:00) [1]


> clickmaker

Что-то я стормозил. Пытался сначала остальные поля тоже через блобы добавлять :)


clickmaker   (2009-02-16 16:49:00) [2]

> Как одновременно со вставкой блоба заполнить еще и Int?

ну ё-мое, совсем-то расслабляться уж не надо. Даже если "на форуме часто быстрее можно получить ответ".
добавить еще строчку кода после blob.CopyFrom(fs, fs.Size); не приходило в голову?


cyborg   (2009-02-16 16:44:00) [3]


> Плохиш

Да, неплохо было бы. Хотя на форуме часто быстрее можно получить ответ.

Еще вопрос. Допустим есть таблица: первое поле ID, второе Blob, третье Int. IDшник заполняется автоматически при добавлении новой записи. Как одновременно со вставкой блоба заполнить еще и Int?


Плохиш   (2009-02-16 10:54:00) [4]


> cyborg   (13.02.09 15:45) [10]

Стоит всё-таки прочитать какой букварь по основам выбранного языка программирования...


cyborg   (2009-02-13 15:45:00) [5]


> Сергей М.

Круто! Теперь все работает.
Спасибо, добрый человек!


Сергей М.   (2009-02-13 15:37:00) [6]


> почему для первой записи этого не требовалось?
>


Видимо потоу что НД у тебя при этом по хз какой-то причине ужебыл в режиме вставки, потому ты и не схлопотал исключение. А по-хорошему должен был схлопотать уже при первой записи, если бы при этом НД находился в статусе dsBrowse


Сергей М.   (2009-02-13 15:34:00) [7]


> cyborg


Пример же в справке есть (цитирую):

 try
// сначалаНД переводится в режим редактирования или вставки
   ClientDataSet1.Edit;
// и только послеперевода в этот режим создается блоб-стрим, привязанный к нужному полю
   Stream2 := ClientDataSet1.CreateBlobStream(ClientDataSet1.FieldByName('Remarks'),
bmReadWrite);
   try
...
// ну и наконец сохранение изменений и возврат НД в режим обзора
     ClientDataSet1.Post;
   finally
     Stream2.Free;
   end;


cyborg   (2009-02-13 15:31:00) [8]


> Anatoly Podgoretsky ©

А как его перевести в "edit or insert mode" и почему для первой записи этого не требовалось?


Anatoly Podgoretsky   (2009-02-13 15:25:00) [9]

> cyborg  (13.02.2009 15:14:04)  [4]

Теперь надо что бы было в "edit or insert mode"


Anatoly Podgoretsky   (2009-02-13 15:25:00) [10]

> Petr V. Abramov  (13.02.2009 15:06:03)  [3]

Ну не Линксоиды же, какой еще регистр.


cyborg   (2009-02-13 15:14:00) [11]

Добавил запрос: "Select [Enclosure] from dbo.[Enclosure]". Теперь поле находится, и даже добавляется одна запись. Но когда я хочу добвить следующую, выдается ошибка: "Dataset not in edit or insert mode."
Что за хрень? Почему когда добавляю первую запись DataSet находится в нормальном режиме, а потом в него нельзя добавлять?


Petr V. Abramov   (2009-02-13 15:06:00) [12]

еще можно регистр букв проверить


clickmaker   (2009-02-13 14:48:00) [13]

> Что нужно сделать чтобы поле все-таки находилось?

нужно, чтобы оно было в наборе данных, который возвращает запрос в MSQuery1


Johnmen   (2009-02-13 14:48:00) [14]

Надо, чтобы это поле было в наборе данных.
Что для этого сделать - тебе решать.


Наверх

Титульная страница Поиск, карта сайта Написать письмо