![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
|
Как сделать связь таблиц по одинаковому полю? У меня две таблицы имеют одно и тоже поле ID. Таблица №1 с полями: ID, ФАМИЛИЯ, ИМЯ, ОТЧЕСТВО - это основная, а таблица №2 с полями: ID, ID_Predmet, ДВОЕК, ТРОЕК, ЧЕТВЕРОК, ПЯТЕРОК - это подчиненная. Как их правильно свзяать по этому ID? Делал на примере таблиц CUSTOMER и ORDERS из папки примеров Delphi, но у меня не получается. Последовательность действий примерно такая:
1. В той таблице, которую надо подключить к основной нужно через свойство MasterSource указать DataSource основной таблицы. 2. Открыть поле MasterFields и выбрать одинаковые названия из полей Detail Fields и Master Fields и установить связь. В примере из Delphi там все ништяк устанавливается, а у меня не получается . Одинаковые названия полей у меня появляется только тогда, когда я в дочерней таблице на против поля ID ставлю *. Но после этого у меня не добавляются данные в дочернюю таблицу. Как правильно сделать? Кто нибудь знает? |
|
#2
|
||||
|
||||
|
У вас таблицы не имеют общих полей. Добавьте в таблицу №2 поле ID_Human, где ID_Human = ID из таблицы №1
|
|
#3
|
||||
|
||||
|
А чем ID плох? В Таблице №2 ID это и подразумевается ссылка на ID в Таблице №1. В моем случае это должно быть ID->ID. А вы имеете ввиду сделать ID_Human->ID?
|
|
#4
|
||||
|
||||
|
Плох тем, что таблица №2 должна иметь свой уникальный ключ, которым по логике является ID, и таковым никак не может быть ID из таблицы №1 т.к. у вас предполагается отношение один ко многим.
Цитата:
|
|
#5
|
||||
|
||||
|
Цитата:
А поле, например, ID_Human, сделать тип N? |
|
#6
|
||||
|
||||
|
Цитата:
|
|
#7
|
||||
|
||||
|
можете помочь мне с моими таблицами? Можете для меня сделать исходник такой связи? Плиз. Скрины таблиц выложил я.
|
|
#8
|
||||
|
||||
|
Парадоксом не пользуюсь, сделал на том что было под рукой, а именно Акцесс.
Код:
unit Unit19;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, DBGrids, DB, ADODB;
type
TForm19 = class(TForm)
ADOConnection1: TADOConnection;
ADOTable1: TADOTable;
ADOTable2: TADOTable;
DataSource1: TDataSource;
DataSource2: TDataSource;
DBGrid1: TDBGrid;
DBGrid2: TDBGrid;
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form19: TForm19;
implementation
{$R *.dfm}
end.
object Form19: TForm19
Left = 0
Top = 0
Caption = 'Form19'
ClientHeight = 302
ClientWidth = 635
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object DBGrid1: TDBGrid
Left = 24
Top = 48
Width = 553
Height = 120
DataSource = DataSource1
TabOrder = 0
TitleFont.Charset = DEFAULT_CHARSET
TitleFont.Color = clWindowText
TitleFont.Height = -11
TitleFont.Name = 'Tahoma'
TitleFont.Style = []
end
object DBGrid2: TDBGrid
Left = 24
Top = 174
Width = 553
Height = 120
DataSource = DataSource2
TabOrder = 1
TitleFont.Charset = DEFAULT_CHARSET
TitleFont.Color = clWindowText
TitleFont.Height = -11
TitleFont.Name = 'Tahoma'
TitleFont.Style = []
end
object ADOConnection1: TADOConnection
Connected = True
ConnectionString =
'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\'#1061#1086#1079#1103#1080#1085'\Doc' +
'uments\Example.mdb;Persist Security Info=False'
LoginPrompt = False
Mode = cmShareDenyNone
Provider = 'Microsoft.Jet.OLEDB.4.0'
Left = 24
Top = 8
end
object ADOTable1: TADOTable
Active = True
Connection = ADOConnection1
CursorType = ctStatic
TableName = 'Table_Infa'
Left = 72
Top = 8
end
object ADOTable2: TADOTable
Active = True
Connection = ADOConnection1
CursorType = ctStatic
IndexFieldNames = 'HumanID'
MasterFields = 'ID'
MasterSource = DataSource1
TableName = 'Table_marks'
Left = 144
Top = 8
end
object DataSource1: TDataSource
DataSet = ADOTable1
Left = 104
Top = 8
end
object DataSource2: TDataSource
DataSet = ADOTable2
Left = 176
Top = 8
end
end |
|
#9
|
||||
|
||||
|
Кстати, таблица Оценки по структуре несколько неверна.
Должно быть где-то так: ID,PredmetID,HumanID,Date,Value |