Topic: Фильтрация + удаление записей

Добрый день,
подскажите, пожалуйста 3 вопроса:
1) Есть кнопка удаление файла со скриптом:
procedure NewRecord_Button9_OnClick (Sender: string; var Cancel: boolean);
begin
    sDeletedFile := SQLExecute('SELECT file_filename FROM files WHERE id='+NewRecord.TableGrid1.sqlValue);
    sDeletedFile := ExtractFileDir(Application.ExeName) + sDeletedFile;
end;

Ругается на место sDeletedFile := SQLExecute('SELECT file_filename FROM files WHERE id='+NewRecord.TableGrid1.sqlValue); -  Array type required.
Подскажите в чем может быть проблема

2) Есть 2 таблицы - Main и Files - (связь с Main) - Как настроить на 1 форме 2 таблицы, что бы при выделении MAIN отображались во второй все дочерние записи

3) Явное указание записи файлов в папку не работает - пытался повесить на кнопку при сохранении и при открытии формы - ничего не срабатывает

procedure AddFile_Button1_OnClick (Sender: TObject; var Cancel: boolean);
begin
    AddFile.DBFile1.dbCopyTo:= 'Storage\'+FormatDateTime('yyyy', now);
end;

Post's attachments

Attachment icon Documents.7z 107.82 kb, 77 downloads since 2023-10-09 

с Ув. Андрей

Re: Фильтрация + удаление записей

В MVD существует функция "NewRecord".


Вы называте так Форму и в дальнейшем используете это имя в скрипте.
Скрипт распознает это как функцию и есстественно указывает, что неправильные аргументы функции а не вашего запроса.
Переименуйте Форму и внесите изменения в скрипте.


Аккуратнее надо быть с зарезервироваными словами которые есть в SQL, Паскале и MVD.

Re: Фильтрация + удаление записей

Тоже думал, но так и не дошел до изменения.
поправил, один вопрос отпал

Спасибо большое

sparrow wrote:

В MVD существует функция "NewRecord".


Вы называте так Форму и в дальнейшем используете это имя в скрипте.
Скрипт распознает это как функцию и есстественно указывает, что неправильные аргументы функции а не вашего запроса.
Переименуйте Форму и внесите изменения в скрипте.


Аккуратнее надо быть с зарезервироваными словами которые есть в SQL, Паскале и MVD.

с Ув. Андрей

Re: Фильтрация + удаление записей

3. Читаем внимательно


http://myvisualdatabase.com/help_ru/CopyTo.html

Re: Фильтрация + удаление записей

sparrow wrote:

3. Читаем внимательно


http://myvisualdatabase.com/help_ru/CopyTo.html

Поменял тип, получаю ошибку

Post's attachments

Attachment icon 2023-10-09_163419.jpg 52.4 kb, 20 downloads since 2023-10-09 

с Ув. Андрей

Re: Фильтрация + удаление записей

Это следствие ошибки, запрос который не выполнился. А ошибка в предыдущем сообщении.
Когда переведете и прочитаете поймете о чем речь.

7 (edited by sparrow 2023-10-09 11:21:01)

Re: Фильтрация + удаление записей

Что касается 2 вопроса - это самое простое.


Создаете кнопку поиск. Искать в TableGrid1,
искать в таблице files,
поле calc_filename,
выводить в TableGrid2.

Для свойства инкрементный поиск TableGrid1 выбираем имя кнопки которую создали.

И если вы просите помощи постарайтесь заполнить тестовыми данными базу.


Подскажу по предыдущей ошибке. В связи с изменением типа одно из полей таблицы files не должно записываться как NULL (Ограничение NOT NULL не выполнено).

8 (edited by andrey.yugay 2023-10-09 12:14:29)

Re: Фильтрация + удаление записей

sparrow wrote:

Подскажу по предыдущей ошибке. В связи с изменением типа одно из полей таблицы files не должно записываться как NULL (Ограничение NOT NULL не выполнено).

Убрал - Обязательные поля и все нормально.

Спасибо огромное за помощь

с Ув. Андрей

Re: Фильтрация + удаление записей

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

с Ув. Андрей

Re: Фильтрация + удаление записей

Используйте событие OnClick кнопки удаления.
Сначала скопируйте файлы а затем удаляйте.

11 (edited by andrey.yugay 2023-10-17 12:51:22)

Re: Фильтрация + удаление записей

По событиям понятно, не пойму как вытащить имя файла что бы скопировать его... Пробовал копировать в текстовое поле при создании (сохранять в таблицу в отдельное поле) сохранять просто имя файла - ничего не срабатывает.

procedure frmNewRecord_Button9_OnClick (Sender: TObject; var Cancel: boolean);
begin
    sDeletedFile := SQLExecute('SELECT file_filename FROM files WHERE id='+frmNewRecord.TableGrid1.sqlValue);
    sDeletedFile := ExtractFileDir(Application.ExeName) + sDeletedFile;

    files_backup := SQLExecute('SELECT fname FROM files WHERE id='+frmNewRecord.TableGrid1.sqlValue);
    ShowMessage(sDeletedFile+' '+files_backup);
    CopyFile(sDeletedFile, 'backup\'+FormatDateTime('yyyy', now)+'\'+files_backup);
end;

с Ув. Андрей

Re: Фильтрация + удаление записей

andrey.yugay wrote:

По событиям понятно, не пойму как вытащить имя файла что бы скопировать его... Пробовал копировать в текстовое поле при создании (сохранять в таблицу в отдельное поле) сохранять просто имя файла - ничего не срабатывает.

имяВашегоПоляФайла_filename

Re: Фильтрация + удаление записей

а вот это, что у  вас ?


    sDeletedFile := SQLExecute('SELECT file_filename FROM files WHERE id='+NewRecords.TableGrid1.sqlValue);
    sDeletedFile := ExtractFileDir(Application.ExeName) + sDeletedFile;

14 (edited by andrey.yugay 2023-10-17 12:53:24)

Re: Фильтрация + удаление записей

Это удаление файла

sparrow wrote:

а вот это, что у  вас ?


    sDeletedFile := SQLExecute('SELECT file_filename FROM files WHERE id='+NewRecords.TableGrid1.sqlValue);
    sDeletedFile := ExtractFileDir(Application.ExeName) + sDeletedFile;

Полный код такой:
begin
    sDeletedFile := SQLExecute('SELECT file_filename FROM files WHERE id='+frmNewRecord.TableGrid1.sqlValue);
    sDeletedFile := ExtractFileDir(Application.ExeName) + sDeletedFile;

    files_backup := SQLExecute('SELECT fname FROM files WHERE id='+frmNewRecord.TableGrid1.sqlValue);
    ShowMessage(sDeletedFile+' '+files_backup);
    CopyFile(sDeletedFile, 'backup\'+FormatDateTime('yyyy', now)+'\'+files_backup);
end;

с Ув. Андрей

Re: Фильтрация + удаление записей

не уверен )) Если только вы не поменяли имена полей.

Re: Фильтрация + удаление записей

andrey.yugay wrote:

sDeletedFile := SQLExecute('SELECT file_filename FROM files WHERE id='+frmNewRecord.TableGrid1.sqlValue);
    sDeletedFile := ExtractFileDir(Application.ExeName) + sDeletedFile;

это не нужно,  в поле filename уже храниться путь к файлу

17 (edited by pavlenko.vladimir.v 2023-10-17 15:31:53)

Re: Фильтрация + удаление записей

Пользуйтесь!

procedure Form1_TableGrid1_OnCellClick (Sender: TObject; ACol, ARow: Integer);
begin
  // полное имя файла (путь к файлу)
  Form1.Edit1.Text := SQLExecute('SELECT w_filename FROM a WHERE id='+Form1.TableGrid1.sqlValue);
  // путь к папке рассположения файла c (\)
  Form1.Edit2.Text := ExtractFilePath(SQLExecute('SELECT w_filename FROM a WHERE id='+Form1.TableGrid1.sqlValue));
  // путь к папке рассположения файла, без (\)
  Form1.Edit3.Text := ExtractFileDir(SQLExecute('SELECT w_filename FROM a WHERE id='+Form1.TableGrid1.sqlValue));
  // диск рассположения файла
  Form1.Edit4.Text := ExtractFileDrive(SQLExecute('SELECT w_filename FROM a WHERE id='+Form1.TableGrid1.sqlValue));
  // расширение файла
  Form1.Edit5.Text := ExtractFileExt(SQLExecute('SELECT w_filename FROM a WHERE id='+Form1.TableGrid1.sqlValue));
  // имя файла с расширением
  Form1.Edit6.Text := ExtractFileName(SQLExecute('SELECT w_filename FROM a WHERE id='+Form1.TableGrid1.sqlValue));
  // папка рассположения файла
  Form1.Edit7.Text := ExtractFilePath(SQLExecute('SELECT w_filename FROM a WHERE id='+Form1.TableGrid1.sqlValue));

 // если путь к папке или файлу относительный то нужно использовать:
 // ExtractFilePath (ParamStr (0)) - путь к программе
 // application.ExeName - полный путь к исполняемому файлу
 // ExtractFileDir(application.ExeName) - адрес папки (корня) рассположения исполняемого файла без (\) на конце
end;

procedure Form1_Button2_OnClick (Sender: TObject; var Cancel: boolean);
var
sFile: string = SQLExecute('SELECT w_filename FROM a WHERE id='+Form1.TableGrid1.sqlValue);
sCopy : string ='backup\'+FormatDateTime('yyyy', now);
begin
  if FileExists(ExtractFileDir(application.ExeName)+sFile) then
  begin
    if sDir(sCopy) then
    begin
      if not CopyFile( ExtractFileDir(application.ExeName)+sFile, ExtractFilePath(application.ExeName)+sCopy+
      '\'+FormatDateTime('DD_hh.mm.ss', now)+ExtractFileName(sFile), False) then showmessage('Ошибка копирования файла');
    end else  showmessage('Ошибка создание каталога');
  end else showmessage('Такого файла нет');
end;

function sDir (sName: String): Boolean;
begin
  if (DirectoryExists(sName)) then Result  := True else
   if (CreateDir(sName)) then  Result  := True else Result  := False;
end;

Хотел понтануться и сделать  через (try), но сам запутался smile smile

Post's attachments

Attachment icon test.rar 124.06 kb, 60 downloads since 2023-10-17 

Re: Фильтрация + удаление записей

Доброго утра, можно материться от восторга?!
Спасибо огромное за подробное объяснение каждого шага, очень признателен.
Хорошего дня!

pavlenko.vladimir.v wrote:

Пользуйтесь!

procedure Form1_TableGrid1_OnCellClick (Sender: TObject; ACol, ARow: Integer);
begin
  // полное имя файла (путь к файлу)
  Form1.Edit1.Text := SQLExecute('SELECT w_filename FROM a WHERE id='+Form1.TableGrid1.sqlValue);
  // путь к папке рассположения файла c (\)
  Form1.Edit2.Text := ExtractFilePath(SQLExecute('SELECT w_filename FROM a WHERE id='+Form1.TableGrid1.sqlValue));
  // путь к папке рассположения файла, без (\)
  Form1.Edit3.Text := ExtractFileDir(SQLExecute('SELECT w_filename FROM a WHERE id='+Form1.TableGrid1.sqlValue));
  // диск рассположения файла
  Form1.Edit4.Text := ExtractFileDrive(SQLExecute('SELECT w_filename FROM a WHERE id='+Form1.TableGrid1.sqlValue));
  // расширение файла
  Form1.Edit5.Text := ExtractFileExt(SQLExecute('SELECT w_filename FROM a WHERE id='+Form1.TableGrid1.sqlValue));
  // имя файла с расширением
  Form1.Edit6.Text := ExtractFileName(SQLExecute('SELECT w_filename FROM a WHERE id='+Form1.TableGrid1.sqlValue));
  // папка рассположения файла
  Form1.Edit7.Text := ExtractFilePath(SQLExecute('SELECT w_filename FROM a WHERE id='+Form1.TableGrid1.sqlValue));

 // если путь к папке или файлу относительный то нужно использовать:
 // ExtractFilePath (ParamStr (0)) - путь к программе
 // application.ExeName - полный путь к исполняемому файлу
 // ExtractFileDir(application.ExeName) - адрес папки (корня) рассположения исполняемого файла без (\) на конце
end;

procedure Form1_Button2_OnClick (Sender: TObject; var Cancel: boolean);
var
sFile: string = SQLExecute('SELECT w_filename FROM a WHERE id='+Form1.TableGrid1.sqlValue);
sCopy : string ='backup\'+FormatDateTime('yyyy', now);
begin
  if FileExists(ExtractFileDir(application.ExeName)+sFile) then
  begin
    if sDir(sCopy) then
    begin
      if not CopyFile( ExtractFileDir(application.ExeName)+sFile, ExtractFilePath(application.ExeName)+sCopy+
      '\'+FormatDateTime('DD_hh.mm.ss', now)+ExtractFileName(sFile), False) then showmessage('Ошибка копирования файла');
    end else  showmessage('Ошибка создание каталога');
  end else showmessage('Такого файла нет');
end;

function sDir (sName: String): Boolean;
begin
  if (DirectoryExists(sName)) then Result  := True else
   if (CreateDir(sName)) then  Result  := True else Result  := False;
end;

Хотел понтануться и сделать  через (try), но сам запутался smile smile

с Ув. Андрей