powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Запись BLOB в БД - another user changed record
19 сообщений из 19, страница 1 из 1
Запись BLOB в БД - another user changed record
    #34045974
muk07
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Среда: MSSQL 2000 CBuilder5 BDE
Имею текст для помещения картинки в БД. Получаю отлуп. В поиске не нашёл.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
void __fastcall TfrmBLOB::mnuLoadClick(TObject *Sender){
if(!dlg->Execute()){ // TOpenPictureDialog
    return;
}
int ID=que->FieldByName("Tovar_ID")->AsInteger; // ID беру из другого запроса
TQuery *q=CreateQuery(db, // это моя ф-я создаёт запрос и подставляет параметры
  "select Tovar_ID, Photo from Tovar where Tovar_ID=:ID",
  "ID",INT_TYPE,ID,
   0 );
q->RequestLive=true;
q->Open();
TBlobField *b=(TBlobField *)q->FieldByName("Photo");
q->Edit();
TBlobStream *bs=new TBlobStream(b,bmWrite);
char buf[BUFSIZE];
FILE *f=fopen(dlg->FileName.c_str(),"rb");
int nByte;
do{
    nByte=fread(buf, 1 ,BUFSIZE,f);
    bs->Write(buf,nByte);
} while(BUFSIZE==nByte);
fclose(f);
q->Post();  // ВОТ ЗДЕСЬ "another user changed record"
delete bs;
delete q;
}
...
Рейтинг: 0 / 0
Запись BLOB в БД - another user changed record
    #34045977
muk07
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дополнение: LoadFromFile приводит к тому же результату.
...
Рейтинг: 0 / 0
Запись BLOB в БД - another user changed record
    #34046195
Dmitrii K.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://groups.google.com/group/borland.public.delphi.database.sqlservers/browse_thread/thread/97f8a3658ee2a1ed/3ddea86a5465b0a2%233ddea86a5465b0a2

Попробуй поставить UpdateMode в UpdateKeyOnly.

А ещё лучше откажись от BDE.
...
Рейтинг: 0 / 0
Запись BLOB в БД - another user changed record
    #34046402
muk07
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Dmitrii K.
спасибо, upWhereKeyOnly помогло.
От BDE отказаться нельзя - задаче 6 лет и надо рехнуться, чтобы её переписывать.
Вашу ссылку прочитал. Никак не думал, что дело в сравнении float.
...
Рейтинг: 0 / 0
Запись BLOB в БД - another user changed record
    #34046452
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
muk07От BDE отказаться нельзя - задаче 6 лет и надо рехнуться, чтобы её переписывать.


Можно на ODAC относительно малой кровью
...
Рейтинг: 0 / 0
Запись BLOB в БД - another user changed record
    #34046480
Dmitrii K.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gluk (Kazan) muk07От BDE отказаться нельзя - задаче 6 лет и надо рехнуться, чтобы её переписывать.


Можно на ODAC относительно малой кровью
Для MSSQL, кажись, SDAC.

muk07задаче 6 лет и надо рехнуться, чтобы её переписывать
Вам виднее, но если жить задача будет ещё долго, то может и стоит переписать.
...
Рейтинг: 0 / 0
Запись BLOB в БД - another user changed record
    #34046709
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitrii K. Gluk (Kazan) muk07От BDE отказаться нельзя - задаче 6 лет и надо рехнуться, чтобы её переписывать.


Можно на ODAC относительно малой кровью
Для MSSQL, кажись, SDAC.

muk07задаче 6 лет и надо рехнуться, чтобы её переписывать
Вам виднее, но если жить задача будет ещё долго, то может и стоит переписать.

да, конечно, был невнимателен
...
Рейтинг: 0 / 0
Запись BLOB в БД - another user changed record
    #34047013
muk07
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Папа говорил сыну: сынок не трогай работающую программу. Это АСУ ВУЗа. 13 клиентов. ~9-10 mb исходного текста. Кроме того, я не понимаю неприязни к BDE. В ADO тоже есть свои "прелести".
Однако, есть другие задачи, помельче - я подумаю, спасибо за совет.
...
Рейтинг: 0 / 0
Запись BLOB в БД - another user changed record
    #34047016
muk07
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Папа говорил сыну: сынок не трогай работающую программу. Это АСУ ВУЗа. 13 клиентов. ~9-10 mb исходного текста. Кроме того, я не понимаю неприязни к BDE. В ADO тоже есть свои "прелести".
Однако, есть другие задачи, помельче - я подумаю, спасибо за совет.
...
Рейтинг: 0 / 0
Запись BLOB в БД - another user changed record
    #34049720
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
q->RequestLive=true;

- зачем бы это было нужно ?
Чего, руками не написать соотв. UPDATE ?
...
Рейтинг: 0 / 0
Запись BLOB в БД - another user changed record
    #34052334
muk07
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv Чего, руками не написать соотв. UPDATE ?
Это моя мечта- написать
update Table set имя_blob-поля=А ЗДЕСЬ ЧТО?!!!!!!!!!!!
...
Рейтинг: 0 / 0
Запись BLOB в БД - another user changed record
    #34052335
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
muk07update Table set имя_blob-поля=А ЗДЕСЬ ЧТО?!!!!!!!!!!!а здесь параметр
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Запись BLOB в БД - another user changed record
    #34052383
muk07
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А параметр - картинка. Как её затолкать в параметр?
...
Рейтинг: 0 / 0
Запись BLOB в БД - another user changed record
    #34053618
muk07
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Карабас Барабас
Спасибо, Вы всё таки натолкнули меня на решение:
Имею процедуру:
Код: plaintext
1.
2.
3.
4.
5.
6.
CREATE PROCEDURE dbo.UpdateFoto @Tovar_ID int, @Photo image AS
begin
set nocount on
update Tovar set Photo=@Photo where Tovar_ID=@Tovar_ID
end
GO
и текст на клиенте:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
TParam *p;
if(!dlg->Execute()){ // TOpenPictureDialog
    return;
}
int ID=que->FieldByName("Tovar_ID")->AsInteger;
TStoredProc *st=new TStoredProc(this);;
st->DatabaseName=db->DatabaseName;
st->StoredProcName="dbo.UpdateFoto";
p=st->Params->CreateParam(ftInteger,"@Tovar_ID",ptInput);
p->Value=ID;
p=st->Params->CreateParam(ftBlob,"@Photo",ptInput);
p->LoadFromFile(dlg->FileName,ftBlob);
st->ExecProc();
delete st;
Прекрасно работает
...
Рейтинг: 0 / 0
Запись BLOB в БД - another user changed record
    #34053726
muk07
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ещё короче, через TQuery:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
if(!dlg->Execute()){ // TOpenPictureDialog
    return;
}
int ID=que->FieldByName("Tovar_ID")->AsInteger;
TQuery *q=CreateQuery(db, // это моя ф-я с переменн числом аргументов, создающая запрос с параметрами
  "update Tovar set Photo=:Photo where Tovar_ID=:Tovar_ID",
  "Photo",BLOB_TYPE,dlg->FileName.c_str(),
  "Tovar_ID",INT_TYPE,ID,
   0 );
q->ExecSQL();
...
Рейтинг: 0 / 0
Запись BLOB в БД - another user changed record
    #34054545
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
muk07Имею текст для помещения картинки в БД. Получаю отлуп. В поиске не нашёл.

а в FAQ не пробовали смотреть ?

http://www.sql.ru/faq/faq_topic.aspx?fid=334
...
Рейтинг: 0 / 0
Запись BLOB в БД - another user changed record
    #34054977
muk07
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Lepsik
Пробовал. И то, на что Вы даёте ссылку мне не понравилось из-за использования TBlobField, и следовательно, открытого набора и ограничений, связанных с BLOBS TO CACHE (BDE). Правда, за BLOB SIZE всё равно приходится следить.
...
Рейтинг: 0 / 0
Запись BLOB в БД - another user changed record
    #34055495
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
muk07>Lepsik
Пробовал. И то, на что Вы даёте ссылку мне не понравилось из-за использования TBlobField, и следовательно, открытого набора и ограничений, связанных с BLOBS TO CACHE (BDE). Правда, за BLOB SIZE всё равно приходится следить.

а что там ограничения ? я BDE не пользую и файлы свыше 300 мег через ADO легко в поле вкачиваю.
...
Рейтинг: 0 / 0
Запись BLOB в БД - another user changed record
    #34055537
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lepsik muk07>Lepsik
Пробовал. И то, на что Вы даёте ссылку мне не понравилось из-за использования TBlobField, и следовательно, открытого набора и ограничений, связанных с BLOBS TO CACHE (BDE). Правда, за BLOB SIZE всё равно приходится следить.

а что там ограничения ? я BDE не пользую и файлы свыше 300 мег через ADO легко в поле вкачиваю.

У него видимо патч просто не постален на BCB 5

Я могу и ошибатcья , но помоему с какойто такой ошибой связанно.
хотя может и путаю с "BOF and EOF ..."
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Запись BLOB в БД - another user changed record
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]