Форум: "Базы";
Текущий архив: 2002.01.28;
Скачать: [xml.tar.bz2];
ВнизПомогите!!! :) Найти похожие ветки
← →
Andrey196 (2001-12-23 19:49) [0]Мне нужно чтобы в комбобокс.items заносилось поле из БД
и при выборе из списка индекс БД вставал на выбранную запись.
СПАСИБО!!!!!!
← →
Andrey196 (2001-12-23 20:37) [1]ТУТ ВОБЩЕ PEOPLE LIFE ЕСТЬ ИЛИ ВСЕ DEAD!!!!!
← →
Light Elf (2001-12-23 20:56) [2]Может я и где, но вопроса не понял.
← →
Andrey196 (2001-12-23 21:08) [3]У меня есть база данных там есть много столбцов,
Мне нужно все запись одного столбца запихнуть в combobox (желательно автоматически) и при выборе из списка combobox указатель таблици должен встать на выбранную запись
← →
Atrem (2001-12-23 22:25) [4]Занести данные в комбобокс
yourtable.first;
while not eof(yourtable) do begin
combobox.items.add(yourtable.field.value);
yourtable.next;
end;
А встать на выбранную запись можно с помощью метода locate,правда если поле заносимое в комбобокс уникальное
А вообще мне кажется лучше использовать DBlookupcombobox
← →
Turalyon (2001-12-24 09:37) [5]Я что то не понял, что надо заносить столбцы (названия) или строки (поля из записей)????
← →
Сергей Иванов (2001-12-24 10:00) [6]//дополню ответ Atrem
//заполнение. например, в обработчике FormCreate
with MainData.Table do begin
if not Active then Open;
First;
while not EOF do begin
MyCombo.Items.Add(FieldByName("Name").AsString);
Next;
end; {while not EOF}
end; {MainData.Table}
//позиционирование
if not MainData.Table.Locate("Name", MyCombo.Text, []) then exit {не нашли?}
//инкрементный поиск можно сделать, навесив обработчик на MyComboKeyPress, хорошй пример есть в хелпе.
//более простой вариант - взять из кладовки компонент TFieldFinder.
← →
AlexSV (2001-12-24 12:13) [7]Я тоже столкнулся с этой проблемой.
Сначала использовал для этих целей TDBLookupComboBox, в котором
свойства DataSource и DataField не инициальзаровал. Вообщем работало,
пока не поставил этот режим на Master, у которого был Detail, который
в свою очередь был Master. Стало тормозить.
Оказалось, что TDBLookupComboBox при выпадании списка переоткрывает
запрос дважды (ну и соответственно все подчиненные).
При этом, когда бегаешь по выпавшему списку скроллом, то он не отключает механизм Master-Detail, что тоже тормозит.
Собственно решений я не нашел (или плохо искал).
Первое, что я сделал, это в Tag TComboBox-а записал указатель на DataSet.
Вот так:
procedure SetDataSetToComboBox(cb : TComboBox; ds : TDataSet);
begin
cb.Tag := LongInt(ds);
end;
Далее организовал заполнение ComboBox-а соответствующими значениями поля
из набора:
function FillComboBoxList(cb : TComboBox; DispField : string): Integer;
var
qInCB : TQuery;
begin
Result := 1;
if (cb.Tag < 0) then begin
Result := 0;
Exit;
end;
qInCB := TQuery(cb.Tag);
if qInCB.Active then
qInCB.Close;
if (InitQueryParams(qInCB) > 0) then with qInCB do begin
qInCB.Open;
if (FindField(DispField) = nil) then begin
Result := -1;
Exit;
end;
cb.Clear;
if RecordCount > 0 then begin
First;
while not Eof do
begin
cb.Items.AddObject(FieldByName(DispField).AsString, GetBookmark);
Next;
end;
cb.ItemIndex := 0;
GotoBookmark(cb.Items.Objects[0]);
cb.Enabled := True;
end else begin
cb.Enabled := False;
end;
end;
end;
И, наконец, в самом ComboBox-е на OnChange:
procedure TForm.cbChange(Sender: TObject);
var
dsInCB : TDataSet;
cb: TComboBox;
begin
if not (Sender is TComboBox) then
Exit;
cb := (Sender as TComboBox);
dsInCB := TDataSet((Sender as TComboBox).Tag);
dsInCB.GotoBookmark(cb.Items.Objects[cb.ItemIndex]);
// Здесь можно выполнять еще дополнительные действия
end;
Основное, на что надо обращать внимание при этом:
1. Переоткрытие запроса должно отслеживать перезаполнение ComboBox-а,
или его Text-а в случае удаления записи из DataSet-а.
2. Синхронизация DataSet-а с другими, и соответственно переход на
активную запись в самом ComboBox-е.
Когда это все надоело, то для себя слепил компонент.
Если будет интерес, то пиши на мой ящик.
Пока.
← →
DiggerAbstract (2001-12-24 12:57) [8]а DBLookUpComboBox тебе не подойдет?
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.01.28;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.004 c