Topic: Перешел на режим LinkFile

Добрый день !
Убрал все изображения из базы .
Подскажите пожалуйста как вывести изображение теперь по клику записи в гриде ?
Из базы было так :

procedure frmTovar_TableGrid2_OnCellClick (Sender: string; ACol, ARow: Integer);
begin
      frmTovar.DBImage1.Clear;
    frmTovar.DBImage1.LoadFromDatabase('Shirina', 'RaskladFoto', frmTovar.TableGrid2.dbItemID);
end;

А как по ссылке из файла ?

Re: Перешел на режим LinkFile

Приветствую,


тогда так, при условии, что свойство CopyTo заполнено у компонента DBImage1

procedure frmTovar_TableGrid2_OnCellClick (Sender: string; ACol, ARow: Integer);
var
    imgFile: string;
begin
     frmTovar.DBImage1.Clear;
     // узнаем имя файла на диске
     imgFile := SQLExecute('SELECT RaskladFoto_filename FROM Shirina WHERE id='+IntToStr(frmTovar.TableGrid2.dbItemID) );

     if imgFile<>'' then
     begin
         Delete(imgFile, 1, 1); // удаляем первый слешь
         frmTovar.DBImage1.Picture.LoadFromFile( imgFile );
     end;
end;
Dmitry.

Re: Перешел на режим LinkFile

Добрый день !
Спасибо , файл находит , но по клику по DBImage1 не переходит на просмотр ( на весь экран ). Активен
только значек загрузки изображения .

Re: Перешел на режим LinkFile

Моя ошибка, будет исправлено в следующей версии, а пока код будет таким

procedure frmTovar_TableGrid2_OnCellClick (Sender: string; ACol, ARow: Integer);
var
    imgFile: string;
begin
     frmTovar.DBImage1.Clear;
     // узнаем имя файла на диске
     imgFile := SQLExecute('SELECT RaskladFoto_filename FROM Shirina WHERE id='+IntToStr(frmTovar.TableGrid2.dbItemID) );

     if imgFile<>'' then
     begin
         Delete(imgFile, 1, 1); // удаляем первый слешь
         frmTovar.DBImage1.dbFileName := imgFile; // добавил эту строчку
         frmTovar.DBImage1.Picture.LoadFromFile( imgFile );
     end;
end;
Dmitry.

Re: Перешел на режим LinkFile

Еще одна проблемка .
Когда все в одной папке - все ок.
Перенес на сервер файл базы и папку с файлами - запись проходит правильно(на форме сохранения записи ), а также при редактировании
записи показывает сохраненное изображение . А вот в режиме показа по клику сообщает , что не может найти файл , и ссылается на путь к папке где расположен ЕХЕ файл программы . В таблицу БД   _filename прописывает правильно ( проверял :  \photo\ 0123.jpg ).

Re: Перешел на режим LinkFile

Не знаю как добавить к imgFile путь расположения  файла базы !

Re: Перешел на режим LinkFile

Leonid
Я доработал программу, чтобы ваш первоначальный вариант из первого сообщения также работал с режимом LinkFile.


Пожалуйста, скачайте файл builder.dll и скопируйте его в папку программы My Visual Database, затем повторно запустите проект, должно все заработать.

https://www.dropbox.com/s/prhcfpwagmjgu … r.zip?dl=0

Dmitry.

Re: Перешел на режим LinkFile

Добрый день !
Скачал  builder.dll  в папку с 1.48 бета . В проекте убрал оператор
frmTovar.DBImage1.dbFileName := imgFile;
Ничего не изменилось .
Т.е. :
--  без этого оператора, по клику на DBImage1 не разворачивает просмотр на весь экран
--  При подключении к базе на сервере ( т.е база с папкой фоток не в папке с моим проектом )
выдает ошибку , что не найден  путь к файлу и указывает путь к папке моего проекта

Re: Перешел на режим LinkFile

Простите ради Бога !!!
Сразу не понял , КАКОЙ  ВАРИАНТ .  Вроде работает .
Чуть позже сообщу о полном тестировании .

Re: Перешел на режим LinkFile

Спасибо !
Все работает .
Т.к. я работал по удаленке , то фотка грузится примерно 4 сек (220 Кб).
По выходу из загрузки перекидывает открытые  формы , и сверху оказывается
неактивная форма . Приходится шлепать по активной , что бы стала верхней .
Есть ли возможность по выходу из этой процедуры активную форму заставить стать верхней ?

procedure frmTovar_TableGrid2_OnCellClick (Sender: string; ACol, ARow: Integer);
begin
      frmTovar.DBImage1.Clear;
    frmTovar.DBImage1.LoadFromDatabase('Shirina', 'RaskladFoto', frmTovar.TableGrid2.dbItemID);
  ??  frmTovar  ???
end;

И еще ---- :  Когда вынес фотки в папку , база соответственно уменьшилась с 22 Мб  до 1.5 Мб , и соответственно
пока не было ошибок  DataBase locked .  8 го проведу более серьезные тесты ( одновременная работа 3х локальных и 2х удаленных
пользователей . О результатах сообщу .

Поэтому режим  LinkFile важная и очень полезная штука . Хотя в дальнейшем хотелось бы иметь возможность автоудаления файла
из папки при удалении записи , т.к  CopyTo все равно дублирует одинаковые по имени файлы .

Re: Перешел на режим LinkFile

Leonid wrote:

Спасибо !
Все работает .
Т.к. я работал по удаленке , то фотка грузится примерно 4 сек (220 Кб).
По выходу из загрузки перекидывает открытые  формы , и сверху оказывается
неактивная форма . Приходится шлепать по активной , что бы стала верхней .
Есть ли возможность по выходу из этой процедуры активную форму заставить стать верхней ?

procedure frmTovar_TableGrid2_OnCellClick (Sender: string; ACol, ARow: Integer);
begin
      frmTovar.DBImage1.Clear;
    frmTovar.DBImage1.LoadFromDatabase('Shirina', 'RaskladFoto', frmTovar.TableGrid2.dbItemID);
  ??  frmTovar  ???
end;

к сожалению не совсем понял, что происходит, можете приложить скриншот?


Leonid wrote:

Поэтому режим  LinkFile важная и очень полезная штука . Хотя в дальнейшем хотелось бы иметь возможность автоудаления файла
из папки при удалении записи , т.к  CopyTo все равно дублирует одинаковые по имени файлы .

Автоудаление будет реализовано в будущем.


А что значит дублирует одинаковые по имени файлы? такого не должно происходить, новый файл, который автоматически копируется в папку, проверяется на конфликт имен, и если такое имя файла уже занято, то файл будет переименован в "имя_файла(1)"
или я не правильно понял )

Dmitry.

Re: Перешел на режим LinkFile

А интересно, этот новый builder.dll будет работать в связке с 1.46 версией?

Re: Перешел на режим LinkFile

zoomix
В принципе будет, но есть некоторые не совместимости, скорей всего скрипты перестанут работать.

Dmitry.

Re: Перешел на режим LinkFile

В 1,47  с данной .dll  не работают скрипты . Все остальное работает . ( пробовал)

Скриншот не поможет .  Я пробую пояснить по другому :   запускаю программу --- открывается Form1,
на этой форме есть кнопка -- показать форму --- открывается Form2 , с Form2  открывается  Form3.
На Form3( это frmTovar)  TableGrid2 и DBImage1. Кликаю запись в TableGrid2 и жду , когда в  DBImage1
появится изображение ( т.е. выполняется   frmTovar.DBImage1.LoadFromDatabase('Shirina', 'RaskladFoto', frmTovar.TableGrid2.dbItemID);)
В зависимости от скорости инета длится это 4-5 сек. . На курсоре часики крутит . Как загрузка кончилась, на мониторе картинка едва
заметно моргнула и   Form2 оказывается верхней , (т.е. перекрывает Form3), но  Form2 не активна ( кликай по ней где хочешь - не реагирует)
Из под  Form2 виден небольшой фрагмент  Form3 . Я по этому фрагменту кликаю , и  Form3 стала на верхний слой , те в правильное положение
Вот такой эффект , но только когда на удаленке . Когда все на одном компе или в локалке , то скорость передачи большая и такого эффекта
не наблюдается.

Про  CopyTo : именно это я и имел ввиду (файл будет переименован в "имя_файла(1)"), --- записи С одинаковым файлом в БД имеют ссылки
не на один файл  , а каждый на свой дубликат .. Поэтому при удалении записи можно удалить и файл .

Простите за эпистолярный жанр , но мне кажется Вам интересны эти нюансы .

Re: Перешел на режим LinkFile

Leonid wrote:

Скриншот не поможет .  Я пробую пояснить по другому :   запускаю программу --- открывается Form1,
на этой форме есть кнопка -- показать форму --- открывается Form2 , с Form2  открывается  Form3.
На Form3( это frmTovar)  TableGrid2 и DBImage1. Кликаю запись в TableGrid2 и жду , когда в  DBImage1
появится изображение ( т.е. выполняется   frmTovar.DBImage1.LoadFromDatabase('Shirina', 'RaskladFoto', frmTovar.TableGrid2.dbItemID);)
В зависимости от скорости инета длится это 4-5 сек. . На курсоре часики крутит . Как загрузка кончилась, на мониторе картинка едва
заметно моргнула и   Form2 оказывается верхней , (т.е. перекрывает Form3), но  Form2 не активна ( кликай по ней где хочешь - не реагирует)
Из под  Form2 виден небольшой фрагмент  Form3 . Я по этому фрагменту кликаю , и  Form3 стала на верхний слой , те в правильное положение
Вот такой эффект , но только когда на удаленке . Когда все на одном компе или в локалке , то скорость передачи большая и такого эффекта
не наблюдается.

Попробуйте пожалуйста добавить это frmTovar.Show;
в итоге получится:

procedure frmTovar_TableGrid2_OnCellClick (Sender: string; ACol, ARow: Integer);
begin
      frmTovar.DBImage1.Clear;
    frmTovar.DBImage1.LoadFromDatabase('Shirina', 'RaskladFoto', frmTovar.TableGrid2.dbItemID);
    frmTovar.Show; // !!
end;

дайте знать, поможет или нет, а то нет локалки под рукой.

Dmitry.

Re: Перешел на режим LinkFile

Добрый день !

"Попробуйте пожалуйста добавить это frmTovar.Show;" -- это не помогло . Но в процессе
тестирования определил следующее :

Этот эффект возникает только тогда , когда мой проект запускается под MVDB , т. е .
сразу после компиляции . Когда идет запуск моего EXE - ка вне среды  MVDB ---- все проходит правильно .
Думаю это связано с особенностями перегрузки памяти . Проект обьемный . Я не думаю , что тут какая то
Ваша проблема .