Робота з компонентом DBCombobox

Панове! При роботі з компонентом DBCombobox не відображаються у списку всі значення. Тільки якщо натиснути Next у DBNavigator можна переглянути таке. Як це змінити, окрім як у програмі заповнити його у циклі?

Список(Items) можна заповнити заздалегідь (в розробці), що буває вкрай рідко або заповнити під час виконання програми, на основі будь-яких даних. Третього не дано!

Дані з-за у списку з'явитися не можуть!

> Як це змінити, крім як у програмі заповнити його > циклі?

Ніяк. Тільки циклі: Table1.First; while not Table1.Eof do begin ComboBox1.Items.Add(tabOpsNF.AsString); Table1.Next; end;

Насправді, це дурна річ. У попередніх версіях Дельфі (D3) список нормально заповнювався. У компонентах TRxDBLookupComboBox також нормально заповнюється. На жаль, тепер у Дельфі доводиться робити кілька Fetch, перш ніж список заповниться. Хоча, може, у розробників були на те свої причини (без потреби не зчитувати набір).

Ні, я заповнюю його поле datasource:=datacource1, datasource1 містить дані з таблиці. А потім усі дані, наприклад, назва міста, не відображаються у списку. Я б хотіла бачити їх все в списку, щоб можна було вибирати і наприклад за обраним значенням фільтрувати дані з іншої таблиці

> Ні, я заповнюю його поле datasource:=datacource1, datasource1 > містить дані з таблиці. > А потім усі дані, наприклад назва міста, не показуються > все у списку. Я б хотіла бачити їх у списку, > щоб можна було вибирати і, наприклад, за обраним значенням > фільтрувати дані з іншої таблиці

То в чому проблема?

Чи може розмову треба вести не DBCombobox, а lookup-поля або компонент DBLookupComboBox?

З DBLookupComboBox я не розумію, як працювати? Що вказувати в datasource, а що в Listsource?

Дата куди лист звідки

> ViKS (23.09.03 14:35) [8] > З DBLookupComboBox я не розумію, як працювати? Що вказувати > у datasource, а що в Listsource?

Нічого в ListSource не треба вказувати. Зроби lookup поле і в Field свого DBLookupCombo вказуй його.

ViKS, спробуй і вийде, а якщо не вийде, спробуєш знову!

Спробувала знову! У списку тепер усі дані з таблиці міста відображаються, а як фільтрувати за вибраним із цього списку значенням дані з іншої таблиці,

а в чому, власне, проблема?

Натискаю на списку, список випадає, а зберігається тільки перше значення, інші недоступні, тільки якщо next в DBNavigator натисну, тільки тоді щось змінюється, а друга таблиця не реагує на вибір у списку!!

Давайте по порядку. 1. Який компонент користується? (я відразу не зрозумів) DbComboBox чи DBLookupComboBox? 2. Що означає "зберігається лише перше значення"?

1.якщо список випадає, як можуть бути недоступні елементи списку? 2.Після вибору елемента списку оновлені дані потрібно зберегти . Тип, зробити post. 3.А як друга таблиця реагуватиме на вибір зі списку? Думаєш вона сама ффсе знає чи здогадується? Обробник треба писати!

А взагалі не дуже зрозумілий сенс завдання!

Мені потрібно зробити так: є один список -наприклад DBLookUpcombo, у ньому є назви міст (з однієї таблиці), а ще є на цій же формі DBGrid, в якій відображаються інші дані. Як мені зробити так, щоб при виборі значень зі списку,фільтрувалися значення у цьому DBgrid?

Якщо таблиця на FoxPro, краще зробити так: У подію OnChange або CloseUp комбобоксу вписати щось на кшталт:

begin Table1.Filtered := False; Table1.Filtered := True; end;

begin Table1.Refresh; end;

А в обробник компонента Table1 OnFilterRecord вписати щось на кшталт:

Accept := DataSet.FieldByName("таке-то").AsInteger := DBLookupcomboBox1.KeyValue;

У наздогін: У гриді повинна відображатися Table1, а ось DBLookupComboBox повинен брати ListSource зіншогокомпонента (Table2).

А ще краще TTable викинути в смітник і користуватися TQuery. Тоді проблеми з фільтрацією відпадуть самі собою.

Для таблиць FoxPro фільтр може працювати набагато швидше, ніж TQuery. Особливо якщо в таблиці сотні тисяч записів. Ти був би безумовно правий, якби йшлося про сервер баз даних (IB або MSSQL). А для FoxPro SQL-запит буде емулюватися BDE і врешті-решт станеться те саме (сканування набору). Хоча якщо є індекс цього поля, то можливо, SQL запит і не буде гальмувати і тоді ти правий.

Тоді підкажіть як це ж приготувати за допомогою Query, але щоб ще й зі списком вибору. А таблиці у мене dbase!