Topic: Счетчик

На форме имеется грид в котором указывается Порядковый номер, Имя, Фамилия, Отчество. При добавлении записи на гриде показывается порядковый номер. Теперь при удалении записи предыдуший номер становится другим. Покажу на примере

№     Имя        Фамилия    Отчество
1.     Иван        Иванов        Иванович
2.     Петр        Петров        Петрович
3.     Саша      Сидоров      Михайлович
4.     Катя         Пирова        Александровна

При удалении 2-й записи (Петр Петров Петрович) порядковый номер Саши и Катьки тоже меняются соответственно на 2 и 3. Надо чтобы при удалении 2-й записи 3-я и 4-я записи не менялись,  но также при добавлении новой записи т.е. 5-й записи его порядковый номер был 5. Как это реализовать?

Re: Счетчик

Вам необходимо использовать поле "Счетчик" и компонент на форме Counter http://myvisualdatabase.com/help_ru/components/editcount.png, этот счетчик будет присваивать индивидуальный номер для записи, который не будет меняться. Можете посмотреть в этом видео, как с ним работать https://www.youtube.com/watch?v=lN6_yeK84K8#t=186

Dmitry.

3 (edited by pha1984 2015-06-15 08:44:28)

Re: Счетчик

Спс, разобрался.
У меня на форме есть Edit1 и Edit2. Ввожу это:
procedure Form1_OnShow (Sender: string; Action: string);
var
   i: integer;
begin
   i := SQLExecute('SELECT count(*) FROM Osnova');
   Form1.Edit1.Text := IntToStr(i);
   Form1.Edit1.Enabled:= False;
end;
все работает. Но надо чтобы в Edit2 было номер от последней записи (номер который выдает counter). Где то читал про Last_Insert_id но не знаю как сделать. Помогите.

Re: Счетчик

Сам разобрался, сделал вот так:
procedure Form1_OnShow (Sender: string; Action: string);
var
   i, q: integer;
begin
   i := SQLExecute('SELECT count(*) FROM Osnova');
   q := SQLExecute('SELECT Max(id) FROM Osnova');
   Form1.Edit1.Text := IntToStr(i);
   Form1.Edit1.Enabled:= False;
   Form1.Edit2.Text:= IntToStr(q);
end;

Re: Счетчик

Имеется другой вопрос по счетчику. Опят привожу пример.
№     Имя        Фамилия    Отчество
1.     Иван        Иванов        Иванович
2.     Петр        Петров        Петрович
3.     Саша      Сидоров      Михайлович
4.     Катя         Пирова        Александровна

При удалении 2-й записи пример выглядит вот так:
№     Имя        Фамилия    Отчество
1.     Иван        Иванов        Иванович
3.     Саша      Сидоров      Михайлович
4.     Катя         Пирова        Александровна
Это нормально. Но при удалении 4-й записи (т.е. последней) и введении новой записи его счетку присваивается 4, а мне надо чтобы было уже 5. Как сделать.

Re: Счетчик

Ув. Админ. Ответьте пожалуйста на мой вопрос, смотрите на 1 пост выше.

Re: Счетчик

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

Dmitry.

Re: Счетчик

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

Re: Счетчик

Я внес некоторые изменения в бета версию 1.52, пожалуйста, скачайте ее
https://www.dropbox.com/s/s1roiqthyx7hx … 2.zip?dl=0


теперь ваш скрипт должен работать как надо.

Dmitry.

Re: Счетчик

я скачал, что делать дальше

Re: Счетчик

Это нормально. Но при удалении 4-й записи (т.е. последней) и введении новой записи его счетку присваивается 4, а мне надо чтобы было уже 5. Как сделать.


теперь новой записи должно присвоится 5

Dmitry.

Re: Счетчик

не получилось, проблема осталась, удалил 4-ю запись, затем при добавлении новой записи counter выдал ему опять 4 а не 5

Re: Счетчик

Пришлите пожалуйста свой проект на support@drive-software.com

Dmitry.

14 (edited by pha1984 2015-06-17 10:42:07)

Re: Счетчик

Логин - hasan
Пароль - admin

на форме Form1 есть грид который и показывает counter, а на форме NovayaForma есть компонент counter который присваивает номер.

Post's attachments

Attachment icon statforma.rar 815.83 kb, 440 downloads since 2015-06-17 

Re: Счетчик

это серийник

Post's attachments

Attachment icon Serial.rar 3.01 kb, 447 downloads since 2015-06-17 

Re: Счетчик

Пришлось все таки по другому реализовать

Post's attachments

Attachment icon statforma_fixed.zip 852.92 kb, 477 downloads since 2015-06-17 

Dmitry.

Re: Счетчик

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

Re: Счетчик

Необходимо удалить записи, а также выполнить SQL запрос

SQLExecute('UPDATE maxcounter SET maxcounter=1 WHERE id=1');
Dmitry.

Re: Счетчик

назначить на кнопку или как?

Re: Счетчик

да, можно и на кнопку.

Dmitry.

Re: Счетчик

procedure Form1_Button2_OnClick (Sender: string; var Cancel: boolean);
begin
SQLExecute('UPDATE maxcounter SET maxcounter=1 WHERE id=1');    // для обнуления счетчика
end;


работает, но счетчик начинается с 2, почему?

Re: Счетчик

исправил данные участки кода, просто заменил значение 1 на 0

procedure NovayaForma_bOk_OnAfterClick (Sender: string);
begin
    if NovayaForma.edCounter.Value > SQLExecute('SELECT IFNULL(maxcounter, 0) FROM maxcounter WHERE id=1') then
    begin
        SQLExecute('INSERT OR REPLACE INTO maxcounter (id, maxcounter) VALUES(1, '+NovayaForma.edCounter.Text+')');
    end;
end;
    if Action='NewRecord' then
    begin
        NovayaForma.edCounter.Value := SQLExecute('SELECT IFNULL(MAX(counter), 0) FROM Osnova')+1;
        if SQLExecute('SELECT IFNULL(maxcounter, 0) FROM maxcounter WHERE id=1') >= NovayaForma.edCounter.Value then
        begin
            NovayaForma.edCounter.Value := SQLExecute('SELECT IFNULL(maxcounter, 0) FROM maxcounter WHERE id=1') + 1;
        end;
    end;
............
Dmitry.

Re: Счетчик

спс, заработало