Конференция "Базы" » DBLookupComboBox не сохраняет запись
 
  • Alez © (02.02.12 01:39) [0]
    Здравствуйте.
    Есть DBLookupBox, по ходу выполнения программы иногда получается так, что в нём оказывается только ОДНО значение и для удобства хочу сделать что бы оно выбиралось автоматически.
    DBLookupComboBox7.KeyValue:=SimpleDataSet9.FieldByName('specialnost').AsVa  riant;


    Суть проблемы заключается в том, что заданное таким образом значение не сохраняется потом в базу!
    SimpleDataSetTable.Post;
    SimpleDataSetTable.ApplyUpdates(-1);


    Если же я выбираю вручную это значение, просто беру и кликаю мышкой, то оно сохраняется без проблем!
    Как сымитировать нажатие пункта корректно, что бы оно потом сохранялось как при ручном клике?
    Хотелось бы избежать прямого присвоения полю данных из этого выпадающего списка аля
    SimpleDataSetTable.FieldByName('data_naznacheniya').AsInteger:=Datetimepic  ker2.Datetime;

  • makz (02.02.12 07:10) [1]
    А где в этом "коде" вообще изменение базы то? Надо вам срочно почитать help по lookupcombobox.
  • Alez © (02.02.12 22:32) [2]
    Ну как, сначала ползователь выбирает значение в лукап комбо бокс, а после сохраняем выбранное значение в базу по средства пост и АпплайАпдейтс...
  • makz (05.02.12 16:04) [3]
    Чего постить то, где Edit?
  • Alez © (09.02.12 13:26) [4]
    Сначала - append
    DBLookupComboBox7.KeyValue:=...
    Post
    ApplyUpdates

    В итоге то что оказалось под KeyValue в комбо боксе не сохраняется в базу, сохраняется то что там было до этого.
  • makz (10.02.12 08:27) [5]
    DBLookupComboBox7.KeyValue:=... вовсе ничего ни в какую базу не сохраняет, он просто листает lookup датасет, что и написано в хелпе, который я предлагал почитать.
  • Alez © (10.04.12 02:19) [6]
    Да, не сохраняет, в том то и суть вопроса. Как сделать что бы автоматически заполнился если в нём оказалась всего одна запись?

    Например, у нас есть кнопка и лукапкомбобокс. При создании формы происходит Append у нужного нам симпл датасета. Жмём кнопку, в лукапкомбобокс в listsource заливаются какие-то данные (не известно какие). И возможно там оказался только 1 элемент в списке. Как нам сделать так, что бы лукапкомбобокс автоматически выбрал эту запись и она оказалась бы в кэшэ симпладатасета, и потом при Post и ApplyUpdates() заливалось бы в базу?
  • sniknik © (10.04.12 07:44) [7]
    менять нужно в таблице, а не визуальном компоненте. ... в общем - "в dbgrid даннх нет!".
  • Alez © (12.04.12 23:40) [8]
    Ды я ничего про DBGrid не говорю.
    С нуля.
    1) Создаём форму
    2) В OnCreate делаю SimpleDataSet.Open   ...Append - дата сет открыт и готов для записи новой строки.
    3) В DBLookUpComboBox'ы в ListSource'ы попадают DataSource от SimpleDataSet'ов СО СЛУЧАЙНЫМ КОЛИЧЕСТВОМ строк, от 0 до бесконечности (утрирую).
    4) И вот в один из DBLookUpComboBox'ов попала только 1 запись! Зачем заставлять пользователя делать лишнее движение? Если это движение ему несколько тысяч раз придётся делать! Давайте сделаем так что бы одна запись в этом DBLookUpComboBox'е выбиралась автоматически, подумал я.
    5) DBLookupComboBox7.KeyValue:=SimpleDataSet9.FieldByName('ID').AsInteger;
    Отлично! В ...KeyValue применилось нужно мне значение. В ...Text также залилась  нужная строка. Это так я вроде как сымитировал ручное нажатие пользователя на единственный пункт выпадающего меню.
    6) А теперь, раз все данные вроде как верно отображаются можно начать отправку в базу. SimpleDataSet.Post - применили изменения. SimpleDataSet.ApplyUpdates(0) - отправили инфу в базу.
    7) Смотрю в базе - вижу пустые поля.

    Если же пользователь вручную кликнет то всё хорошо запишется в базу.
    Так вот проблема в том, что инфа выбранная в DBLookUpComboBox ПРОГРАММНО не поападает потом в кэш SimpleDataSet.Post :(
  • sniknik © (12.04.12 23:58) [9]
    > Это так я вроде как сымитировал ручное нажатие пользователя на единственный пункт выпадающего меню.
    это "вроде как" не все, что делается по "ручному нажатию пользователя".

    > Так вот проблема в том, что инфа выбранная в DBLookUpComboBox ПРОГРАММНО не поападает потом в кэш SimpleDataSet.Post :(
    ну так, ПРОГРАММНО, ты ничего для этого (судя из описания "с нуля") не сделал.
  • sniknik © (13.04.12 00:00) [10]
    > по "ручному нажатию пользователя".
    в смысле, по реальному "ручному нажатию пользователя".
  • Alez © (13.04.12 00:03) [11]
    При реальном нажатии записывается всё что нужно.
    Какие еще пункты нужно сделать, что бы значение KeyValue попало в SimpleDataSet?
    Кроме банального SimpleDataSet.FieldByName('ID').AsInteger:=DBLookupComboBox7.KeyValue ?
    Или это делается ТОЛЬКО так?
  • sniknik © (13.04.12 00:11) [12]
    ну почему "ТОЛЬКО так"? можно использовать любой черезж...й метод. главное чтобы он, этот метод, в конце концов тоже поменял реальные данные в таблице, а не только изображение на экране.
  • sniknik © (13.04.12 00:14) [13]
    > в конце концов
    сорри. это должно произойти до Post, "в конце концов" не очень корректное по сути выражение.
  • Alez © (13.04.12 02:09) [14]
    Большое спасибо, исчерпывающий ответ.
 
Конференция "Базы" » DBLookupComboBox не сохраняет запись
Есть новые Нет новых   [134431   +9][b:0][p:0.001]