Topic: Прошу подправить скрипт.

При такой записи берёт значение из первой строки грида:

Form2.Edit4.Text:=SQLExecute('SELECT num2 FROM main')+1;

1) Мне же нужно, чтобы бралось максимальное значение.
2) Как добавить условие:  брать максимальное значение из тех записей, у которых поле [5,i] = '000' ?

Не боги горшки лепят!

Re: Прошу подправить скрипт.

1.
Form2.Edit4.Text:=IntToStr( SQLExecute('SELECT IFNULL(MAX(num2), 0) FROM main') + 1 );


2.
К сожалению не понял, что такое "поле [5,i] = '000'" ?

Dmitry.

Re: Прошу подправить скрипт.

DriveSoft wrote:

1.
Form2.Edit4.Text:=IntToStr( SQLExecute('SELECT IFNULL(MAX(num2), 0) FROM main') + 1 );
2.
К сожалению не понял, что такое "поле [5,i] = '000'" ?

За 1) СПАСИБО.
2) это максимальный номер из выданных. Т.е. в следующей записи со статусом "Выдано" Form2.Edit4.Text должно быть не 401, а 151 (см. рисунок). Статус находится: Form1.TableGrid1.Cells[5,i]

Post's attachments

Attachment icon Blancs.jpg 25.5 kb, 289 downloads since 2015-04-10 

Не боги горшки лепят!

Re: Прошу подправить скрипт.

kunar80
Тогда примерно так

Form2.Edit4.Text:=IntToStr( SQLExecute('SELECT IFNULL(MAX(num2), 0) FROM main WHERE id_status=5') + 1 );

где 5 - это id записи, в которой содержится статус с названием "Выдано"

Dmitry.

5 (edited by kunar80 2015-04-10 17:21:48)

Re: Прошу подправить скрипт.

Спасибо. Сейчас попробую.
Подскажите, Дмитрий, а что не правильно здесь?

    if Form2.edNum2_2.Text => Form2.edNum1_1.Text then
    begin
    Form2.edPlus2.Text := '';
    end else MessageDlg('У Вас нет такого количества!', mtError, mbOk, 0);

Даёт ошибку, сто ожидается then перед =>
УЖЕ НЕ ДАЁТ. Записал >= !
Но MessageDlg выскакивает прежде времени.

Не боги горшки лепят!

Re: Прошу подправить скрипт.

kunar80
Вы используете операцию сравнения, больше или равно для текста, что не применимо.
попробуйте так

if Form2.edNum2_2.Value => Form2.edNum1_1.Value then
begin
   Form2.edPlus2.Text := '';
end else MessageDlg('У Вас нет такого количества!', mtError, mbOk, 0);
Dmitry.

Re: Прошу подправить скрипт.

DriveSoft wrote:

kunar80
Тогда примерно так

Form2.Edit4.Text:=IntToStr( SQLExecute('SELECT IFNULL(MAX(num2), 0) FROM main WHERE id_status=5') + 1 );

где 5 - это id записи, в которой содержится статус с названием "Выдано"

Нет, не работает. Прилагаю проект

Post's attachments

Attachment icon Blancs.rar 6.11 kb, 460 downloads since 2015-04-10 

Не боги горшки лепят!

8 (edited by kunar80 2015-04-10 18:29:56)

Re: Прошу подправить скрипт.

DriveSoft wrote:
if Form2.edNum2_2.Value => Form2.edNum1_1.Value then
begin
   Form2.edPlus2.Text := '';
end else MessageDlg('У Вас нет такого количества!', mtError, mbOk, 0);

Это не работает. Проект я выложил. Замысел таков: если я пытаюсь выдать больше, чем имеется, обнуляется edPlus и появляется сообщение, что отсутствует необходимое количество.
И ещё. Формат номеров num1 и num2 нужен 6 знаков.
Как это связать?

            Form2.edNum1_1.Text:=IntToStr( SQLExecute('SELECT IFNULL(MAX(num2), 0) FROM main') + 1 );
            Form2.edNum1_1.Text:= Format('%.6d', [id]);
Не боги горшки лепят!

Re: Прошу подправить скрипт.

kunar80 wrote:

Нет, не работает. Прилагаю проект

Я думал у вас статус организован как положено, словарной таблицей, тогда так

Form2.edNum1_2.Text:=IntToStr( SQLExecute('SELECT IFNULL(MAX(num2), 0) FROM main WHERE status=''Выдано''') + 1 );
Dmitry.

Re: Прошу подправить скрипт.

kunar80 wrote:

Это не работает. Проект я выложил. Замысел таков: если я пытаюсь выдать больше, чем имеется, обнуляется edPlus и появляется сообщение, что отсутствует необходимое количество.
И ещё. Формат номеров num1 и num2 нужен 6 знаков.
Как это связать?



В вашем случае проверку необходимо осуществлять на событиях OnClick у кнопок сохранения записи

procedure Form2_Button2_OnClick (Sender: string; var Cancel: boolean);
begin
    if Form2.edNum2_2.Value >= Form2.edNum1_1.Value then
    begin
        Form2.edPlus2.Text := '';
        MessageDlg('У Вас нет такого количества!', mtError, mbOk, 0); //
        Cancel := true;
    end;
end;

procedure Form2_Button1_OnClick (Sender: string; var Cancel: boolean);
begin
    if Form2.edNum2_2.Value >= Form2.edNum1_1.Value then
    begin
        Form2.edPlus2.Text := '';
        MessageDlg('У Вас нет такого количества!', mtError, mbOk, 0); //
        Cancel := true;
    end;
end;

Формат числа у компонента можете изменить, установите свойство Currency=true и Accuracy=6

Dmitry.

11 (edited by kunar80 2015-04-12 09:38:57)

Re: Прошу подправить скрипт.

DriveSoft wrote:

Формат числа у компонента можете изменить, установите свойство Currency=true и Accuracy=6

Это даёт шесть знаков после запятой, но не шестизначный номер.
А скрипт работает, спасибо!

Не боги горшки лепят!

Re: Прошу подправить скрипт.

kunar80
Имеете ввиду например такой?
000048

Dmitry.

Re: Прошу подправить скрипт.

DriveSoft wrote:

kunar80
Имеете ввиду например такой?
000048

Да

Не боги горшки лепят!

Re: Прошу подправить скрипт.

Попробуйте.

Post's attachments

Attachment icon Blancs.zip 7.45 kb, 470 downloads since 2015-04-12 

Dmitry.