1 (edited by maxkyl 2015-10-04 12:09:15)

Topic: Ошибка в скрипте

Приветствую. Подскажите пожалуйста почему не работает данный скрипт, а именно strftime('%d.%m.%Y', game.data),strftime('%H:%M', game.data)

procedure Form1_btRaport_OnClick (Sender: string; var Cancel: boolean);
var
    frxDBDataset1, frxDBDataset2, frxDBDataset3, frxDBDataset4: TfrxDBDataset;
    Results1, Results2, Results3, Results4: TDataSet;
begin
    // Data for first dataset
    SQLQuery('SELECT strftime('%d.%m.%Y', game.data),strftime('%H:%M', game.data),addGame.game,
                    game.summa,game.karta,addAdmin.admin,addCashier.cashier
              FROM  game
              LEFT OUTER JOIN addGame ON addGame.id=game.id_addGame
              LEFT OUTER JOIN addAdmin ON addAdmin.id=game.id_addAdmin
              LEFT OUTER JOIN addCashier ON addCashier.id=game.id_addCashier
              WHERE
              datetime(game.data) >= datetime({DateTimePicker2}, '+8 hours') AND
              datetime(game.data) <= datetime({DateTimePicker2}, '+8 hours', '+1 day')', Results4);
end;

Re: Ошибка в скрипте

т.к. для формирования строки в скриптах используется знак '
также он используется в SQL запросе, его необходимо экранировать этим же знаком


также для формирования строки в скрипте состоящий из нескольких строк, необходимо использовать символ +

в итоге должно быть так

SQLQuery('SELECT strftime(''%d.%m.%Y'', game.data),strftime(''%H:%M'', game.data),addGame.game,'+
                    'game.summa,game.karta,addAdmin.admin,addCashier.cashier'+
              'FROM  game'+
              'LEFT OUTER JOIN addGame ON addGame.id=game.id_addGame'+
              'LEFT OUTER JOIN addAdmin ON addAdmin.id=game.id_addAdmin'+
              'LEFT OUTER JOIN addCashier ON addCashier.id=game.id_addCashier'+
              'WHERE'+
              'datetime(game.data) >= datetime({DateTimePicker2}, ''+8 hours'') AND'+
              'datetime(game.data) <= datetime({DateTimePicker2}, ''+8 hours'', ''+1 day'')', Results4);
Dmitry.

Re: Ошибка в скрипте

Спасибо

Re: Ошибка в скрипте

Дмитрий еще один вопрос по ошибкам. При нажатии кнопки  выходит такое сообщение
"Error messang: near "OUTER": syntax error" Script: SQLExecute" Сам скрипт в предыдущем сообщении

Re: Ошибка в скрипте

забыл про пробелы, попробуйте так

SQLQuery('SELECT strftime(''%d.%m.%Y'', game.data),strftime(''%H:%M'', game.data),addGame.game,'+
                    'game.summa,game.karta,addAdmin.admin,addCashier.cashier '+
              'FROM  game '+
              'LEFT OUTER JOIN addGame ON addGame.id=game.id_addGame '+
              'LEFT OUTER JOIN addAdmin ON addAdmin.id=game.id_addAdmin '+
              'LEFT OUTER JOIN addCashier ON addCashier.id=game.id_addCashier '+
              'WHERE '+
              'datetime(game.data) >= datetime({DateTimePicker2}, ''+8 hours'') AND '+
              'datetime(game.data) <= datetime({DateTimePicker2}, ''+8 hours'', ''+1 day'')', Results4);
Dmitry.

6 (edited by maxkyl 2015-10-04 15:34:48)

Re: Ошибка в скрипте

Пробелы помогли, но теперь вылезла другая ошибка.  Error message: unrecognized token: "{".

Re: Ошибка в скрипте

Пришлите пожалуйста ваш проект на support@drive-software.com
с ссылкой на данную тему и с описанием действий приводящих к этой ошибке.

Dmitry.

8 (edited by maxkyl 2015-11-14 07:58:32)

Re: Ошибка в скрипте

Приветствую Дмитрий.Помогите разобраться пожалуйста. Есть вот такой скрипт:

procedure Form1_Button7_OnClick (Sender: string; var Cancel: boolean);
var
   frxDBDataset1, frxDBDataset2: TfrxDBDataset;
   Results1, Results2: TDataSet;

begin
   SQLQuery('SELECT strftime(''%m.%Y'',skladDrawings.data),drawings.drawingsname,TOTAL(skladDrawings.amoutDrawings) '+
            'FROM skladDrawings LEFT OUTER JOIN drawings ON drawings.id=skladDrawings.id_drawings ' +
            'GROUP BY drawings.drawingsname ' , Results1);

   SQLQuery('SELECT strftime(''%m.%Y'', TestAstana.biletOperator.datatime), SUM(TestAstana.biletOperator.summa) '+
            'FROM TestAstana.biletOperator '+
            'WHERE strftime(''%m.%Y'', {DateTimePicker1}) = strftime(''%m.%Y'', TestAlmaty.biletOperator.datatime) ' , Results2);

             frxDBDataset1 := TfrxDBDataset.Create(Form1);
             frxDBDataset1.UserName        := 'Report1';
             frxDBDataset1.CloseDataSource := True;
             frxDBDataset1.OpenDataSource  := True;
             frxDBDataset1.DataSet         := Results1;

             frxDBDataset2 := TfrxDBDataset.Create(Form1);
             frxDBDataset2.UserName        := 'Report2';
             frxDBDataset2.CloseDataSource := True;
             frxDBDataset2.OpenDataSource  := True;
             frxDBDataset2.DataSet         := Results2;

             Form1.frxReport.Clear;
             Form1.frxReport.DataSets.Clear;
             Form1.frxReport.DataSets.Add(frxDBDataset1);
             Form1.frxReport.DataSets.Add(frxDBDataset2);

             Form1.frxReport.LoadFromFile(ExtractFilePath(Application.ExeName)+'Report\Loto.fr3'+);
             Form1.frxReport.DesignReport;

             frxDBDataset1.Free;
             frxDBDataset2.Free;

end;


В таком виде выходит ошибка  Error message: unrecognized token: "{", но если убрать в скрипте вот эту строку "'WHERE strftime(''%m.%Y'', {DateTimePicker1}) = strftime(''%m.%Y'', TestAlmaty.biletOperator.datatime) '", то кнопка срабатывает без ошибок. В чем заключается ошибка?

Re: Ошибка в скрипте

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

'WHERE strftime(''%m.%Y'', '+Form1.DateTimePicker1.sqlValue+') = strftime(''%m.%Y'', TestAlmaty.biletOperator.datatime) ' , Results2);

но я не могу понять, что это

TestAlmaty.biletOperator.datatime
Dmitry.

10 (edited by maxkyl 2015-11-15 03:19:30)

Re: Ошибка в скрипте

Спасибо. Данный SQL запрос на извлечение данных  из базы расположенной в другом городе  и присоединенной по VPN соединению.

 SQLExecute('ATTACH DATABASE ''\\10.10.0.25\\sqlite.db'' as ''TestAlmaty''');

Re: Ошибка в скрипте

Ясно, тогда запрос должен работать.

Dmitry.