Форум: "Начинающим";
Текущий архив: 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