Лена |
Отправлено: 21.11.2006, 18:47 |
|
Мастер участка
Группа: Участник
Сообщений: 501
|
Иногда при пересылки картинки в базу выскакивает исключение. Кто знает, как это побороть?
Присоединить изображение
|
|
olegenty |
Отправлено: 22.11.2006, 08:21 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
приведи код запроса на вставку, код посыла с клиента, СУБД, версию, ОС...
|
|
Лена |
Отправлено: 22.11.2006, 10:30 |
|
Мастер участка
Группа: Участник
Сообщений: 501
|
База postgresql. Windows XP SP2 Media Edition.
Отправка:
CODE |
try{
TWaitCursor cursor(crSQLWait);
AnsiString fileName = PathFolder;
auto_ptr<TMemoryStream> stream(new TMemoryStream());
auto_ptr<Graphics::TBitmap> bitmap(new Graphics::TBitmap());
AnsiString EXE = ExtractFileExt(fileName);
if( EXE ==".jpg" || EXE ==".jpeg" || EXE ==".JPG" || EXE ==".JPEG")
{
auto_ptr<TJPEGImage> jpeg (new TJPEGImage());
jpeg->LoadFromFile(fileName);
bitmap->Assign(jpeg.get());
}
else
{
bitmap->LoadFromFile(fileName);
}
bitmap->SaveToStream(stream.get());
//bitmap->SaveToFile("1234.jpg");
stream->Position = 0;
DataModule2->ADOQueryPhoto->Parameters->ParamByName("img")->LoadFromStream(stream.get(), ftBlob);
DataModule2->ADOQueryPhoto->Parameters->ParamByName("id")->Value = DataModule2->ClientDataSetVisid->AsInteger;
DataModule2->ADOQueryPhoto->ExecSQL();
}
catch(...)
{
ShowMessage("Íå óäàëîñü îòïðàâèòü ôîòîãðàôèþ â áàçó");
}
|
В ADOQueryPhoto: UPDATE photos SET photo=:img WHERE id =:id
параметр img: ftBlob, id: ftInteger.
Получение из базы, при нажатии на кнопку. Картинка появляется в DBImage привязанном к полю photo:
CODE |
TWaitCursor cursor(crSQLWait);
DataModule2->ADOQueryX->Active = false;
DataModule2->ADOQueryX->Parameters->ParamByName("cur")->Value = DataModule2->ClientDataSetVisid->AsInteger;
DataModule2->ADOQueryX->Active = true;
|
Где ADOQueryX имеет в дизайне select photo from photos where id=:cur
Исключение возникает не всегда. |
|
olegenty |
Отправлено: 22.11.2006, 12:24 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
грабля скорее всего в ODBC драйвере.
|
|
Лена |
Отправлено: 22.11.2006, 14:55 |
|
Мастер участка
Группа: Участник
Сообщений: 501
|
QUOTE (olegenty @ 22.11.2006, 12:24) | грабля скорее всего в ODBC драйвере. |
Наверное так и есть. Вот новый код, пока не дал такого исключения, но думаю все равно оно вылезит:
CODE |
try{
TWaitCursor cursor(crSQLWait);
AnsiString fileName = PathFolder;
auto_ptr<TMemoryStream> stream(new TMemoryStream());
auto_ptr<TJPEGImage> jpeg (new TJPEGImage());
jpeg->LoadFromFile(fileName);
jpeg->CompressionQuality = 10;
//jpeg->Compress();
jpeg->SaveToStream(stream.get());
stream->Position = 0;
DataModule2->ADOQueryPhoto->Parameters->ParamByName("img")->LoadFromStream(stream.get(), ftBlob);
DataModule2->ADOQueryPhoto->Parameters->ParamByName("id")->Value = DataModule2->ClientDataSetVisid->AsInteger;
DataModule2->ADOQueryPhoto->ExecSQL();
}
catch(...)
{
ShowMessage("Íå óäàëîñü îòïðàâèòü ôîòîãðàôèþ â áàçó");
}
|
Далее отказ от DBImage потому что он не поддерживает загрзку jpg. Загрузка идет теперь в Image1. |
|