Здравствуйте.
Не могу понять в чем дело. Программа ругается именно на синтаксис...
Action Sql запрос Button2

select distinct b.vhod_data, c.sprav_zapros, a.data, a.numer
from sprav a
join zapros b on a.id_zapros=b.id
join sprav_zapros c on a.id_sprav_zapros=c.id
where b.id = '+ intToStr(idzapr)   

Ругается на  '+ intToStr(idzapr)
idzapr: integer; глобальная
на форме по другой кнопке Button1 запись проходит (переменная в памяти) рабочий скрипт
  SQLExecute('INSERT INTO sprav (id_zapros) VALUES (''' +IntToStr(idzapr)+''')');

52

(9 replies, posted in Russian)

Понял. Учту.
Попутный вопрос.
Можно ли при сохранении в таблицу zapros (нажатие Button3) очистить какое ни будь обязательное поле на форме Form_Main (допустим Edit1). Хочу сделать защиту (от дурака) на двойное сохранение записи.

53

(9 replies, posted in Russian)

получается что этот скрипт не сработал

 if Form_Main.dbAction = 'NewRecord' then Form_Main.Tag := 1 else Form_Main.Tag := 0;

как у Вас открывается форма
через открыть форму или новая запись?

Через "Показать форму"...

54

(9 replies, posted in Russian)

Спасибо.
Похоже на баг в программе...
Работают все варианты включая и Ваш после того как закомментировал строки:

//  begin
   //   if Form_Main.Tag = 1 then

55

(9 replies, posted in Russian)

мне нужно записать в переменную id.zapros (id записи из таблицы Zapros, которая сохраняется при нажатии кнопки сохранить Button3).

procedure Form_Main_Button3_OnClick (Sender: TObject; var Cancel: boolean);

            begin
             if Form_Main.dbAction = 'NewRecord' then Form_Main.Tag := 1 else Form_Main.Tag := 0;

         end;

procedure Form_Main_Button3_OnAfterClick (Sender: TObject);

 var
    zaprNewID: string;
            begin
     if Form_Main.Tag = 1 then
     begin
         zaprNewID := SQLExecute('SELECT( id????) from zapros where id=' + IntToStr(Form_Main.Button3.dbGeneralTableId));
                                end;
      end;

Добрый день.
Button3 сохраняет в таблицу zapros запись. Пробовал в различных вариантах. Один раз даже захватил id записи, но предварительно была ошибка - программа ругалась на id.

procedure Form_Main_Button3_OnClick (Sender: TObject; var Cancel: boolean);

            begin
             if Form_Main.dbAction = 'NewRecord' then Form_Main.Tag := 1 else Form_Main.Tag := 0;

         end;

procedure Form_Main_Button3_OnAfterClick (Sender: TObject);

 var
  //  zaprNewID: string;
        zaprNewID:integer;
    begin
     if Form_Main.Tag = 1 then
     begin
  //       zaprNewID := SQLExecute('SELECT id.zapros =' + IntToStr(Form_Main.Button3.dbGeneralTableId));
      //     zaprNewID := SQLExecute('SELECT count(id) FROM Zapros WHERE (id= ''' + IntToStr(Form_Main.Button3.dbGeneralTableID) + ''')');
           zaprNewID := Form_Main.Button3.dbGeneralTableId;
                ShowMessage (zaprNewID);
           end;
      end;

57

(6 replies, posted in Russian)

sibprogsistem спасибо.
До Вашего ответа подобрал рабочий код

procedure Form_Main_ComboBox5_OnChange (Sender: TObject);
     begin
if Form_Main.ComboBox5.dbItemID <> 5 then form_Main.Edit6.Visible := False
    else if Form_Main.ComboBox5.dbItemID = 5 then form_Main.Edit6.Visible := True;
    if Form_Main.ComboBox5.dbItemID <> 5 then form_Main.Label20.Visible := False
    else if Form_Main.ComboBox5.dbItemID = 5 then form_Main.Label20.Visible := True;
end;

Какой из вариантов правильнее использовать? для программы есть ли разница?

58

(6 replies, posted in Russian)

Подскажите как спрятать по условию два объекта.
Работает:

procedure Form_Main_ComboBox5_OnChange (Sender: TObject);
     begin

   if Form_Main.ComboBox5.dbItemID <> 5 then form_Main.Edit6.Visible := False
    else if Form_Main.ComboBox5.dbItemID = 5 then form_Main.Edit6.Visible := True

       end;

Нужно что-то подобное:

procedure Form_Main_ComboBox5_OnChange (Sender: TObject);
     begin

   if Form_Main.ComboBox5.dbItemID <> 5 then form_Main.Edit6.Visible := False and form_Main.Label20.Visible := False
    else if Form_Main.ComboBox5.dbItemID = 5 then form_Main.Edit6.Visible := True and form_Main.Label20.Visible := True


       end;

59

(2 replies, posted in Russian)

Здравствуйте.
Наткнулся на следующее:
После перевода поля в тип поля BIGINT длинные значения в таблицу записываются,
не вытаскивается в TableGrid длинное значение - 0101040001777, но без проблем заполняется короткое - 01040001777.

60

(6 replies, posted in Russian)

OK.
Спасибо.

61

(6 replies, posted in Russian)

Здравствуйте.
Возможно ли в PageControl скрыть TabSheet?

if (not isAdmin) then FrmOrg.PageControl1.TabSheet3.Visible:=False;

Спасибо.
Нашел ошибку.

frmOth1.Button11.dbSQL :=   ' SELECT mod_print.name, '+
                                    ' (SELECT COUNT(*) FROM res t1 WHERE t1.id_mod_print = res.id_mod_print AND t1.id_Priznzam = 2 AND t1.id_departament= '+ IntToStr(idDepartament) +'), '+
                                    ' (SELECT COUNT(*) FROM res t1 WHERE t1.id_mod_print = res.id_mod_print AND t1.id_Priznzam = 3 AND t1.id_departament= '+ IntToStr(idDepartament) +'), '+
                                    ' (SELECT COUNT(*) FROM res t1 WHERE t1.id_mod_print = res.id_mod_print AND t1.id_Priznzam = 4 AND t1.id_departament= '+ IntToStr(idDepartament) +') '+
                                    ' FROM res LEFT OUTER JOIN mod_print ON mod_print.id=res.id_mod_print '+
                                    ' group BY id_mod_print  ORDER by id_Priznzam '+

Добрый день.

procedure FrmOth1_Button11_OnClick (Sender: TObject; var Cancel: boolean);
begin
       if (not isAdmin) and (not isAdminFKU) and (idDepartament<>0)then
       frmOth1.Button11.dbSQL :=   ' SELECT mod_print.name, '+
                                    ' (SELECT COUNT(*) FROM res t1 WHERE t1.id_mod_print = res.id_mod_print AND t1.id_Priznzam = 2 where t1.id_departament= '+ IntToStr(idDepartament) +'), '+
                                    ' (SELECT COUNT(*) FROM res t1 WHERE t1.id_mod_print = res.id_mod_print AND t1.id_Priznzam = 3 where t1.id_departament= '+ IntToStr(idDepartament) +'), '+
                                    ' (SELECT COUNT(*) FROM res t1 WHERE t1.id_mod_print = res.id_mod_print AND t1.id_Priznzam = 4 where t1.id_departament= '+ IntToStr(idDepartament) +') '+
                                    ' FROM res LEFT OUTER JOIN mod_print ON mod_print.id=res.id_mod_print '+
                                    ' group BY id_mod_print  ORDER by id_Priznzam '+
   ELSE
        frmOth1.Button11.dbSQL := ' SELECT mod_print.name, '+
                                    ' (SELECT COUNT(*) FROM res t1 WHERE t1.id_mod_print = res.id_mod_print AND t1.id_Priznzam = 2), '+
                                    ' (SELECT COUNT(*) FROM res t1 WHERE t1.id_mod_print = res.id_mod_print AND t1.id_Priznzam = 3), '+
                                    ' (SELECT COUNT(*) FROM res t1 WHERE t1.id_mod_print = res.id_mod_print AND t1.id_Priznzam = 4) '+
                                    ' FROM res LEFT OUTER JOIN mod_print ON mod_print.id=res.id_mod_print '+
                                    ' group BY id_mod_print  ORDER by id_Priznzam ';

    end;

вторая часть скрипта после ELSE отрабатывает.
Первая часть дает ошибку синтаксиса

  frmOth1.Button11.dbSQL :=   ' SELECT mod_print.name, '+
                                    ' (SELECT COUNT(*) FROM res t1 WHERE t1.id_mod_print = res.id_mod_print AND t1.id_Priznzam = 2 where t1.id_departament= '+ IntToStr(idDepartament) +'), '+
                                    ' (SELECT COUNT(*) FROM res t1 WHERE t1.id_mod_print = res.id_mod_print AND t1.id_Priznzam = 3 where t1.id_departament= '+ IntToStr(idDepartament) +'), '+
                                    ' (SELECT COUNT(*) FROM res t1 WHERE t1.id_mod_print = res.id_mod_print AND t1.id_Priznzam = 4 where t1.id_departament= '+ IntToStr(idDepartament) +') '+
                                    ' FROM res LEFT OUTER JOIN mod_print ON mod_print.id=res.id_mod_print '+
                                    ' group BY id_mod_print  ORDER by id_Priznzam '+

Спасибо Дмитрий.
Но это не совсем то, что хотелось бы увидеть.
Сейчас заполняется одно поле (count *)по условию OR ...
https://a.radikal.ru/a40/1908/6d/d9096c2c85db.jpg
https://c.radikal.ru/c03/1908/d9/68f8fa67de75.jpg
А хотелось бы, если возможно в Гриде получить 3 столбца: id,количество1,количество2 где:
количество1 =

SELECT mod_print.name, count(*) 
FROM res
LEFT OUTER JOIN mod_print ON mod_print.id=res.id_mod_print
WHERE id_Priznzam = 1 
group by id_mod_print 

а количество1 =

SELECT mod_print.name, count(*) 
FROM res
LEFT OUTER JOIN mod_print ON mod_print.id=res.id_mod_print
WHERE id_Priznzam = 2 
group by id_mod_print  

В случае если у принтера mod_print.name есть запись  для  id_Priznzam = 1 но нет записи для  id_Priznzam = 2, то в столбце количество2 ставится '0' и наоборот
Как в примере
id                |количество1|количество2
HP1200      |       7            |      0
HP1100      |       0            |       2
Canon800   |       4            |       8

Здравствуйте.
Можно ли вывести в один Грид два SQL запроса.
Чтобы при нажатии кнопки formOth_printDisplay.Button9
Выводились столбцы: Name,Priznzam_1,Priznzam_2
Или правильнее делать через вычисляемые поля?
Если запросы для вывода в Грид можно объединить, то очень хотелось бы увидеть как это делается.
Сейчас есть отдельные SQL запросы.
1. Название столбцов: Name,Priznzam_1

formOth_printDisplay.Button7.dbSQL :=   ' SELECT mod_print.name, count(*) '+
                                                   ' FROM res '+
                                                   ' LEFT OUTER JOIN mod_print ON mod_print.id=res.id_mod_print '+
                                                   ' WHERE (id_Priznzam = 1) '+
                                                   ' group by id_mod_print';

2. Название столбцов: Name,Priznzam_2

formOth_printDisplay.Button8.dbSQL :=   ' SELECT mod_print.name, count(*) '+
                                                   ' FROM res '+
                                                   ' LEFT OUTER JOIN mod_print ON mod_print.id=res.id_mod_print '+
                                                   ' WHERE (id_Priznzam = 2) '+
                                                   ' group by id_mod_print';

Здравствуйте.
Вылетает при выполнении скрипта

procedure formOth_printDisplay_Button7_OnClick (Sender: TObject; Action: string);
 begin

        formOth_printDisplay.Button7.dbSQL :=   ' SELECT id_mod_print, count(*) '+
                                                   ' FROM res '+
                                                   ' LEFT OUTER JOIN mod_print ON mod_print.id=res.id_mod_print '+
                                                   ' group by id_mod_print ';

              formOth_printDisplay.Button7.Click;
end;

В тоже время SQL запрос в этой кнопке отрабатывает

SELECT id_mod_print, count(*) 
FROM res 
LEFT OUTER JOIN mod_print ON mod_print.id=res.id_mod_print 
group by id_mod_print        

+ IntToStr()+ - Тут Вы переводите из числового в строковое

+ StrToInt()+ Тут Вы переводите из строкового в числовое


Integer - целые числа

String - строковая переменная

Спасибо. Вкурил в чем проблема.
Вопрос закрыт. Правильное написание

if (id_priznzam = '1')  then SQLExecute ('INSERT INTO res (res_max, id_mod_print)  VALUES(' + IntToStr(pok_max)+', ''' +idmodprint+ ''')')

Как правильно написать оператор StrToInt ?

if (id_priznzam = '1')  then SQLExecute ('INSERT INTO res (res_max, id_mod_print)  VALUES(' + IntToStr(pok_max)+', ' + StrToInt(idmodprint)+')')

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

procedure Form1_Button11_OnClick (Sender: TObject; var Cancel: boolean);
begin
   formOth.Button6.dbSQL :=  ' if (not isAdmin)  '+
                                           ' then '+
                                           ' SELECT id_mod_print, mod_print.name, count(*) '+
                                           ' FROM print '+
                                           ' LEFT OUTER JOIN mod_print ON mod_print.id=print.id_mod_print '+
                                           ' WHERE id_departament='+IntToStr(idDepartament) +
                                           ' group by id_mod_print '+
                                           ' ELSE '+
                                           ' SELECT id_mod_print, mod_print.name, count(*) '+
                                           ' FROM print '+
                                           ' LEFT OUTER JOIN mod_print ON mod_print.id=print.id_mod_print '+
                                           ' group by id_mod_print ';

                       formOth.Button6.Click;
end;

По отдельности SELECTы работают, как только добавляю IF, THEN, ELSE - ошибка синтаксиса

Здравствуйте.
Так как приходится постоянно входить в ПО для проверки правильности работы нововведений.
На форме frm.Login после ввода пароля в поле frm.Login.edPassword приходится мышкой кликать на кнопку  frm.Login.Button1 ("Войти").
Если честно, уже начал дергаться глаз от этого, вроде бы безобидного действия....
Может быть у кого ни будь есть процедура, которая только после заполнения поля паролем при нажатии на ENTER клавиатуры запускало действие кнопки frm.Login.Button1 ("Войти").
Пробовал

procedure frmLogin_edPassword_OnEnter (Sender: TObject);
begin
    frmLogin.Button1.Click
end;

но это не то. как только курсор попадает в поле frm.Login.edPassword  сразу же и один раз отрабатывает frmLogin.Button1.Click с уведомление, что не правильно введен пароль...

71

(28 replies, posted in Russian)

sibprogsistem wrote:

Вроди так

if (not isAdmin) then FrmSch.TableGrid1.dbFilter:='(id_rab= "1") AND (id_departament= "'+IntToStr(idDepartament)+'")';

Спасибо работает.

72

(28 replies, posted in Russian)

sibprogsistem wrote:

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

Спасибо.
Тогда как можно выйти из положения?
Должно быть что-то типа

if (not isAdmin) then FrmSch.TableGrid1.dbFilter := ((print.id_rab = '1')  and 'id_departament='+IntToStr(idDepartament));

Сам понимаю что страный скрипт и скорее всего нужно делать по другому...
В FrmSch.TableGrid1 есть столбец print.id_rab

73

(28 replies, posted in Russian)

Здравствуйте.
Выявилась проблема. Заключается в следующем:
Если заходит Администратор, то фильтр TableGrid1
https://a.radikal.ru/a41/1908/f1/6e0e54b6883a.jpg
чудесно отрабатывает.
Если заходит пользователь с правами своего департамента
if (not isAdmin) then FrmSch.TableGrid1.dbFilter := 'id_departament='+IntToStr(idDepartament);
то тот же фильтр на TableGrid1 не работает
https://c.radikal.ru/c28/1908/d1/87e599a848ff.jpg

74

(28 replies, posted in Russian)

sibprogsistem wrote:
id_rab>1

Спасибо работатет. Только к idprint надо добавить условие  b.id_rab =1

' where b.id = '+ IntToStr(idprint) +' and (b.id_rab =1) ';    

75

(28 replies, posted in Russian)

Для того, чтобы убрать "не нужные" принтера в Grid-ах стандартной фильтрации достаточно.
Но не знаю, как убрать из Grida принтера id_rab<>1, заполненного Join-ом

idPrint := formOth_printDisplay.TableGrid1.dbItemID;
      FrmOth.Button3.dbSQL := 'select distinct с.name, b.kab, a.sch, a.data, '+
                                            ' from sch a '+
                                            ' join print b on a.id_print=b.id '+
                                            ' join mod_print с on b.id_mod_print=d.id '+
                                            ' where b.id = '+ IntToStr(idprint) +
                                            ' order by a.data DESC';
                      FrmOth.Button3.Click;