Topic: Счетчик

Как мне правельно запсать в базу скриптом?

procedure Form1_Button1_OnClick (Sender: TObject; var Cancel: boolean);
var
sCount : string = IntToStr(Form1.EditCounter1);
begin
    SQLExecute('INSERT INTO q (record_count, yyu) VALUES ("'+sCount+'", "'+Form1.Edit2.Text+'")');
    Form1.TableGrid1.dbUpdate;
end;

Re: Счетчик

procedure Form1_Button1_OnClick (Sender: TObject; var Cancel: boolean);
var
    sCount : string;
begin
    sCount := Form1.EditCounter1.Text;    
    SQLExecute('INSERT INTO q (record_count, yyu) VALUES ('+sCount+', '+Form1.Edit2.sqlValue+')');
    Form1.TableGrid1.dbUpdate;
end;
Dmitry.

Re: Счетчик

не то мне нужно что бы он считал,
а так он работает только если его поле ручками заполнять

Re: Счетчик

Данный компонент заполняется автоматически, когда форма была вызвана с помощью кнопки с действием "Новая запись".
Пожалуйста, опишите вашу ситуацию подробней и приложите проект.

Dmitry.

Re: Счетчик

Думал, что у меня что-то в базе не так
но сделал в новом проекте и то же самое

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


если через кнопку сохранить (без скрипта) то работает, но само поле счетчика значение не выводит

Post's attachments

Attachment icon 234.rar 3.29 kb, 359 downloads since 2018-08-10 

Re: Счетчик

Как я написал выше

Данный компонент заполняется автоматически, когда форма была вызвана с помощью кнопки с действием "Новая запись".


у вас  нет отдельной формы для создания записи, которая бы вызывалась с помощью кнопки с действием "Новая запись"


В вашем случае можно генерировать новое число для счетчика скриптом, пример

function GetNewRecordCount(TableName: string): integer;
begin
    result := SQLExecute('SELECT IFNULL(Max(record_count), 0) FROM "'+TableName+'"') + 1;
end;


procedure Form1_OnShow (Sender: TObject; Action: string);
begin
    Form1.EditCounter1.Text := IntToStr(GetNewRecordCount('q'));
end;

procedure Form1_Button1_OnClick (Sender: TObject; var Cancel: boolean);
var
    sCount : string;
begin
    sCount := Form1.EditCounter1.Text;
    SQLExecute('INSERT INTO q (record_count, yyu) VALUES ('+sCount+', '+Form1.Edit2.sqlValue+')');
    Form1.TableGrid1.dbUpdate;
    Form1.EditCounter1.Text := IntToStr(GetNewRecordCount('q'));
end;
Dmitry.

7 (edited by senseyesenseye1983 2022-08-15 11:37:54)

Re: Счетчик

Я вот тоже столкнулся с такой проблемой когда есть 1 таблица в которую попадают данные из двух клиентов. Например пользователь в сети начал создавать запись в таблице и record_count присвоел ему например 50. Все ок он создает  запись, и если в этот момент другой пользователь заходит и начинает тоже создавать новую запись то record_count тоже создаеться 50. Почему так может получаться?

На данный момент есть 2 программы но таблицы в них одинаковые. Но вот как то так sad

Я вот думаю может скриптом новую запись создавать чтоб сразу в базу присваивался номер типа что то этого:
begin
    if Action = 'NewRecord' then
    begin
       
    end;

8 (edited by senseyesenseye1983 2022-08-15 12:36:06)

Re: Счетчик

Собственно вот скриншот  при запуске двух приложений и одновременной добавлении запиcи счетчик одинаковый. Как обойти это ?

Моя база на MySQL может как то чтобы автоматически создавалась запись при нажатии кнопки New Record?

Post's attachments

Attachment icon CounterEx with year.zip 7.05 kb, 139 downloads since 2022-08-15 

9 (edited by senseyesenseye1983 2022-08-16 00:42:53)

Re: Счетчик

senseyesenseye1983 wrote:

Собственно вот скриншот  при запуске двух приложений и одновременной добавлении запиcи счетчик одинаковый. Как обойти это ?

Моя база на MySQL может как то чтобы автоматически создавалась запись при нажатии кнопки New Record?

Народ вообще есть какое то решение этой задачки ?
Может есть какой то скрипт, при нажатии новой записи он автоматически создает счетчик, который сразу записывается в базу и уже потом другие пользователи при нажатии новой записи будут создавать другой счетчик>? А то так получается, я нажал на создание новой записи, счетчик присвоил значение и если я буду минут 5 думать сохранять или нет, если меня опередит другой пользователь то он создаст такой же номер счетчика и когда я буду сохранять то сохраню под чужим record_count  как обойти это ?
Давайте вместе решим эту задачку smile

У меня только на ум приходит одно добавить в событие onshow вот это smile
FormProduct.EditCounter3.Text := VarToStr( SQLExecute('SELECT record_count +3 FROM Product WHERE id = (SELECT MAX(id) FROM Product)') );

Re: Счетчик

Я думаю тут выход один:
1) Открываешь форму -> проверяешь переменную Action -> если == 'NewRecord', то генеруриуешь новое значение счетчика и сохраняешь запись без закрытия формы.
2) Узнаешь id вновь созданной записи и присваиваешь его кнопке сохранения (чтобы новую запись не создала, а отредактировала нужную) или сохраняешь все через скрипт.

Re: Счетчик

indigen wrote:

Я думаю тут выход один:
1) Открываешь форму -> проверяешь переменную Action -> если == 'NewRecord', то генеруриуешь новое значение счетчика и сохраняешь запись без закрытия формы.
2) Узнаешь id вновь созданной записи и присваиваешь его кнопке сохранения (чтобы новую запись не создала, а отредактировала нужную) или сохраняешь все через скрипт.

А как выглядит скрипт Action - NewRecord  добавить новое значение счетчика?

Re: Счетчик

Про триггеры слышали? Вот они как раз для этого.
Или на крайний случай хранимая процедура - её проще отлаживать smile

Визуальное программирование: блог и телеграм-канал.

Re: Счетчик

k245 wrote:

Про триггеры слышали? Вот они как раз для этого.
Или на крайний случай хранимая процедура - её проще отлаживать smile

Брат, для меня это темный лес ))

Re: Счетчик

senseyesenseye1983 wrote:
k245 wrote:

Про триггеры слышали? Вот они как раз для этого.
Или на крайний случай хранимая процедура - её проще отлаживать smile

Брат, для меня это темный лес ))

Бери фонарик - и вперёд! ))) Но я тебе тут не помощник, требуются продвинутые знания в PSQL.

Визуальное программирование: блог и телеграм-канал.

Re: Счетчик

k245 wrote:

Про триггеры слышали? Вот они как раз для этого.
Или на крайний случай хранимая процедура - её проще отлаживать smile

Про триггеры слышал что они есть, а вот как их есть - не знаю. Для меня потолок это JOIN и вложенный SELECT.

Re: Счетчик

indigen wrote:
k245 wrote:

Про триггеры слышали? Вот они как раз для этого.
Или на крайний случай хранимая процедура - её проще отлаживать smile

Про триггеры слышал что они есть, а вот как их есть - не знаю. Для меня потолок это JOIN и вложенный SELECT.

http://myvisualdatabase.com/forum/viewtopic.php?id=7988

17 (edited by sparrow 2022-08-16 18:57:50)

Re: Счетчик

а не проще по нажатию Сохранить (OnClick) в скрипте запросом вытянуть последний Рекорд + 1

SQLExecute('SELECT IFNULL(Max(record_count), 0) FROM TableName') + 1;

Поместить в Edit...

Form1.EditCounter1.Text := IntToStr(SQLExecute('SELECT IFNULL(Max(record_count), 0) FROM TableName') + 1);

и продолжить процедуру записи автоматом.

Re: Счетчик

sparrow wrote:

а не проще по нажатию Сохранить (OnClick) в скрипте запросом вытянуть последний Рекорд + 1

SQLExecute('SELECT IFNULL(Max(record_count), 0) FROM TableName') + 1;

Поместить в Edit...

Form1.EditCounter1.Text := IntToStr(SQLExecute('SELECT IFNULL(Max(record_count), 0) FROM TableName') + 1);

и продолжить процедуру записи автоматом.

http://myvisualdatabase.com/forum/viewtopic.php?id=7953

Re: Счетчик

Ну да я так и сделал )) Только подстраховался сделал +3 smile)))))))))