1 (edited by savage 2014-08-22 21:38:36)

Topic: [Решено] Combobox - вывести в комбобокс последнюю запись таблицы

День добрый,

Собственно, нужен скрипт по отображению в combobox по умолчанию (сразу видимым) значение последней сохраненной в таблице записи.
1. есть таблица
2. есть форма с combobox
3. есть форма добавления в таблицу новой записи
4. надо сделать так, чтобы после добавления в таблицу новой записи (название категории, например), ее значение отобразилось в комбобоксе.

Просто, сейчас юзеру приходится сначала добавлять, потом в комбобоксе ее выбирать, а это не trueway, имхо


с уважением,

savage

2 (edited by savage 2014-08-22 05:49:56)

Re: [Решено] Combobox - вывести в комбобокс последнюю запись таблицы

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

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

Re: [Решено] Combobox - вывести в комбобокс последнюю запись таблицы

Поставьте рядом с ComboBox кнопку для создания новой записи, которая вызывает в моем примере форму frmAddCust
затем создайте событие OnAfterClick у кнопки сохранения на этой форме, для определения последней созданной записи используется функция Last_Insert_id, в которой необходимо указать таблицу бд


procedure frmAddCust_Button1_OnAfterClick (Sender: string);
begin
   // если форма видима на которой находится ComboBox    
   if frmClaim.Visible then frmClaim.cbCustomer.dbItemID := Last_Insert_id('customer');
end;
Dmitry.

4 (edited by savage 2014-08-22 20:05:12)

Re: [Решено] Combobox - вывести в комбобокс последнюю запись таблицы

DriveSoft, в стандартной ситуации работает.
А если взять, например, частный случай с формой логирования:

procedure frmLogin_OnShow (Sender: string; Action: string);
begin
     if VarToStr( SQLExecute('SELECT count(id) FROM users WHERE admin=1;') ) = '0' then
     begin
         ShowMessage('Пользователя с правами Администратора не найдено, поэтому он будет создан автоматически, с логином admin и паролем admin');
         SQLExecute('INSERT INTO users (login, password, admin) VALUES ("admin", "admin", 1);');
         frmLogin.cbUser.dbItemID:= Last_Insert_id('users');
         frmLogin.edLogin.Text:= 'admin';
    end else
           frmLogin.cbUser.dbItemID:= 2;
 end;

не хочет показывать в cbUser введенного юзера admin. Более того. в выпадающем списке вообще ничего нет.

Re: [Решено] Combobox - вывести в комбобокс последнюю запись таблицы

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

Dmitry.

Re: [Решено] Combobox - вывести в комбобокс последнюю запись таблицы

DriveSoft wrote:

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

DriveSoft, проект ушел

Re: [Решено] Combobox - вывести в комбобокс последнюю запись таблицы

savage

Дело  в  том, что во время добавления записи в базу данных посредством SQL  запроса  (INSERT  INTO),  визуальные  компоненты не могут об этом ничего  знать, поэтому не обновляют свои значения новыми записями. Для решения  этой  проблемы  сделал  процедуру  UpdateDatabase(TableName: string), которую необходимо вызвать после функции SQLExecute


Скачайте  еще  раз  бета  версию  1.43,  в  которой  я  добавил данную процедуру
https://www.dropbox.com/s/4qdlk4pouldrz … 201.43.zip

Dmitry.

Re: [Решено] Combobox - вывести в комбобокс последнюю запись таблицы

спасибо, сейчас будем посмотреть...

9 (edited by savage 2014-08-22 21:11:22)

Re: [Решено] Combobox - вывести в комбобокс последнюю запись таблицы

Что-то не работает. Я правильно понял, что необходимо:

procedure frmLogin_OnShow (Sender: string; Action: string);
begin
     if VarToStr( SQLExecute('SELECT count(id) FROM users WHERE admin=1;') ) = '0' then
     begin
         ShowMessage('Пользователя с правами Администратора не найдено, поэтому он будет создан автоматически, с логином admin и паролем admin');
         SQLExecute('INSERT INTO users (login, password, admin) VALUES ("admin", "admin", 1);');
         UpdateDatabase(users: string);
         frmLogin.cbUser.dbItemID:= Last_Insert_id('users');
         frmLogin.edLogin.Text:= 'admin';
    end else
           frmLogin.cbUser.dbItemID:= 2;
 end;

выдает, что:
')' expected

Re: [Решено] Combobox - вывести в комбобокс последнюю запись таблицы

savage

я вам на почту скинул исправленный вариант.

исправьте UpdateDatabase(users: string);  на UpdateDatabase('users');

Dmitry.

Re: [Решено] Combobox - вывести в комбобокс последнюю запись таблицы

DriveSoft wrote:

savage

я вам на почту скинул исправленный вариант.

исправьте UpdateDatabase(users: string);  на UpdateDatabase('users');

Работает! Спасибо, DriveSoft!