Topic: Проблемы с синтаксисом.

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

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 - ошибка синтаксиса

Re: Проблемы с синтаксисом.

В SQL запросах нельзя использовать скрипты.


попробуйте так

procedure Form1_Button11_OnClick (Sender: TObject; var Cancel: boolean);
begin
    if not isAdmin then 
        formOth.Button6.dbSQL :=           ' 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     
        formOth.Button6.dbSQL :=           ' 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;
Dmitry.

Re: Проблемы с синтаксисом.

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

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

Re: Проблемы с синтаксисом.

Andrei wrote:

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

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

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

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


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

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

Re: Проблемы с синтаксисом.

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

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


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

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

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

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

6 (edited by Andrei 2019-08-08 06:44:46)

Re: Проблемы с синтаксисом.

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

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        

Re: Проблемы с синтаксисом.

Зачем то в событии кнопки OnClick вы вызываете метод Click, это приводит к бесконечному циклу, просто уберите эту строку

formOth_printDisplay.Button7.Click;
Dmitry.

Re: Проблемы с синтаксисом.

Добрый день.

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 '+

Re: Проблемы с синтаксисом.

нужен проект, так не понятно

Re: Проблемы с синтаксисом.

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

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 '+

Re: Проблемы с синтаксисом.

Здравствуйте.
Не могу понять в чем дело. Программа ругается именно на синтаксис...
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)+''')');

12

Re: Проблемы с синтаксисом.

Try the amended code below.


('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)+'"') 
On a clear disk you can seek forever

Re: Проблемы с синтаксисом.

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

Re: Проблемы с синтаксисом.

Здравствуйте.
Как правильно прописать запись значения 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')

15 (edited by sibprogsistem 2020-05-18 16:57:27)

Re: Проблемы с синтаксисом.

попробуйте так

procedure Form_Main_1_Button1_OnClick (Sender: TObject; var Cancel: boolean);
var
tDate : string = FormatDateTime('yyyy-mm-dd',Form_Main_1.DateTimePicker4.DateTime);
begin
   SQLExecute('INSERT INTO zapros (otvet_data, otvet_numer) VALUES ('''+tDate+''', '''+form_Main_1.Edit3.Text+''') WHERE ('''+IntToStr(idZapr)+''')');
end;

Re: Проблемы с синтаксисом.

Здравствуйте.
Ругается  на 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  

Re: Проблемы с синтаксисом.

Andrei wrote:

Здравствуйте.
Ругается  на 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  

знак равенства нужно убрать 
   where a.otvet_data = is Null

Yana

Re: Проблемы с синтаксисом.

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