|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Заполнение компонентов на форме из разных таблиц
Доброго времени суток всем. Я совершенно не представляю что делать. У меня есть форма в ней я заполняю всю нужную мне информацию и добавляю её в разные таблицы. На главной форме есть dbGrid в которой отображаются некоторые данные а именно Ф.И.О и мне нужно при выборе записи в Grid и при нажатии на кнопку "Изменить" открывалась предыдущая таблица с заполненными компонентами из разных таблиц соответствующая выбранной записи.
P.S База Access все таблицы имею столбец id_info главная таблица "Ф.И.О" имеет связь один ко многим. Буду благодарен. |
#2
|
|||
|
|||
Цитата:
Если я правельно понял. На событие дабл клик в гриде нужно вызвать вашу форму заполнения и там использовать команду редоктирования Edit. Код:
begin With Datamodule2.People do begin Edit; if Form1.ShowModal = mrOk Then Post else Cancel; end; |
#3
|
||||
|
||||
Ох и не люблю же я такие вопросы. Гадать приходится постоянно.
Может Zhigalov прав, а может и не так. Может у автора несколько таблиц и для каждой нужна своя форма ввода и нужен навигатор перехода между этими формами по аналогии кнопок перехода в IE. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#4
|
||||
|
||||
Цитата:
1)На главной форме выделить нужную запись в grid. 2)Нажать кнопку на форме. 3)Должна открыться форма заполнения только уже с заполненными компонентами из разных таблиц. 4)Потом я вношу изменения жму кнопку и все изменения вносятся в разные таблицы. (не добавление а изменение текущих записей) Добавление производится через эту-же форму таким способом: Код:
procedure TForm4.Button5Click(Sender: TObject); begin if DataModule1.ADOQuery2.Active = True then DataModule1.ADOQuery2.Close; DataModule1.ADOQuery2.sql.Text := 'insert into Работники (Фамилия, Имя, Отчество, Подразделение, Статус_работника, Пол, id_info) values ("' + Edit_fio.Text + '", "' + Edit_name.Text + '", "' + Edit_otch.Text + '", "' + ComboBox1.Text + '", "' + DBLookUpCombobox.Text + '", "' + ComboBox2.Text + '", "' + Inttostr(seInfo.Value) + '")'; DataModule1.ADOQuery2.ExecSQL; |
#5
|
||||
|
||||
Так, уже проясняется. Итак, вот что вам видимо нужно:
1. Поместить на вторую форму для каждой из используемых таблиц свою пару компонентов TAdoTable и TDataSource. Связать TAdoTable с TDataSource через свойство TDataSource.Dataset 2. Далее надо установить правильно связь между самими таблицами, так-что бы данные правильно разносились автоматом. Делается это через свойство таблицы MasterSource и связку по ключевым полям MasterFields Как я понял таблица Работники у вас главная (MasterSource) а на нее завязаны уже остальные таблицы. Не имея схемы вашей БД я пока дальше немогу объяснить что и как вам связать. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#6
|
||||
|
||||
|
#7
|
||||
|
||||
Окно моей программы :
Хотелось бы при выборе в главной форме записи и при нажатии на кнопку изменить открывалась форма на добавление с заполненными полями. Последний раз редактировалось Amilman, 10.10.2011 в 21:19. |
#8
|
||||
|
||||
Цитата:
- Товарищ прапорщик!!! Остановите поезд!!! - Поезд СТОЙ! РАЗ! ДВА! |
#9
|
||||
|
||||
Цитата:
|
#10
|
||||
|
||||
Мдаааа..., структурка БД конечно...
Ну не суть. Я вам объясню сам принцип, а структуру мы вам можем подсказать уже потом. Итак, с учетом вашей схемы будет так: Главной таблицей у вас является "Работники", с другими таблицами у вас организована связь по ключу id_info. Тогда на форму кидаете 3 пары компонент 1: AdoTable1,DataSource1 - подключение к таблице Работники 2: AdoTable2,DataSource2 - подключение к таблице Основное 3: AdoTable3,DataSource3 - подключение к таблице Паспорт Для AdoTable2 и AdoTable3 установите MasterSource = DataSource1, MasterFields = id_info и IndexFieldNames = id_info Теперь AdoTable1,AdoTable2,AdoTable3 можно активировать. Если сделали все правильно, то при выборе записи в таблице Работники у вас автоматом будут выбраны все записи из таблиц Основное и Паспорт где id_info совпадает. Если-же в Основное или Паспорт нет данных, то при добавлении новой записи в любую из этих таблиц будет автоматом прописан ключ id_info от таблицы Работники. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#11
|
||||
|
||||
Цитата:
- Товарищ прапорщик!!! Остановите поезд!!! - Поезд СТОЙ! РАЗ! ДВА! Последний раз редактировалось Viajero, 11.10.2011 в 17:00. |
#12
|
||||
|
||||
Попытался вывести записи из таблицы таким методом:
Код:
procedure TForm1.DBGrid1CellClick(Column: TColumn); begin with TForm4.Create(Application) do Show; Form4.Edit_name.Text:= DataModule1.ADOQuery2.FieldByName('Имя').AsString; Form4.MaskEdit4.Text:= DataModule1.ADOQuery6.FieldByName('Дата_приёма_на_работу').AsString; end; |
#13
|
||||
|
||||
Цитата:
Цитата:
Цитата:
- Товарищ прапорщик!!! Остановите поезд!!! - Поезд СТОЙ! РАЗ! ДВА! Последний раз редактировалось Viajero, 11.10.2011 в 17:25. |
#14
|
||||
|
||||
Цитата:
Вы имеете введу что форму можно вызвать таким методом "Form4.Show;" ? |
#15
|
||||
|
||||
Цитата:
Код:
A with statement is a shorthand for referencing the fields of a record or the fields, properties, and methods of an object. The syntax of a with statement is with obj do statement or with obj1, ..., objn do statement where obj is an expression yielding a reference to a record, object instance, class instance, interface or class type (metaclass) instance, and statement is any simple or structured statement. Within statement, you can refer to fields, properties, and methods of obj using their identifiers alone--without qualifiers. For example, given the declarations type TDate = record Day: Integer; Month: Integer; Year: Integer; end; var OrderDate: TDate; you could write the following with statement. with OrderDate do if Month = 12 then begin Month := 1; Year := Year + 1; end else Month := Month + 1; This is equivalent to if OrderDate.Month = 12 then begin OrderDate.Month := 1; OrderDate.Year := OrderDate.Year + 1; end else OrderDate.Month := OrderDate.Month + 1; If the interpretation of obj involves indexing arrays or dereferencing pointers, these actions are performed once, before statement is executed. This makes with statements efficient as well as concise. It also means that assignments to a variable within statement cannot affect the interpretation of obj during the current execution of the with statement. Each variable reference or method name in a with statement is interpreted, if possible, as a member of the specified object or record. If there is another variable or method of the same name that you want to access from the with statement, you need to prepend it with a qualifier, as in the following example. with OrderDate do begin Year := Unit1.Year ... end; When multiple objects or records appear after with, the entire statement is treated like a series of nested with statements. Thus with obj1, obj2, ..., objn do statement is equivalent to with obj1 do with obj2 do ... with objn do statement In this case, each variable reference or method name in statement is interpreted, if possible, as a member of objn; otherwise it is interpreted, if possible, as a member of objn-1; and so forth. The same rule applies to interpreting the objs themselves, so that, for instance, if objn is a member of both obj1 and obj2, it is interpreted as obj2.objn. - Товарищ прапорщик!!! Остановите поезд!!! - Поезд СТОЙ! РАЗ! ДВА! Последний раз редактировалось Viajero, 11.10.2011 в 17:58. |