Simple-Scada forum

Simple-Scada 2 => Ваши вопросы => Тема начата: Серега от 14 Января 2025, 16:26:53

Название: Работа с директориями и файлами
Отправлено: Серега от 14 Января 2025, 16:26:53
Добрый день!
В секундном скрипте делаем обработку добавления в ячейки таблицы через ScanDirectory имен файлов в директории GetProjectPath + 'User files\'.
Создание файлов через проводник системы (так как знаем, что создать через скаду нельзя) четко отображается в скаде. Есть нюансы с превышением количества файлов над количеством таблицы. Но это чуть позже разбираться будем. Сейчас 3 строки = 3 файла.
Далее через скрипт Table1_OnCellClick(выбираем имя файла) и скрипт кнопки Button1_OnClick(директория + имя файла и действие удаление файла) удаляем файл.
В проводнике наблюдаем удаление файла.
Но вот обновление таблицы через секундный скрипт не происходит. Переход на другую страницу не помогло. Такое ощущение, что не меняется ответ от ScanDirectory.
Секундный скрипт:
Код: (delphi)
var
  i: Integer;
  pathFileLocal:string;
  aList: TM_ScanDirResult;
begin
  pathFileLocal := GetProjectPath + 'User files\';
  aList := ScanDirectory(pathFileLocal, sdtFiles);
  for i := 0 to aList.Count - 1 do
  begin
    Table1.Columns[0].Cells[i+1].Text := IntToStr(i);
    Table1.Columns[1].Cells[i+1].Text := aList[i].Name;
  end;
end.

Можете подсказать что не так?
Жду вопросов и предложений.
Название: Re: Работа с директориями и файлами
Отправлено: Simple Scada от 15 Января 2025, 14:05:03
Здравствуйте.

Цитировать
Но вот обновление таблицы через секундный скрипт не происходит. Переход на другую страницу не помогло. Такое ощущение, что не меняется ответ от ScanDirectory.
При выполнении Вашего скрипта в таблице будет перезаписываться только то количество строк, сколько было найдено файлов, а в остальных строках таблицы будет сохраняться старая информация (из предыдущего заполнения таблицы). Пример скрипта с очисткой лишних строк:
Код: (delphi)
var
  i: Integer;
  pathFileLocal: string;
  aList: TM_ScanDirResult;
begin
  pathFileLocal := GetProjectPath + 'User files\';
  aList := ScanDirectory(pathFileLocal, sdtFiles);
  for i := 1 to Table1.RowCount - 1 do
    if i <= aList.Count then
    begin
      Table1.Columns[0].Cells[i].Text := IntToStr(i);
      Table1.Columns[1].Cells[i].Text := aList[i - 1].Name;
    end else
    begin
      Table1.Columns[0].Cells[i].Text := '';
      Table1.Columns[1].Cells[i].Text := '';
    end;
end.

Цитировать
Есть нюансы с превышением количества файлов над количеством таблицы. Но это чуть позже разбираться будем.
В скриптах нет возможности динамически добавлять/удалять строки таблицы.

Цитировать
В секундном скрипте
Рекомендуем задать нужный интервал выполнения скрипта (https://clck.ru/3Fkn8p), например 10 секунд, чтобы скрипт не выполнялся бесполезно каждую секунду.
Название: Re: Работа с директориями и файлами
Отправлено: Серега от 15 Января 2025, 15:29:04
Добрый день!
В принципе к обнулению таблицы то же думал обратиться. Спасибо за решение.
Ну а сам скрипт думаю повесить на кнопку. Если надо нажми, посмотри, выбери и сделай что надо. А при окончании работы это все обнулиться.
 
Название: Re: Работа с директориями и файлами
Отправлено: ARV от 20 Января 2025, 13:36:28
В скриптах нет возможности динамически добавлять/удалять строки таблицы.
Но можно извратиться при помощи базы данных и SQL-запроса: сначала в БД создаем табличку с теми строками, которые надо впихнуть в таблицу, а затем, когда этот запрос отработает, делаем запрос из таблицы Simple-Scada... Потом можно в базе таблицу удалить.