Дерек, спасибо за совет.
Немного не подходит.
Мне надо скрывать строки в таблице без использования кнопок ПОИСК, т.к. это требует создания запроса в каждой кнопке.
У меня программа находится в стадии разработки.
Если я решу изменить вывод столбцов таблицы, то придется менять тексты запросов во всех кнопках.
А это двойная или тройная работа.
Может предложите что-нибудь?

В окне "Настройка компонента таблицы" есть раздел "3.Фильтр (необязательно)".
В этом разделе можно в явном виде указать критерии отбора значений.
Например, Table1.Quantity >= 1.
А можно ли как то указать в этом фильтре не конкретное значение, а что это значение надо брать из поля Edit1?
Конструкция Table1.Quantity >= {Edit1} не работает

Есть таблица, в которой перетасовали строки мышью (изменили порядок строк).
Надо получить id всех записей, перебирая строки в получившемся порядке.
Как получать id записей таблицы перебором строк по порядку?

Есть таблица товаров со столбцом количество.
Надо иметь возможность скрывать/отображать строки в таблице (кликом по чекбоксу)), если кол-во равно нулю и выводить/не выводить такие строки в печатаемый отчет.
Как это лучше сделать?

У меня программа создает отчет в файл pdf и кладет его в программно задаваемый директорий.
Можно ли как то вместе с созданием файла создавать и ссылку на папку с этим файлом в проводнике в Быстром доступе (Win7 и Win10)?
Причем так, чтобы эта ссылка становилась последней из всех ссылок, которые уже есть в быстром доступе.

Есть в инете сервис dadata.ru
Он позволяет закачивать в приложения полные реквизиты организаций, например, по их ИНН.
Позволяет экономить кучу времени автоматически заполняя поля базы данных.
Сервис бесплатный для 10000 запросов в день.
Т.е. - совсем бесплатно smile
На этом сайте есть много готовых модулей как для конкретных программ, так и для языков программирования.
Но, для DELPHI ничего нет.
Подскажите, пожалуйста, можно ли как то прикрутить этот сервис к MVD?

Свойство окна Position в режиме разработчика установлен в poDesigned.
Все BorderIcons и Sizeable установлены в False.
При открытии окна скриптом делаю его максимальным Frm_1.WindowState := wsMaximized; //Windows Maximized
По идее, изменить размер окна из максимального в какой-то другой размер у пользователя нет.
Он может только закрыть форму кнопкой сохранения формы.
Однако, если сделать двойной клик по верхней панельке формы (т.е. на той панели, где отображается Caption формы и где никаких BorderIcons нет, потому что они в False), то форма изменяет свой размер и устанавливается в размер, заданный при разработке.
Каким образом предотвратить такое поведение формы, т.е. не дать ей изменять размер из максимального?

Работаем несколькими пользователями в сетевом режиме (с базой MySQL).
Пользователь 1 открыл проект.
Начал в него вносить изменения.
Пользователь 2 по сети открыл тот же проект.
Внес в него изменения и закрыл проект.
Пользователь 1 закончил вносить изменения и закрыл проект.
Результат - изменения пользователя 2 не сохранились.
Вопрос - какой придумать механизм контроля за тем, что данный проект уже открыт другим пользователем для редактирования?
Наверно можно при открытии окна редактирования проекта записывать в служебную таблицу, что данное окно открылось для редактирования.
А при закрытии окна делать отметку в служебной таблице, что окно "освободилось" для редактирования.
Ну и при каждом открытии окна проверять, "свободно" ли окно для редактирования.
Если не свободно, то клавишу сохранения делать не активной.
Но, при таком подходе, боюсь, окно может не освободиться при закрытии его каким-нибудь нештатным методом.
Кто-нибудь может какое-то более элегантное решение предложить?

Есть форма "Товары".
Ее можно открыть с главной формы, чтобы посмотреть список товаров.
Также эту форму Товары можно открыть с формы Проект, когда добавляются товары в таблицу товаров по данному проекту.
Есть ли возможность открыть форму Товары немодально с главной формы  так, чтобы не закрывая ее можно было работать со вторым экземпляром этой формы, вызываемой из Проекта?

Отлично работает!
...
Подскажите, что не так в коде при заполнении таблицы?
Дает ошибку "Cannot assign a nil to a TColumnFooter.":

procedure Form1_TableGrid1_OnDropFiles (Sender: TObject; ArrayOfFiles: array of string; X, Y: Integer);
var
   j, c: integer;
    NxTextColumn: TNxTextColumn;
begin
    Form1.TableGrid1.Columns.Clear;
    Form1.TableGrid1.Columns.Add(TNxTextColumn);
    Form1.TableGrid1.Columns[0].Color := clWhite;

    c := Length(ArrayOfFiles)-1;
    for j := 0 to c do
    begin
        Form1.TableGrid1.AddRow(1);
        Form1.TableGrid1.Cells[0,j] :=  ArrayOfFiles[j];
    end;


end;

Оба предложенных варианта открытия файлов с помощью ворда работают.
Однако, файл договора может быть не только в ворде, но и в pdf или, вообще, в картинке.
Т.е. надо определять расширение файла перед открытием и либо открывать файл универсальной командой OpenFile (Filename) либо (если doc или docx) открывать командой OpenFile(Filename, 'winword').
Существует ли функция для определения расширения файла?
Или надо разбирать текстовое название файла, чтобы понять его расширение?

Есть таблица, в которую добавляются ссылки на файлы.
Добавление происходит путем использования стандартного диалога открытия файла. Однако, это уже прошлый век и хочется реализовать механизм Drag&Drop, т.е. просто мышью перетаскивать из проводника файлы в эту таблицу.
В Delphi это делается элементарно.
А как сделать это в MVD?
Если пока невозможно, то прошу разработчка добавить соотв. функции.
Рабочий (сам проверял) пример перетаскивания файлов в листбокс (Delphi):
1. Добавить в секцию uses: Shellapi
2. Добавляем в implementation:
//процедура извлечения файлов при перетаскивании
procedure TForm1.WMDropFiles(var Msg: TWMDropFiles);
var
  i: integer;//счетчик файлов
  CountFile: integer;//кол-во файлов
  size: integer;//длина строки, содержащей путь к файлу
  Filename: PChar; //указатель на имя файла
begin
try
  //функция DragQueryFile извлекает имена перемещенных мышью файлов
  //получает кол-во перемещаемых файлов
  CountFile := DragQueryFile(Msg.Drop, $FFFFFFFF, Filename, 255);
  //извлекаем пути перемещаемых файлов и добавляем их в ListBox
  for i := 0 to (CountFile - 1) do
  begin
    //получаем длину строки, содержащей путь к файлу
    size := DragQueryFile(Msg.Drop, i , nil, 0)+1;
    //выделяем память под строку с именем файла
    Filename:= StrAlloc(size);
    //получаем непосредственно само имя файла и путь
    DragQueryFile(Msg.Drop,i , Filename, size);
    //Добавляем его в ListBox
    lst1.items.add(StrPas(Filename));
    //освобождаем строку
    StrDispose(Filename);
  end;
finally
  DragFinish(Msg.Drop); // отпустим файл
end;
end;

3. добавляем процедуру
procedure TForm1.FormCreate(Sender: TObject);
begin
/регистрируем, что ListBox1 будет принимать файлы
  DragAcceptFiles(Form1.Lst1.Handle, True);
//Внимание, если ListBox находится на панели, то для регистрации пишем
//DragAcceptFiles(Form1.Handle, True);
end;

Удалось решить проблему с экспортом в Excel.
Оказывается причиной проблем был китайский WPS Office.
Это самый сильный конкурент Microsoft Office.
Видимо при инсталляции он себя где-то прописывает и в результате подменяет собой Excel.
На втором ПК у нас стоит WPS2019 и при экспорте в Excel открывается именно WPS2019.
Т.е. у WPS2019 полностью совпадает с Excel способ общения по OLE.
А у меня стоял WPS2016, который я установил после деинсталляции WPS2019 (он мне не очень понравился и я откатился на версию 2016).
Стоило мне деинсталлировать WPS2016, как сразу стал нормально работать экспорт в Excel.
Безобразие китайское...
Но, осталось наследие в отношении Ворда - не открываются файлы doc командой OpenFile, если ассоциация таких файлов связана с Word.
Никаких ошибок не выпадает. Просто ничего не происходит когда кликаешь по кнопке, которая должна открыть файл doc.
Если же ассоциировать файлы doc с LibreOffice - то они нормально открываются Либроофисом.
Есть ли у кого-нибудь идеи как заставить OpenFile открывать файлы именно Вордом?

Отчеты не получается использовать для экспорта напрямую в Excel по той же причине - они общаются с Excel через OLE.
Попытка экспорта из отчета в Excel дает ту же ошибку.
...
Однако, если делать экспорт отчета в Open Document Spreadsheet (т.е. в файл .ods) и, при этом, ассоциировать расширение ods с Excel, то после диалога сохранения файла успешно открывается Excel и в нем корректно отражены все данные.
Т.е. проблема экспорта в Excel действительно может быть решена с помощью отчетов.
...
Подскажите, пожалуйста, как передать данные с формы из таблицы в отчет без его отображения (чтобы был выбран экспорт в Open Document Spreadsheet) и  сразу открылся диалог сохранения ods файла, а потом открылся Excel?
...
И есть ли еще какой-то альтернативный способ импорта данных из xls и xlsx файлов, который бы не использовал Excel?

Try не спасает.
На коде CreateOleObject Delphi зависает на две минуты (засекал), а потом выдает свое исключение.
Поймать его своей обработкой ошибки заключив этот код в Try не получается.
Да и ждать появления обработки в течение двух минут не лучший вариант.

Да, наверно, проблему можно решить чисткой реестра от офиса.
Но, я о другом - существующие в MVD (Delphi) средства работы с офисом через OLE не рекомендуются самим Microsoft.
И как доказательство обоснованности их опасений - проблемы на моем ПК.
Я сам разрабатываю программу для работы нескольких пользователей и имею возможность попытаться пофиксить на своем ПК проблемы реестра windows.
Но, если такие же проблемы будут у тех, кто будет пользоваться моей программой, то это станет неразрешимой проблемой.
Хотелось бы иметь в MVD такое решение экспорта-импорта в Excel, которое было бы независимо от OLE, если его Microsoft не рекомендует.
Сейчас же я не могу добиться того, чтобы MVD(Delphi) проверяло бы реальную работоспособность OLE механизма на конкретном ПК и если есть какие-то проблемы с этим, то хотя бы сообщало об этом, а не зависала бы на длительный срок с последующим выпаданием в исключение.

Ну да, может неверно названо.
У меня проблема в том, что независимо от того, установлен Excel на ПК или нет, детектирование наличия Excel средствами MVD или Delphi  всегда дает положительный результат.
Т.е. Result := (CLSIDFromProgID('Excel.Application', CLSID) = S_OK);  всегда возвращает ОК.
А вот дальше механизм OLE не срабатывает.
Спотыкается на CreateOleObject('Excel.Application');
Причем, это самое OLE не работает и для Ворда.
...
Но, проблема оказалась еще шире.
У меня есть кнопка, которая открывает файл, указанный в соотв. поле файла.
Т.е. есть такая команда: OpenFile(Form1.DBFile_1.Text);
Эта команда открывает файл документа программой, который ассоциирован с данным расширением файла.
Так вот оказывается, если у меня установлена ассоциация расширения .doc с, например, LibreOffice, то файл открывается нормально.
Но, если .doc ассоциирован с Вордом, то открытия файла не происходит.
Но и никакой ошибки не появляется.
При этом, сам Ворд и Excel работают нормально и  как положено открывают файлы из проводника.
Вообще ничего не понимаю.
Может у кого есть идеи?

Данная ошибка возникает при попытке импорта или экспорта таблицы в Excel.
Переустановка Office ничего не дала.
Трехнедельные танцы с бубнами по найденным в инете идеям в виде внесения изменений в реестр, изменения прав доступа к объектам и тому подобное, успехов не принесли.
Более того, оказывается сама microsoft открещивается от своего офиса в вопросах автоматизации: https://support.microsoft.com/ru-ru/hel … -of-office
Т.е. она говорит, что при использовании механизма OLE обращение к Office может сработать, а может и нет.
Прямо как у меня - на некоторых ПК все работает нормально, а на одном - возникает ошибка.
Кстати, к Ворду тоже обращение не проходит.
Для эксперимента повторил модуль экспорта на Delphi (создание файла Excel).
Запустил два раза - создание файлов прошло нормально, а третий раз - ошибка приложения-сервера.
И теперь всегда только ошибка возникает.
Вообще - фантастика! Как будто где-то пробка smile
...
Как рекомендует Microsoft, надо работать с Excel без OLE.
На эту тему нашел готовый модуль для Delphi: http://www.delphisources.ru/pages/faq/b … t_ole.html
Поскольку сам я не силен в Delphi, просьба  проверить работу этого кода и если работает включить его в MVD.

Оказывается, что не только коннект с базой пропадает.
Вообще не выполняется код события формы OnShow.
Даже безобидный ShowMessage не срабатывает.
Непонятки.
Похоже, существующий обработчик действительно затирается.
А событий OnCreate и OnPoint вроде в MVD нет

Прикрутил код от vovka3003 к реальному проекту.
Оказалось, что если повесить  DTModeInForms между основными begin и end, или на основной форме где идет соединение с MySQL базой, то соединение отрубается.
Почему - непонятно.
Пришлось повесить на формы, где реально есть даты.
Хорошо, что их нет на основной smile
Отображение формата в ДатаВремя устанавливается так:

      if not Checked then
      Format := #32 else
      begin
        case Kind of
          0:Format := 'dd.MM.yyyy';
          1:Format := 'HH:mm';
          2:begin Format := 'dd.MM.yy'; TimeFormat := 'HH:mm';  end;
        end;

Продолжение проблемы, описанной здесь: http://myvisualdatabase.com/forum/viewtopic.php?id=5403
Решил не тратить время на поиск решения, а просто инсталлировал на ПК Office 2010.
Однако, проблема не решилась.
Простейший код Conn := CreateOleObject('Excel.Application');
приводит к долгому зависанию и затем выдаче сообщения: Ошибка при выполнении приложения-сервера, ProgID: "Excel.Application"
Т.е. при наличии установленного на ПК Excel не работают никакие экспорты-импорты из MVD в Excel.
Хотя сам Excel работает нормально.
Но MVD никак не может получить к нему доступ по OLE.
Проверил реестр:
Там есть ключи
\HKEY_CLASSES_ROOT\Excel.Application
\HKEY_CURRENT_USER\Software\Classes\Excel.Application
\HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Excel.Application
Т.е. по идее не должно быть проблем с нахождением Excel для его запуска.
Но, может что-то с самим механизмом OLE не так.
Может какая служба не запущена?
Или еще что-то?
Есть у кого-нибудь идеи где копать?

Если в режиме разработки в дереве компонентов кликать по названиям компонентам, то они становятся активными (на выбранный компонент на форме переходит фокус).
Однако, почему-то, это не касается закладок компонента PageControl.
Т.е. если кликаем по названию PageControl, то на него фокус на форме переводится.
А если кликать в структуре по вложенным в PageControl названиям закладок, то они не становятся активными на форме.
Становится доступным только свойства этих закладок.
Чтобы активировать эти закладки, надо кликать на них именно на форме.
Это очень неудобно, в частности, в случае, если вся площадь закладки закрыта панелью для придания фону закладки серого цвета вместо белого.
Можно ли добавить в программу перенос фокуса на выбранную закладку (т.е. отображение ее) кликанием по структуре (как должно быть) или добавить свойство background color, чтобы можно было цвет фона закладки сделать серым (кроме цвета активного ярлыка закладки)?

Есть код для импорта из файлов, который работает при наличии установленного в ПК Excel:
Excel := CreateOleObject('Excel.Application');
    XLSFile := Frm_Import_From_Excel.DBFile_XLS.dbFileName;
    Excel.Workbooks.Open(XLSFile);
   и т.д.
Но, если Excel не установлен на ПК, то этот код не работает.
Вопрос: как работать при импорте с Calc из OpenOffice?
Т.е. как создать соотв. объект и совпадает ли синтаксис методов и свойств с Excel?

Протестировал, работает действительно только либо дата, либо время.
Т.е. код:
    case Kind of
          0:Format := 'dd.MM.yyyy';
          1:Format := 'HH:mm';
          2:Format := 'dd.MM.yyyy HH:mm';
некорректно срабатывает для Kind=2 - скрывается/появляется только дата, а время не скрывается.
Вопрос: каким образом правильно указать формат для поля "ДатаВремя", чтобы данные вывелись как  'dd.MM.yyyy HH:mm'?

Никакой системы нет. Может при открытии формы, может при закрытии. Но именно в момент обращения к базе. Происходит редко, 1-2 раза в день. И похоже, что не на всех ПК.  Может это сетевые проблемы или связано с типом операционки