|
Вопрос # 4 024/ вопрос открыт / |
|
Приветствую, уважаемые эксперты!
Подскажите, как мне решить такую проблему: У меня есть таблица в Access в которой содержатся записи, подлежащие редактированию. Причем эти записи являются взаимосвязанными (id, parent_id) и представлены в виде дерева TTreeWiev. Я выбирая какой-нибудь узел в TreeWiev, а влевой части окна находятся DBEditы и DBLookupComboBoxы, для позиционирования которых на определенных строках таблицы я пользуюсь процедурой (см. вложение) Changing (вот тут мне кажется я и допускаю ошибку).
Проблема: Редактируется только первая запись таблицы (то есть только если я выбираю первый узел TTreeWiev), а остальные, почему-то только для чтения ( отображаться то отображаются, но не редактируются). Подскажите, как правильно позиционировать DataSet? И в чем у меня ошибка?
Приложение: Переключить в обычный режим- procedure TRefConsultants.TwConsultantsChanging(Sender: TObject;
- Node: TTreeNode; var AllowChange: Boolean);
- var Ind: Integer;
- begin
-
-
-
- {QuValues.Recordset.MoveFirst;
- while ( Ind > 0 ) and ( QuValues.Recordset.Fields.Item['id'].Value <> Ind ) do begin
- QuValues.Recordset.MoveNext;
- if (QuValues.Recordset.EOF) then Ind := 0;
-
-
-
- while ( Ind > 0 ) and ( DataSource1.DataSet.FieldByName('id').Value <> Ind ) do begin
- DataSource1.DataSet.MoveBy(1);
- if ( DataSource1.DataSet.Eof ) then Ind := 0;
-
-
- end;
 |
Вопрос задал: Меньшенин (статус: Посетитель)
Вопрос отправлен: 12 апреля 2010, 17:09
Состояние вопроса: открыт, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 3; последнее сообщение — 12 апреля 2010, 20:04; участников в обсуждении: 2.
12 апреля 2010, 19:07: Вопрос перемещён из тематического раздела Delphi » Общие вопросы по программированию в раздел Delphi » Программирование баз данных (БД) модератором Ерёмин А.А.
|
Тов. Женька (статус: 3-ий класс), 12 апреля 2010, 19:13 [#1]:
Что такое ConsultCodes?
|
|
Тов. Женька (статус: 3-ий класс), 12 апреля 2010, 19:21 [#2]:
В общем случае я бы поступил так.
1. Взял бы какой-нибудь DBTreeView и прицепил бы его к таблице.
2. Написал бы обработчик нажатия для него.
if Table.FieldByName('ParentID').AsInteger = 0 then
EditParent // какая-то процедура редактирования родителя
else EditChild; //какая-то процедура для редактирования
преимущество DBTreeView в том, что встав на какую-то запись в нем можно легко получить ID записи (Table.FieldByName('ID').AsInteger).
C простым TreeView все несколько сложнее, потому что надо в нем как-то хранить ID записей, а не обращаться к ним по абсолютному индексу из того же TreeView.
|
|
Меньшенин (статус: Посетитель), 12 апреля 2010, 20:04 [#3]:
Спасибо за внимание.
ConsultCodes - массив, содержащий id из таблицы
то есть ConsultCodes[Node.AbsoluteIndex] - таким образом я получаю ID, к сожалению у меня нет компонента DBTreeView
_________________
а позиционировать Query надо с помошью метода Locate
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|