powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / dbExpress - загрузка файла в фоне
16 сообщений из 16, страница 1 из 1
dbExpress - загрузка файла в фоне
    #39730998
-Solo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Использую SQLConnection в паре с SQLQuery.
Добавляю картинку в таблицу
Код: pascal
1.
SQLQuery1.Params.ParamByName('Фото1').LoadFromFile(FileEdit1.Text, ftBlob);


При загрузке подвисает форма, а мне нужно чтобы она не подвисала и перед загрузкой показать окошко, что идёт загрузка, а после загрузки его убрать.

Создавать поток?
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
procedure TThread1.Execute;
begin
  ...
  Synchronize(procedure begin
     SQLQuery1.Params.ParamByName('Фото1').LoadFromFile(FileEdit1.Text, ftBlob);
  end);
  ...
end;



Правильно? И через
Код: pascal
1.
Thread1.OnTerminate := Thread1_Terminate;


Убирать окно.
...
Рейтинг: 0 / 0
dbExpress - загрузка файла в фоне
    #39731012
Фотография krapotkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
создать поток, который выполняет работу, а не рисует на экране
в это время можете запустить на форме крутилку или что-то еще
по окончании потока крутилку прячем, результат используем
...
Рейтинг: 0 / 0
dbExpress - загрузка файла в фоне
    #39731021
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Потоки тут не нужны:
showProgress/Window;
Application.ProcessMessages;
loadfromfile
closeProgress/Window
...
Рейтинг: 0 / 0
dbExpress - загрузка файла в фоне
    #39731054
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-SoloИспользую SQLConnection в паре с SQLQuery.Это dbExpress лли Zeos?

В любом случае, вопрос по клиентской части, а не по MySQL.
...
Рейтинг: 0 / 0
dbExpress - загрузка файла в фоне
    #39731057
-Solo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это dbExpress
...
Рейтинг: 0 / 0
dbExpress - загрузка файла в фоне
    #39731080
-Solo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сделал как посоветовал JaDi, не помогло. Да и вообще как то долго обрабатывается запросы к MySQL на сервере. А если в таблице картинки хранить, то ещё дольше. Думаю, может на сервере через php их посылать, быстрее будет? А картинки хранить на сервере, а в базе ссылки на них.
...
Рейтинг: 0 / 0
dbExpress - загрузка файла в фоне
    #39731120
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-Solo,

загрузка блоба/файла в БД ни в одних известных мне компонентах не сделана "по частям". или "с прерываниями", чтобы можно было воткнуть периодический просчет процента загрузки. Для этого там должен быть предусмотрен коллбэк, а его нет.

Так что, если хочется "загрузку" показывать, надо самостоятельно читать файл блоками и эти блоки также кусками закидывать в блоб. Например, определять исходный размер картинки, делить на 100, и вот этими кусочками перекидывать, рисуя полосу загрузки и не забывая вызвать ProcessMessages.
И
"может на сервере через php их посылать, быстрее будет?"
интересно, каким это образом отправка файла по сети через пхп будет быстрее чем через что-либо еще. Пхп это дополнительный слой, так что будет только медленнее.
...
Рейтинг: 0 / 0
dbExpress - загрузка файла в фоне
    #39731126
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-SoloСделал как посоветовал JaDi, не помогло.

И не могло помочь, потому что он ерунду посоветовал. LoadFromFile - атомарная операция, с
точки зрения твоей программы, её прогресс никак не покажешь. Надо копать внутрь, смотреть
как она устроена и, возможно, на каком-то уровне она перестанет быть атомарной. Вот тогда,
скопировав этот код в своё приложение, ты можешь получить вожделенное.

PS: Также прочитай что делает Synchronize. Засовывать весь код в неё - типичная ошибка
новичка.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
dbExpress - загрузка файла в фоне
    #39731135
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov-SoloСделал как посоветовал JaDi, не помогло.

И не могло помочь, потому что он ерунду посоветовал. LoadFromFile - атомарная операция, с
точки зрения твоей программы, её прогресс никак не покажешь. Надо копать внутрь, смотреть
как она устроена и, возможно, на каком-то уровне она перестанет быть атомарной. Вот тогда,
скопировав этот код в своё приложение, ты можешь получить вожделенное.

PS: Также прочитай что делает Synchronize. Засовывать весь код в неё - типичная ошибка
новичка.

Для показа пользователю плашки с "загружается" Application.ProcessMessages хватит на все 110%
...
Рейтинг: 0 / 0
dbExpress - загрузка файла в фоне
    #39731136
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если хочется заморачиваться с потоками, отслеживанием и т.п. а не использовать банальную плашку с текстом "загрузка", то добро пожаловать изобретать колеса.

Например, если нужен именно прогресс для загрузки -- то поможет как раз таки php и дата аплоадер по http (на стороне пхп достаточно сделать приемку файлов). Не знаю, как у indy, а вот у Clever Internet Suite как раз такое есть (на колбеке можно получать объем загруженного).

P.S. И вообще, в MySQL есть ограничение на объем для файла, по умолчанию несколько мегабайт -- надо увеличивать в настройках (можно нагуглить, что именно менять).
...
Рейтинг: 0 / 0
dbExpress - загрузка файла в фоне
    #39731139
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-Solo> Сделал как посоветовал JaDi, не помогло.

И не могло помочь, ибо чушь (ну будет плашка "висеть"
вместо исходной формы). Делай загрузку в потоке, а в
основном интерфейсе проверяй флаг и "жди" завершения
потока (или сообщения от него).

> Думаю, может на сервере через php их посылать, быстрее будет?

Это ещё более бредовый вариант.

> А картинки хранить на сервере, а в базе ссылки на них.

Это можно (и в БД их можно хранить), но во-первых, это
изменение архитектуры, во-вторых, как-то (и откуда-то) же
они на сервер должны будут попадать ?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
dbExpress - загрузка файла в фоне
    #39731209
-Solo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А когда мы делаем запрос SELECT, допустим вернулось 10 строк из таблицы, с их возвращением автоматически скачиваются картинки?
Или они скачиваются после кода
Код: pascal
1.
 TBlobField(FMain.SQLQuery1.FieldByName('Фото')).SaveToStream(Stream);


А то как то быстро верхний кусочек кода работает, видимо они скачиваются все разом в ответе.
...
Рейтинг: 0 / 0
dbExpress - загрузка файла в фоне
    #39731240
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-Solo,

зависит от компонент. Нормальные компоненты должны иметь опцию "буферизировать блобы" или нет, и если да, то в каком объеме.
Или не буферизировать блобы вовсе, без опций.
...
Рейтинг: 0 / 0
dbExpress - загрузка файла в фоне
    #39731243
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-Solo,

у Рощина есть готовые примеры . Можно в качестве компромиссного варианта для анимации на сплэш положить прогрессбар, и задать ему MarqueeInterval = 20 и Style = pbstMarquee. Тогда, чтобы отвлечь юзера, можно писать в окно какую-нибудь белиберду, пока выполняется длительная операция
...
Рейтинг: 0 / 0
dbExpress - загрузка файла в фоне
    #39731364
-Solo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сделал через загрузку файлов на сервер (IdHTTP1.Put и рhp). А открытие картинок через открытие ссылки на них в браузере.
Всё понравилось и думал уже никаких проблем не будет, но нет.

Вывожу данные в ListView, всё как обычно
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
  SQLQuery1.SQL.Clear;
  SQLQuery1.SQL.Add('SELECT * FROM ......');
  SQLQuery1.Open;
  if (SQLQuery1.RecordCount > 0) then
  begin
    SQLQuery1.First;
    for i := 0 to SQLQuery1.RecordCount - 1 do
    begin
      Item := ListView_ProcessedOrders.Items.Add;
      Item.Caption := SQLQuery1.FieldByName('Id').AsInteger.ToString;
      Item.SubItems.Add(SQLQuery1.FieldByName('ФИО').AsString);
      SQLQuery1.Next;
    end;
  end;
  SQLQuery1.Close;



Решил отфильтровать записи (знаю, что можно на стороне MySQL, захотелось попробовать в делфи)
делаю

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
  SQLQuery1.SQL.Clear;
  SQLQuery1.SQL.Add('SELECT * FROM ......');
  SQLQuery1.Open;
  if (SQLQuery1.RecordCount > 0) then
  begin
    SQLQuery1.First;
    for i := 0 to SQLQuery1.RecordCount - 1 do
    begin
      if то-то то-то then
      begin
        SQLQuery1.Next;
        Continue;
      end;
      Item := ListView_ProcessedOrders.Items.Add;
      Item.Caption := SQLQuery1.FieldByName('Id').AsInteger.ToString;
      Item.SubItems.Add(SQLQuery1.FieldByName('ФИО').AsString);
      SQLQuery1.Next;
    end;
  end;
  SQLQuery1.Close;



Получаю ошибку с чтением адреса в памяти
...
Рейтинг: 0 / 0
dbExpress - загрузка файла в фоне
    #39731369
-Solo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нашёл ошибку, как обычно затупил.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / dbExpress - загрузка файла в фоне
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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