1 (edited by vit007 2019-08-28 08:40:02)

Topic: Подскажите, как доработать скрипт введения во вторую таблицу

Вот такой скрипт

var
    //maxID : string = IntToStr(Last_Insert_id);
    sDate : string = FormatDateTime('yyyy-mm-dd',frmNote.DateTimePicker1.DateTime);
begin
    frmNote.Edit14.Text := 'Редактирование';
    SQLExecute('INSERT INTO statistic (data, status, id_request) VALUES ("'+sDate+'","'+frmNote.Edit14.Text+'","'+frmMain.TableGrid1.sqlValue+'")');
    UpdateDatabase('statistic');

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

Re: Подскажите, как доработать скрипт введения во вторую таблицу

Описывайте подробней. Где расположен скрипт? событие, процедура?


Что значит "хватает, на чистой базе, только на одну запись"


Перезаписать существующую запись данный скрипт не может, т.к. вы используете INSERT INTO, данная конструкция может только создавать новые записи.

Dmitry.

Re: Подскажите, как доработать скрипт введения во вторую таблицу

Скрипт стоит на 230 строке...

Post's attachments

Attachment icon 000.rar 325.89 kb, 239 downloads since 2019-08-28 

Re: Подскажите, как доработать скрипт введения во вторую таблицу

Я попросил описать подробней проблему, т.к. мне не ясно, что именно вы пытаетесь сделать.


Также к сожалению вы используете нелицензионную версию программы, либо постоянно сбрасываете ознакомительный период, поддержка осущеставляется только для пользователей лицензионной версии.

Dmitry.

Re: Подскажите, как доработать скрипт введения во вторую таблицу

Винду переустанавливаю от раза к разу, а то иногда сил нет что-то в проге делать... А когда получу окончательный продукт, тогда и куплю, т.к. не знаю, что в итоге получится...

При просмотре записи в таблице, нажимаем изменить затем сохранить и после в таблице истроии должна появится надпись - редактирование. Вместо этого выскакивает ошибка SQLExecute

Re: Подскажите, как доработать скрипт введения во вторую таблицу

Вы делаете логирование создания и изменения записей?
Посмотрите данный пример
http://myvisualdatabase.com/forum/viewtopic.php?id=3641

Dmitry.

Re: Подскажите, как доработать скрипт введения во вторую таблицу

Спасибо посмотрю. Да еще как-то озаботился изучение лицензии, не знаю правильно ли я понял, но, она распространяется на продукт серии, т.е. 4.хх, 5.хх. А т.к. еще свою прогу не сделал, решил доделать ее, и взять максимально разработанную версию...

Re: Подскажите, как доработать скрипт введения во вторую таблицу

Попробовал не получилось,

procedure frmNote_Button7_OnAfterClick (Sender: TObject);
begin
    SQLExecute(
    'CREATE TRIGGER IF NOT EXISTS my_log_insert AFTER UPDATE ON request '+
    'BEGIN '+
    '    INSERT INTO statistic(data, status) VALUES (datetime(''now'', ''localtime''),''New''); '+
    'END;'
    );

В таблицу statistic не заносится лог.

При повторной операции выскакивает ошибка, что одно значение, а колонки 2...

9 (edited by sibprogsistem 2019-08-30 12:21:31)

Re: Подскажите, как доработать скрипт введения во вторую таблицу

vit007 wrote:

Попробовал не получилось,

procedure frmNote_Button7_OnAfterClick (Sender: TObject);
begin
    SQLExecute(
    'CREATE TRIGGER IF NOT EXISTS my_log_insert AFTER UPDATE ON request '+
    'BEGIN '+
    '    INSERT INTO statistic(data, status) VALUES (datetime(''now'', ''localtime''),''New''); '+
    'END;'
    );

В таблицу statistic не заносится лог.

При повторной операции выскакивает ошибка, что одно значение, а колонки 2...

frmNote_Button7_OnAfterClick
тоесть при нажатии кнопки Вы создали тригер (Ваш тригер сработает только если в таблице будет создана запись, его ну нужно запускать)...  при павторном нажати Вы пытаетесь создать существующий тригер, потому получаете ошибку..

тригер можно либо создать либо удалить.. все действия с БД лагируются уже без Вас -  нужно просто выполнить определенную Вами операцию..

Re: Подскажите, как доработать скрипт введения во вторую таблицу

Т.е. это некая подпрограмма, которую лучше размещать в onShow. Но пока не понимаю, как пользоваться...

11 (edited by sibprogsistem 2019-08-30 15:15:32)

Re: Подскажите, как доработать скрипт введения во вторую таблицу

vit007 wrote:

Т.е. это некая подпрограмма, которую лучше размещать в onShow. Но пока не понимаю, как пользоваться...

не совсем, Вам нужно создать тригер только один раз, тригер записывается в саму БД  ...

можно  сделать так:

procedure triggerCreate;
begin
    SQLExecute(
    'CREATE TRIGGER IF NOT EXISTS my_log_insert AFTER UPDATE ON request '+
    'BEGIN '+
    '    INSERT INTO statistic(data, status) VALUES (datetime(''now'', ''localtime''),''New''); '+
    'END;'
    );
end;

procedure triggerDelete;
begin
SQLExecute('DROP TRIGGER IF EXISTS  my_log_insert');
end;

procedure Form1_OnShow (Sender: TObject; Action: string);
begin
   triggerCreate;
end;

procedure Form1_OnClose (Sender: TObject; Action: string);
begin
   triggerDelete;
end;

либо так

procedure Form1_OnShow (Sender: TObject; Action: string);
begin
       SQLExecute(
    'CREATE TRIGGER IF NOT EXISTS my_log_insert AFTER UPDATE ON request '+
    'BEGIN '+
    '    INSERT INTO statistic(data, status) VALUES (datetime(''now'', ''localtime''),''New''); '+
    'END;'
    );
end;

procedure Form1_OnClose (Sender: TObject; Action: string);
begin
   SQLExecute('DROP TRIGGER IF EXISTS  my_log_insert');
end;

при открытии формы триггер создается при закрытии удаляется

Re: Подскажите, как доработать скрипт введения во вторую таблицу

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

13 (edited by sibprogsistem 2019-08-30 16:07:02)

Re: Подскажите, как доработать скрипт введения во вторую таблицу

можите создавать триггеры при любых условиях но не забудьте удалить его (в любом случае с начало должен быть создан триггер)..
   
триггеры вроди как не могут использовать переменные, а Вам на сколько я понял понадобится именно переменая...
 
тогда можно на кнопку сохранить повесть действие OnAfterClick

procedure Form1_Button1_OnAfterClick (Sender: TObject);
begin
  SQLExecute('INSERT  INTO таблица (поле1, поле2) VALUES (значение1, значение2)'); 
end;

Re: Подскажите, как доработать скрипт введения во вторую таблицу

sibprogsistem, когда-то помогли с этим скриптом, но он хорошо работает при создании нового, как, я писал, в первом посте, а вот при просмотре и добавлении нового только во вторую таблицу выскакивает ошибка... на скрипт...

Re: Подскажите, как доработать скрипт введения во вторую таблицу

на сколько я понял проблема в сохранении изменений в форме frmNote
 
   
дело в том, что Вы открываете в это форме запись для редактрования и дополнительные скрипты для сохранения изминений Вам не нужны..
Сохранение изминений уже настроенно в своствах вашей кнопки сохранения

Post's attachments

Attachment icon 000.7z 29.95 kb, 233 downloads since 2019-08-31 

16 (edited by sibprogsistem 2019-08-30 22:54:03)

Re: Подскажите, как доработать скрипт введения во вторую таблицу

vit007 wrote:

и добавлении нового только во вторую таблицу

так это и есть добовление новой записи

SQLExecute('INSERT  INTO таблица (поле1, поле2) VALUES (значение1, значение2)'); 

17 (edited by vit007 2019-08-31 11:02:44)

Re: Подскажите, как доработать скрипт введения во вторую таблицу

Да, в таблице request все изменяется и сохраняется, на форме frmNote есть еще таблица statistic (tableGrid1), вот в ней, мне нужно, чтоб после нажатия клавиши сохранить написалось слово "редактирование" с датой... вот...

Re: Подскажите, как доработать скрипт введения во вторую таблицу

vit007 wrote:

Да, в таблице request все изменяется и сохраняется, на форме frmNote есть еще таблица statistic (tableGrid1), вот в ней, мне нужно, чтоб после нажатия клавиши сохранить написалось слово "редактирование" с датой... вот...

Post's attachments

Attachment icon 000.7z 30.17 kb, 216 downloads since 2019-08-31 

Re: Подскажите, как доработать скрипт введения во вторую таблицу

Понятно, значит надо было дополнительно id получить... Потому что одновременном не смогла прога, когда, я так сделал:

SQLExecute('INSERT INTO statistic (data, status, id_request) VALUES ("'+sDate+'","'+frmNote.Edit14.Text+'","'+frmMain.TableGrid1.sqlValue+'")');

Было описано в сообщении ошибке, что все поля правильно заполнены, а ошибка...

Спасибо. Да хоть это не надо будет, если два раза сделать сохранить выскакивает ошибка is not valid data and time... Просто второе изменение запрещу, только через новое открытие просмотра smile