![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Delphi и MS SQL
Леонид © (2007-12-05 16:32:00)Помогите пожалуйста - я сделал в первой форме два списка - Отдел и Сотрудники, во второй форме DBGrid в котором можно редактировать данные, с отделами все окей, а вот с сотрудниками проблема, мне нужно что бы как-то им задавался id отдела куда я хочу добавить его... Т.е. что бы DBNavigator понял что сотрудника нужно добавлять не с пустым id а с установленным мной, выводить в DBGrid полем id отдела нельзя, т.к. по идее отдел уже выбран изначально тот куда я буду забивать сотрудника.
ЮЮ (2007-12-06 10:05:00) [1]> Т.е. что бы DBNavigator понял что сотрудника нужно добавлят
Уж кому-кому, а DBNavigator-у точно все пофиг :) Его дело Insert и Post выполнить.
Проще всего связать DataSet-ы как мастер-детайл (TDataSet.DataSource), и тогда в DataSet-е Сотрудники будут толко записи, соответствующие текущей в DataSet-е Отдел. Соответстаенно при вставке новой записи в Сотрудники вствится нужное Id. По крайней мере это работало а BDE. В ADO "батонокидательством" не занимаюсь :)
Johnmen (2007-12-06 09:03:00) [2]Читать про lookup-поля и не заниматься ерундой. Ещё лучше - элементарную книжку про программирование баз данных.
Германн (2007-12-06 02:46:00) [3]
> Леонид (05.12.07 16:45) [1]
А за "ADOQuery" тебя пожурят другие люди, более продвинутые, чем я. :)
Германн (2007-12-06 01:35:00) [4]
> Леонид (05.12.07 16:45) [1]
Если я всё правильно понял (а это не очень просто было сделать, учитывая "обрывочность" информации), то такие поля записи удобнее заполнять в событии OnNewRecord.
Леонид (2007-12-05 16:45:00) [5]Собственно делается как я понимаю это так:
procedure TForm4.ADOQuery1BeforePost(DataSet: TDataSet);
begin
if (SelName = 'СОТРУДНИК') then
begin
DataSet.FieldByName('ID').AsInteger := integer(Form3.ComboBox2.Items.Objects[Form3.ComboBox2.ItemIndex]);
end;
end;