Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.04.05;
Скачать: [xml.tar.bz2];

Вниз

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

 
cyborg   (2009-02-13 14:41) [0]

Хочу сохранить в базе файл. Делаю это следующим образом.
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."

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


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

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

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


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

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


 
Petr V. Abramov ©   (2009-02-13 15:06) [3]

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


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

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


 
Anatoly Podgoretsky ©   (2009-02-13 15:25) [5]

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

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


 
Anatoly Podgoretsky ©   (2009-02-13 15:25) [6]

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

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


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


> Anatoly Podgoretsky ©

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


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


> cyborg


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

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



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


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


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


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


> Сергей М.

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


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


> cyborg   (13.02.09 15:45) [10]

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


 
cyborg   (2009-02-16 16:44) [12]


> Плохиш

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

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


 
clickmaker ©   (2009-02-16 16:49) [13]

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

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


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


> clickmaker

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



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2009.04.05;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.006 c
2-1235022461
Alexandra
2009-02-19 08:47
2009.04.05
Как передать Values в DBGrid?


15-1233246083
AlexDan
2009-01-29 19:21
2009.04.05
ICQ 6.5


9-1178564278
Dovlet
2007-05-07 22:57
2009.04.05
KAk sozdat 3d cube s pomoshyu t.canvas


2-1234419901
pavel_guzhanov
2009-02-12 09:25
2009.04.05
как программно определить, запущен ли брандмауэр на компьютере?


4-1207672562
TCrash
2008-04-08 20:36
2009.04.05
Перечень дисков





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский