1 (edited by Andrei 2018-05-11 06:48:01)

Topic: Заполнение значений id вопросов, имеющих признак актуальности

Добрый день.

Есть вот такой скриптик для заполнения в форме frm.main поля "TextBox" значениями из Таблицы main, кроме значения id_vopr, которое ручками выставлено равное 1,2...5

SQLExecute('INSERT INTO main (id_login, id_vopr, data, otvet) VALUES (''' +IntToStr(iduser)+''', ''1'',  now(), '''+FrmMain.CheckBox2.sqlValue+''')');

Таких скриптов 5 и соответствует 5 полям в форме frm.main соответственно имеем:
SQLExecute('INSERT INTO main (id_login, id_vopr, data, otvet) VALUES (''' +IntToStr(iduser)+''', ''2'',  now(), '''+FrmMain.CheckBox2.sqlValue+''')');
и т.д.
SQLExecute('INSERT INTO main (id_login, id_vopr, data, otvet) VALUES (''' +IntToStr(iduser)+''', ''5'',  now(), '''+FrmMain.CheckBox2.sqlValue+''')');


Есть таблица Vopr в которой есть 5 вопросов (кол-во вопросов на которое будет увеличиваться - постоянное и равно 5), в данной таблице у каждого вопроса есть поле Aktual значение "ДА/НЕТ" (0/1) выставляется ShekBoxом.

После добавления новых 5 вопросов у id_vopr=1...id_vopr=5 снимается признак актуальности (значение 0), а у вновь добавленных вопросов id_vopr=6...id_vopr=10 ставится признак актуальности (значение 1). Шаг постоянный и равен 5 (пяти).

Пожалуйста подскажите как заменить в скриптах
SQLExecute('INSERT INTO main (id_login, id_vopr, data, otvet) VALUES (''' +IntToStr(iduser)+''', ''????????1'',  now(), '''+FrmMain.CheckBox2.sqlValue+''')');
и т.д. до
SQLExecute('INSERT INTO main (id_login, id_vopr, data, otvet) VALUES (''' +IntToStr(iduser)+''', ''????????5'',  now(), '''+FrmMain.CheckBox2.sqlValue+''')');

Поле id_vopr значением не статическим (ручками), а значением из таблицы Vopr с признаком Aktual равным 1 (ДА) и неизменным шагом 5.

Заранее благодарен.

Re: Заполнение значений id вопросов, имеющих признак актуальности

Извиняюсь за задержку с ответом, был в отпуске, вопрос все еще актуален для вас?

Dmitry.

Re: Заполнение значений id вопросов, имеющих признак актуальности

Здравствуйте.
Очень!!!
Обновлял id_vopr ручками, а тут отправляют в длительную командировку, и руководство дало задание оптимизировать редактирование вопросов через форму...

Re: Заполнение значений id вопросов, имеющих признак актуальности

Дмитрий.
Кинул проект по мылу на адрес My Visual Database Mailer <support@drive-software.com> от odin_andrei@mail.ru.
Файл opr.rar.

Re: Заполнение значений id вопросов, имеющих признак актуальности

К сожалению я не смог понять вопроса.

Dmitry.

6 (edited by Andrei 2018-05-15 13:11:47)

Re: Заполнение значений id вопросов, имеющих признак актуальности

Я наверное Вас и всех запутал.
Надеюсь, что так будет понятнее.

Целиком блок замены вопроса. Вставляем первый вопрос и переходим ко второму.


procedure FrmForm2_OnClick (Sender: string; Action: string);
begin
    FrmMain.WindowState := wsMaximized; // развернет окно на весь экран
    FrmMain.vopr.Text := SQLExecute ('SELECT vopros FROM vopr where (id = 27)');
В место (id = 27) нужно вставить не статический id, а какой-то select результат которого вытащит из таблицы Vopr первый попавшийся id вопроса (счетчик) у которого будет признак Aktual = 1
   end;

        procedure FrmMain1_OnShow (Sender: string; Action: string);

      SQLExecute('INSERT INTO main (id_login, id_vopr, data, otvet, otvet1, id_otd, id_no, id_dolz) VALUES (''' +IntToStr(iduser)+''', ''27'',  now(), '''+FrmMain.CheckBox1.sqlValue+''', '''+FrmMain.CheckBox11.sqlValue+''', '''+IntToStr(idotdel)+''', '''+IntToStr(idNOO)+''', '''+IntToStr(iddolz)+''')');
В место "27" нужно вставить первый вопрос у которого будет признак Aktual = 1
    FrmMain.vopr1.Text := SQLExecute ('SELECT vopros FROM vopr where (id = 28)');
А в следующее поле уже вставляем id = первый из предыдущего selecta+1!!! вопрос у которого будет признак Aktual = 1
       end;

Re: Заполнение значений id вопросов, имеющих признак актуальности

К сожалению я не могу понять, что конкретно вы делаете. Расскажите лучше для чего проект, и какая его цель, возможно я смогу предложить другое решение, более простое.

Dmitry.

Re: Заполнение значений id вопросов, имеющих признак актуальности

Дмитрий спасибо!!! Вопрос снят.
Решил вопрос добавлением таблицы актуальности вопросов (на 5 вопросов).

Скрипты выглядят следующим образом


procedure FrmForm2_OnClick (Sender: string; Action: string);
begin
    FrmMain.WindowState := wsMaximized; // развернет окно на весь экран
    FrmMain.vopr.Text := SQLExecute ('SELECT vopros FROM vopr where (id_aktual_vopr = 2)');
   
end;

        procedure FrmMain1_OnShow (Sender: string; Action: string);

       
     SQLExecute('INSERT INTO main (id_login, id_vopr, data, otvet, otvet1, id_otd, id_no, id_dolz) VALUES (''' +IntToStr(iduser)+''', (SELECT id FROM vopr where (id_aktual_vopr = 2)),  now(), '''+FrmMain.CheckBox1.sqlValue+''', '''+FrmMain.CheckBox11.sqlValue+''', '''+IntToStr(idotdel)+''', '''+IntToStr(idNOO)+''', '''+IntToStr(iddolz)+''')');
    FrmMain.vopr1.Text := SQLExecute ('SELECT vopros FROM vopr where (id_aktual_vopr = 3)');

   end;