Спасибо разобрался.

var
  dt:string;
begin
  dt :=DateToStr(Date);//получаем дату.
if Form1.TableGrid1.Cells[0,i] = (dt) then...

Получилось написать неверный скрипт(((.
Поля res.id_print, print.name, res.date вытаскиваются для первого значения WHERE res.id_Priznzam = 1, а нужно чтобы вытаскивались для id  = MAX(res) from res  WHERE res.id_Priznzam = 1.
Нужен подзапрос, но как не крутил - ошибка.

procedure FrmOth1_Button14_OnClick (Sender: TObject; var Cancel: boolean);
begin
 frmOth1.Button14.dbSQL :=   ' select res.id_print, print.name, res.date, MAX(res.res)  '+
                                    ' FROM res LEFT OUTER JOIN print ON res.id_print=print.id '+
                                    ' WHERE res.id_Priznzam = 1 '+
                                    ' GROUP BY res.id_print ';
end;

Здравствуйте.
Есть поле date. Необходимо подкрасить текущую дату. Какой оператор.

...
if Form1.TableGrid1.Cells[8,i] = ???? then
    begin
    for f := 0 to c do
    Form1.TableGrid1.Cell[f,i].Color := $006B8DE7;
...

Здравствуйте. Спасибо.
Получилось прикрутить календарь, но очень криво. Сейчас сразу же проставляется дата пустая, т.к. в календаре не выбрана дата. Все логично. Подскажите как изменить данный скрипт 

if value then s := Form1.dtDateOfBirth.sqlDate;

1)if value then - развернуть календарь Form1.dtDateOfBirth для внесения даты;
2)назначить переменную s :=Form1.dtDateOfBirth
Прикладываю весь скрипт и проект

procedure Form1_Button7_OnClick (Sender: TObject; var Cancel: boolean);
      begin
    ChangeValues1(True);
end;
    procedure ChangeValues1(value: boolean);
var
    i,c: integer;
    s: string;
begin
    if value then s := Form1.dtDateOfBirth.sqlDate;
    c := Form1.GridEmployees.RowCount-1;
    for i := 0 to c do
    begin
        if Form1.GridEmployees.Selected[i] then
        begin
            SQLExecute('UPDATE employees SET DateOfBirth = '+s + ' WHERE id='+IntToStr(Form1.GridEmployees.dbIndexToID(i)));
        end;
    end;
    Form1.GridEmployees.dbUpdate;
end;
Andrei wrote:

База находится в папке с exe-шником и создана в формате SQLite?
Если да, то насколько я понимаю, ваш проект для однопользовательского режима.

Habr о SQLite
А как с архитектурой? Сервера-то нету?
Сервера нету, само приложение является сервером. Доступ к БД происходит через «подключения» к БД (нечто вроде хэндла файла ОС), которые мы открываем через вызов соот-й функции DLL. При открытии указывается имя файла БД. Если такого нету — он автоматически создается.
Допустимо открывать множество подключений к одной и тоже БД (через имя файла) в одном или разных приложениях.
Система использует механизмы блокировки доступа к файлу на уровне ОС, чтобы это все работало
(эти механизмы обычно плохо работают на сетевых дисках, так что не рекомендуется использовать SQlite с файлом на сети).
Изначально SQlite работал по принципу «многие читают — один пишет».
То есть только одно соединение пишет в БД в данный момент времени. Если другие соединения попробуют тоже записать, то словят ошибку SQLITE_BUSY.
Можно, однако, ввести таймаут операций. Тогда подключение, столкнувшись с занятостью БД, будет ждать N секунду прежде, чем отвалиться с ошибкой SQLITE_BUSY.

konstruktor wrote:

тут по сути проблема не с программой, а с базой. Файл базы блокируется и-за какого-то подвисшего компа , и другие не могут уже к базе обращаться. Появляется сообщение  'base is locked' .

База находится в папке с exe-шником и создана в формате SQLite?
Если да, то насколько я понимаю, ваш проект для однопользовательского режима.

Через скрипты.

var
   idUser: integer;
   procedure Form1_TableGrid1_OnClick (Sender: TObject);
begin
        idUser := Form1.TableGrid1.dbItemID;
end;

Дальше работать с кнопками.

Здравствуйте.
Подскажите пожалуйста как выбрать из таблицы Res  записи по 3 принтерам (группировка) для MAX значения поля res.res и условия что id_priznak = 1
                            Res                                                          print                                                         Искомый результат???
id | id_ print |       date       |  res  | id_priznak |               id |      model     |                       res.id |    print.model    |        res.date      |    res.res     |   
1 |      1       | 2021-01-01 |  10   |       1          |               1 |    HP2055    |                           4    |       HP2055      |     2021-01-04    |       40        |
2 |      1       | 2021-01-02 |  20   |       1          |               2 | Xerox 3025  |                           7    |    Xerox 3025   |     2021-01-03    |        30       |
3 |      1       | 2021-01-03 |  30   |        2         |               3 | Xerox 3100  |                          10   |    Xerox 3100   |      2021-01-02   |        20       |   
4 |      1       | 2021-01-04 |  40   |       1          |
5 |      2       | 2021-01-01 |  10   |       1          |
6 |      2       | 2021-01-02 |  20   |        1         |
7 |      2       | 2021-01-03 |  30   |        1         |
8 |      2       | 2021-01-04 |  40   |       2          |
9 |      3       | 2021-01-01 |  10   |       2          |
10|      3       | 2021-01-02 |  20   |        1         |
11|      3       | 2021-01-03 |  30   |        2         |
12|       3      | 2021-01-04 |  40   |       2          |

Здравствуйте.
Подскажите как в данном примере массово изменить поле dateofbirth?

Здравствуйте.
Есть рабочая процедура где Button6 (штатные средства) открытие формы.

 procedure Form1_TableGrid1_OnDoubleClick (Sender: TObject; Action: string);
begin
        idZapr := Form1.TableGrid1.dbItemID;
       idPlat :=SQLExecute ('SELECT id_plat FROM zapros WHERE zapros.id= '+inttostr(idZapr));
         Form1.Button6.Click;
        end;

Подскажите как можно прервать в данной процедуре выполнение открытия формы (Form1.Button6.Click) если это не admin.
Что то вроде следующего НЕ РАБОТАЕТ.

procedure Form1_TableGrid1_OnDoubleClick (Sender: TObject; Action: string);
begin
if (not isAdmin) then exit
else
begin
        idZapr := Form1.TableGrid1.dbItemID;
       idPlat :=SQLExecute ('SELECT id_plat FROM zapros WHERE zapros.id= '+inttostr(idZapr));
         Form1.Button6.Click;
end;
        end;

36

(6 replies, posted in Russian)

Спасибо.
Все оказалось до обидного просто.

37

(6 replies, posted in Russian)

sibprogsistem wrote:

можете прикрепить проект?

Создал имитацию вопроса.
Цель в форме Search при вводе в edit значения '12' вывести три записи
id |  inn
2  |  1211
3  |  1221
6  |  1123

38

(6 replies, posted in Russian)

Подскажите как правильно сделать.
Пример:
tbl1
id |  inn
1  |  1111
2  |  1211
3  |  1221
4  |  1311
На форме edit для ввода инн и Button для вывода в Grid
Нужно чтобы при вводе в edit значения '12'  в грид выдало две записи
id |  inn
2  |  1211
3  |  1221
соответственно при вводе в edit значения '11'  в грид одна запись 1111 и т.д.

Кнопка Button должна сделать select из таблицы tbl1

39

(6 replies, posted in Russian)

Индекс не помог. Пришлось отключить поиск Searchable

40

(6 replies, posted in Russian)

Здравствуйте.
При поиске по ИНН с включенным свойством в ComboBox  Searchable начались серьезные тормоза.
Подскажите пожалуйста может быть есть способ настройки свойства компонента Searchable?
Поможет ли создание индекса по столбцу  ИНН
ALTER TABLE plat ADD INDEX i_inn (inn)?

41

(8 replies, posted in Russian)

Petr
Огромное спасибо.
Это реальный костыль, который работает.
с процедурой OnChange. Рабочий код:

procedure Form_Zapr_ComboBox1_Change(Sender: TObject);
   begin
        Form_Zapr.Edit1.Text := Form_Zapr.ComboBox1.Text;
 end;
procedure Form_Zapr_ComboBox1_OnDropDown (Sender: TObject);
   begin
        Form_Zapr.ComboBox1.dbSQLExecute ('SELECT vhod_numer FROM Zapros GROUP BY vhod_numer ');
 end;
procedure Form_Zapr_Button1_OnClick (Sender: TObject; var Cancel: boolean);
    begin
          Form_Zapr.Button1.dbSQL :=   'select distinct a.id, b.Kod, c.inn, c.name, a.vhod_numer, a.vhod_data, d.name '+
                                'from zapros a '+
                                'join departament b on a.id_departament=b.id '+
                                'join plat c on a.id_plat=c.id '+
                                'join org_zap d on a.id_org_zap=d.id '+
                                'where (a.vhod_numer = {edit1})';

 end;

42

(8 replies, posted in Russian)

Здравствуйте.
Как наложить фильтр на Combobox, что бы он показывал уникальные записи.
Ключи ComboBoxa
ForeignKey: sprav_zapr.id_Zapros
FieldName: vhod_numer
В таблице есть 10 записей с vhod_numer = '100'
Если просто использовать данный ComBobox, то он в ComBoboxе будет показывать 10 записей со значением '100'.
Нужно, чтоб Combobox показал 1 запись со значением '100' и при выборе данной записи в TableGrid вывелось 10 строк.
Если с Combobox этого не может, то как можно это реализовать?

43

(17 replies, posted in Russian)

juke.ivanov wrote:

в программе много багов . и времени уходит гораздо больше для создание простой формы . И платить деньги за сырую программу не вижу смысла. В программе я еще нашел два бага и поэтому программу удаляю не стоит она не денег не времени с ней разбираться . но задумка в целом я считаю не плохая удачи разработчикам. А все кто ей пользуется будьте внимательны в программе много багов . Удачи

Не соглашусь от слова - СОВСЕМ.
2 года назад мне руководством была поставлена задача - сделать "Опросник" для сотрудников организации. Погуглив  - остановился на данном, без преувеличения, шедевре и соответственно купил max лицензию на свой страх и риск. Перед реализацией своего первого проекта в данной программе, представления о программировании у меня было - '0'. Единственное с чем ранее приходилось сталкиваться с SQL. По прошествию  2-х лет я имею опросник и несколько баз. Пусть они корявые и эстетически не красивые, но они - РАБОЧИЕ!!! А самое главное, что худо бедно я начал писать КОД и администрировать MySQL. Огромное СПАСИБО разработчику MVD и ребятам, благодаря которым этот форум и проект "живой".
p.s. Заранее извините за мои на первый взгляд глупые вопросы и темы на форуме. Обращаюсь на форум, только после того, как все перепроверю, но не получается или когда не знаю можно ли так сделать.

44

(1 replies, posted in Russian)

Здравствуйте.
Как правильно написать CONCAT в вычисляемом поле для таблицы a.b

tab a
a.id   | a.b   вычисляемое поле (???)
1         (???)    25, 35, 15
2         (???)    7, 9

tab b
b.id   |  b.id_a  |   b.c
1            1           25
2            1           35
3            1           15
4            2            7
5            2            9

Здравствуйте.
Столкнулся с ситуацией: двое сотрудников сохранили одновременно записи и после закрытия формы в TableGrid1 другой формы не увидели этих записей до закрытия (перехода в другую) формы.
Можно сделать процедуру обновления TableGrid при нажатии кнопки ЗАКРЫТЬ предыдущей формы.
что то типа

procedure Form1_Button7_OnClick (Sender: TObject; var Cancel: boolean);
begin
      Form1.TableGrid1........end;

или только SQL запросом (Select)?

Все намного проще.
я select пропустил.

Здравствуйте.
Ругается  на a.otvet_data = is Null.
Пробовал a.otvet_data = ''  так же выходит ошибка

procedure Form_oth_Button6_OnClick (Sender: TObject; var Cancel: boolean);
     begin
           if (not isAdmin) then
         Form_oth.Button6.dbSQL :=   'distinct a.id, b.name,  a.vhod_numer, a.vhod_data, a.otvet_data, a.otvet_numer '+
                                'from zapros a '+
                                'join departament b on a.id_departament=b.id '+
                                 'where a.otvet_data = is Null and  a.id_departament = '+ inttostr (iddepartament) +
                                else
         Form_oth.Button6.dbSQL :=   'distinct a.id, b.name,  a.vhod_numer, a.vhod_data, a.otvet_data, a.otvet_numer '+
                                'from zapros a '+
                                'join departament b on a.id_departament=b.id '+
                                 'where a.otvet_data = is Null ';

end;

Скрипт в MySQL проходит без ошибок.

select distinct a.id, b.name, a.otvet_data, a.otvet_numer  
from zapros a            
join departament b on a.id_departament=b.id
where a.otvet_data IS NULL  

Здравствуйте.
Как правильно прописать запись значения DateTimePicker4?

 procedure Form_Main_1_Button1_OnClick (Sender: TObject; var Cancel: boolean);
   begin
   SQLExecute('INSERT INTO zapros (otvet_data, otvet_numer) VALUES ('''+Form_Main_1.DateTimePicker4.sqldate+''', '''+form_Main_1.Edit3.Text+''') WHERE ('''+IntToStr(idZapr)+''')');
end;

Ошибка в SQL запросе
SQLExecute('INSERT INTO zapros (otvet_data, otvet_numer) VALUES (''2020-05-17 00:00:00.000'', '28/0569') WHERE ('20')

Спасибо. Код отработал.

50

(6 replies, posted in Russian)

Здравствуйте.
Как написать CONCAT в вычисляемом поле для таблицы a

tab a
id.a   |   вычисляемое поле (???)
1                   25, 35, 15
2                   7, 9

tab b
id.b   |  id_a  |   id_c
1            1           25
2            1           35
3            1           15
4            2            7
5            2            9