Re: ComboBox настройка

Я так понимаю, надо написать условие по выборке по ID. Т.к. у нас есть новая запись с последним ID и запись из таблицы с присвоенным ID.
Потому что, если убрать,

frmNew.ComboBox4.dbItemID := Last_Insert_id

то выбранная запись, из списка ComboBox остается.
А с ней происходит замена на пустое поле при выборе значения из списка при выполнение события OnCloseOn в ComboBox...
Или нужна проверка на дубликат... Непонятно... Требуется помощь smile

Re: ComboBox настройка

Вроде, так работает

if (frmNew.ComboBox4.dbItemID <> -1) then frmNew.ComboBox4.text := frmNew.ComboBox4.text else frmNew.ComboBox4.dbItemID := Last_Insert_id;

Re: ComboBox настройка

Как обычно, Дмитрий не понимает моих надписей smile  Извините, за фамильярность...

Переход по кн. Enter

if Key=13 then frmEmployee.SetFocusNextControl;

Получилось такое

procedure frmNew_ComboBox4_OnCloseUp (Sender: TObject);
begin
    //Переход на след. поле
    if (frmNew.ComboBox4.dbItemID <> -1) then frmNew.SetFocusNextControl else
    //Ввод новой надписи автозаполнения в таблицу
    if (frmNew.ComboBox4.dbItemID = -1) and (frmNew.ComboBox4.Text <> '') then
    begin
        if 6 = MessageDlg('Добавить новый "Брэнд": ' + frmNew.ComboBox4.Text, mtConfirmation, mbYes + mbNo, 0) then
        begin
            SQLExecute('INSERT INTO brand (name) VALUES ("'+frmNew.ComboBox4.Text+'")');
            UpdateDatabase('brand');
            //Использование последнего id
            frmNew.ComboBox4.dbItemID := Last_Insert_id;
            //Переход на след. поле
            frmNew.SetFocusNextControl;
        end;
     end;
end;

Осталось добиться, как настроить поле ComboBox, чтоб при курсор всегда оставался в конце слова, т.е. при "отказе в добавлении" курсор перемещается в начало слова.
Было б ваще шик если перевести название и кнопки в MessageDlg...

29 (edited by vit007 2019-04-18 10:15:06)

Re: ComboBox настройка

Язык сообщение подтверждения меняется в зависимости от языка системы при использовании MESSAGEBOX.

заменил строку с MessageDlg на :

if IDYES = MESSAGEBOX('Добавить новый "Брэнд": ' + frmNew.ComboBox4.Text,'Подтверждение',MB_YESNO+MB_ICONQUESTION) THEN

взято из http://myvisualdatabase.com/forum/viewtopic.php?id=3084

Re: ComboBox настройка

Да, чтоб не потерялось:

Осталось добиться, как настроить поле ComboBox, чтоб при курсор всегда оставался в конце слова, т.е. при "отказе в добавлении" курсор перемещается в начало слова.

Re: ComboBox настройка

vit007 wrote:

Свойство компонента, не забыл. Просто при введении нового значения все в порядке, а когда в таблице или выборе из списка уже есть это значение, то после выхода из ComboBox - строка очищается...

И можно сделать выход из ComboBox через Enter. А то вызывает ощущение "замешательства", что делать, чтоб выйти и все осталось как надо... smile

Пытался отдельно замутить обычное поле с переносом сделать, так ComboBox при вводе не открывает поиск по введенным значения...

Это происходит в вашем проекте или в моем примере? в моем примере я такого не наблюдаю, поэтому пожалуйста приложите ваш проект.


По умолчанию нажатие Enter приводит к нажатию кнопки с действием "Сохранить запись", чтобы это предотвратить, установите свойство данной кнопки Default = False, затем можно использовать скрипта

procedure frmEmployee_cbGroup_OnKeyDown (Sender: TObject; var Key: Word; Shift, Alt, Ctrl: boolean);
begin
    if Key=13 then frmEmployee.SetFocusNextControl;
end;
Dmitry.

Re: ComboBox настройка

В моем проекте, так было.... т.к. уже лист скрипта начинает походить на простынь, и не заметил, как "закомментировал" HideTextIfNotExists...

Подскажите, возможно свойством в графе курсора изменить его положение...?

Re: ComboBox настройка

vit007 wrote:

Да, чтоб не потерялось:

Осталось добиться, как настроить поле ComboBox, чтоб при курсор всегда оставался в конце слова, т.е. при "отказе в добавлении" курсор перемещается в начало слова.

Поправил, скачайте пожалуйста последнюю бета версию
https://www.dropbox.com/s/xfjcvk0z7je6i … a.zip?dl=0

Dmitry.

Re: ComboBox настройка

Спасибо Дмитрий, терь, как надо...

Re: ComboBox настройка

а frmEmployee.cbGroup.dbUpdate после INSERT'а где???

Re: ComboBox настройка

m.prokhachev wrote:

а frmEmployee.cbGroup.dbUpdate после INSERT'а где???

К сожалению не понял вопроса, опишите пожалуйста подробней.

Dmitry.

Re: ComboBox настройка

Подскажите, а можно спрятать значения в combobox для конкретного случая, без изменения значений в базе...

Re: ComboBox настройка

vit007 wrote:

Подскажите, а можно спрятать значения в combobox для конкретного случая, без изменения значений в базе...

Можно, используя свойство Filter в инспекторе объекта, вы можете задать условие, например исключить запись со значением id=1

id<>1

Также вы можете присваивать фильтр для компонента с помощью скрипта

    Form1.ComboBox1.dbFilter := 'id<>1';
    Form1.ComboBox1.dbUpdate;

Синтаксис условий для данного свойства аналогичен синтаксису SQL, т.к. данный фильтр просто подставляется в раздел WHERE sql запроса, который используется для заполнения Combobox-а

Dmitry.

39 (edited by vit007 2019-10-24 10:05:41)

Re: ComboBox настройка

Предполагаю, чтоб исключить надо так, но синтаксис бы подправить...

a := SQLEXecute('SELECT id FROM statistic WHERE id='Без звонка');
        frmNote.ComboBox6.dbFilter := 'id<>+a+';
        frmNote.ComboBox6.dbUpdate;

40 (edited by sibprogsistem 2019-10-24 11:39:10)

Re: ComboBox настройка

vit007 wrote:

Предполагаю, чтоб исключить надо так, но синтаксис бы подправить...

a := SQLEXecute('SELECT id FROM statistic WHERE id='Без звонка');
        frmNote.ComboBox6.dbFilter := 'id<>+a+';
        frmNote.ComboBox6.dbUpdate;

id='Без звонка' - не правельно..
сдесь Вам нужно либо указать номер id либо поменять id на имя поля содержащего эту информацию (Без звонка)

Re: ComboBox настройка

В принципе, можно в лоб использовать номер id, но если что-то менять в базе можно забыть, было б неплохо, узнавать по содержимому базы номер id. Вот почему так написал... Спасибо.

Re: ComboBox настройка

в фильтре можно использовать не только поле id, но и любое другое

frmNote.ComboBox6.dbFilter := 'fieldname <> ''Без звонка''';
frmNote.ComboBox6.dbUpdate;
Dmitry.

Re: ComboBox настройка

Возникла проблемка... надо фильтровать по нескольким значениям, получается последнее значение фильтруется, а первое игнорируется...

Re: ComboBox настройка

Да, а как выключить фильтр...

Re: ComboBox настройка

frmNote.ComboBox6.dbFilter := '(fieldname <> ''Без звонка'') AND (второе условие)';

AND - и
OR - или

46 (edited by vit007 2019-11-09 14:58:24)

Re: ComboBox настройка

Подскажите, хочу из одно формы combox'ом вызвать другую форму со значением выбранным в первом combox'е. Оба combox'а привязаны к одно таблице.

If (frmNote.ComboBox6.Text='Комплектующие') then
            begin
            frmAddNote.ShowModal;
            // есть процедура onShow у формы frmAddNote, думаю ниже текст выполняется после выполнения процедуры...
            frmAddNote.ComboBox1.dbFilter := '(setNotice = ''Комплектующие'')';
            frmAddNote.ComboBox1.dbItemID := 1;
            frmAddNote.ComboBox1.Enabled := False;

            end else

Форма открывается, но выбор не делается, даже же фильт не накладывается...

Re: ComboBox настройка

эту часть поместите в событие OnShiw формы frmAddNote

frmAddNote.ComboBox1.dbFilter := '(setNotice = ''Комплектующие'')';
frmAddNote.ComboBox1.dbItemID := 1;
frmAddNote.ComboBox1.Enabled := False;

Re: ComboBox настройка

Привет Vit007,,
Возможно, так
Derek.

Post's attachments

Attachment icon passcomboboxvalue.zip 336.65 kb, 399 downloads since 2019-11-09 

Re: ComboBox настройка

Спасибо, Derek. Этот пример лучше, чем городить скрипт с фильтрами.

Re: ComboBox настройка

А можно открыть ComboBox нажатием на отдельную кнопку?...