![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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. |