powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Подчиненная таблица
24 сообщений из 24, страница 1 из 1
Подчиненная таблица
    #32963168
.DLL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет всем!
Помогите пожалста, кто может. Или хотя бы наведите на мысль, как реализовать следующее:
У меня есть две связанные таблички
Я делаю форму с подчиненной, как это например можно сделать в Access, т.е. сначала вводится шапка (главная запись), а потом подчиненные.
Как это можно реализовать. Если вопрос не очень понятен, то могу уточнить что требуется.
Спасибо.
...
Рейтинг: 0 / 0
Подчиненная таблица
    #32963177
.DLL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И вариант формы
...
Рейтинг: 0 / 0
Подчиненная таблица
    #32966297
.DLL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Странное ощущение, что на форуме стало обитать 1 максимум 2 человека. :(
Никто не может помочь?
...
Рейтинг: 0 / 0
Подчиненная таблица
    #32966429
sposad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Давай попробуем разобраться:
Вопрос первый - что используется в качестве сервера ?
Вопрос второй - в первой таблице как primarykey поле [код продаж], а во второй таблице как FK - такое же поле. Но во второй таблице primarykey [код человека]. Получается, что [код продаж] у каждого человека может быть только один ?
Вопрос третий - надо обязательно только такую форму, скрин которой представлен ?
...
Рейтинг: 0 / 0
Подчиненная таблица
    #32966469
.DLL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sposadДавай попробуем разобраться:
Вопрос первый - что используется в качестве сервера ?
Вопрос второй - в первой таблице как primarykey поле [код продаж], а во второй таблице как FK - такое же поле. Но во второй таблице primarykey [код человека]. Получается, что [код продаж] у каждого человека может быть только один ?
Вопрос третий - надо обязательно только такую форму, скрин которой представлен ?
Привет, спасибо что откликнулись!
1- Использую SQL server 2000
2- тут ситуация такая, что одной накладной может быть назначено несколько человек (смысл, что в одном билете ЖД может быть указано несколько человек) поэтому связь один ко многим. Когда заводим следующую накладную, то ей можно опять же назначить несколько людей.
3- Прицип я взял из 1С, на основе которой я делаю эту прожку, табличная часть может быть обычной, роли не играет, а сам принцип - сначала заполняется шапка, а потом добавляются люди в табличку, нужно оставить.
...
Рейтинг: 0 / 0
Подчиненная таблица
    #32967030
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
.DLL
3- Прицип я взял из 1С, на основе которой я делаю эту прожку, табличная часть может быть обычной, роли не играет, а сам принцип - сначала заполняется шапка, а потом добавляются люди в табличку, нужно оставить.

а что здесь у вас не получается? :-)

Код: plaintext
 uid  =  S a
...
Рейтинг: 0 / 0
Подчиненная таблица
    #32967457
.DLL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sa .DLL
3- Прицип я взял из 1С, на основе которой я делаю эту прожку, табличная часть может быть обычной, роли не играет, а сам принцип - сначала заполняется шапка, а потом добавляются люди в табличку, нужно оставить.

а что здесь у вас не получается? :-)

Код: plaintext
 uid  =  S a

VB ругается, что чтобы вставить записи в подчиненную таблицу необходимо наличие записи в главной таблице, и это понятно, но я не знаю как настраивать поля Контрагент, Форма оплаты и т.д. чтобы данные сразу попадали бы в главную таблицу и я мог ввести людей.
...
Рейтинг: 0 / 0
Подчиненная таблица
    #32967759
sposad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В логику ещё не влез, но по последнему посту могу посоветовать следующее:
1. на сервере написать процедуру, которая добавляет в основную таблицу строку и в качестве выходного параметра выдаёт идентификатор добавленной строки.
2. Выполнение этой процедуры можно навесить на какое-нить событие формы и полученный параметр записываем в переменную(свойство) формы.
3. Заполнить форму данными и передать их в качестве входных параметров на сервер в ХП, которая по идентификатору (where ID=идентификатор), записанному в форме п.2 заполняет поля в основной таблице, а в подчинённой добавляет строки с данными формы и идентификаторами в качестве FK.

Можно пункты 1 и 2 объеденить в один и в одной процедуре добавлять строки в основную и подчинённую, это лучше с точки зрения количества обращения к серверу. Но в 2 этапа процесс более контролируем.

Всё это очень обще и только с точки зрения моего понимания логики.
...
Рейтинг: 0 / 0
Подчиненная таблица
    #32967792
sposad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати чтобы не ругался датасет на нарушение целостности, можно в его свойствах проставить EnforceConsrpaits в False, но в этом случае надо будет наладить свой контроль за наличием "висячих" строк в подчинённой таблице.
...
Рейтинг: 0 / 0
Подчиненная таблица
    #32967826
.DLL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sposadВ логику ещё не влез, но по последнему посту могу посоветовать следующее:
1. на сервере написать процедуру, которая добавляет в основную таблицу строку и в качестве выходного параметра выдаёт идентификатор добавленной строки.
2. Выполнение этой процедуры можно навесить на какое-нить событие формы и полученный параметр записываем в переменную(свойство) формы.
3. Заполнить форму данными и передать их в качестве входных параметров на сервер в ХП, которая по идентификатору (where ID=идентификатор), записанному в форме п.2 заполняет поля в основной таблице, а в подчинённой добавляет строки с данными формы и идентификаторами в качестве FK.

Можно пункты 1 и 2 объеденить в один и в одной процедуре добавлять строки в основную и подчинённую, это лучше с точки зрения количества обращения к серверу. Но в 2 этапа процесс более контролируем.

Всё это очень обще и только с точки зрения моего понимания логики.
Да спасибо, я так и сделал. Но ведь на то и ADO.NET и для того таблицы связывал, чтобы обеспечивать целостность и использовать новые возможности .NET, чтобы выполнить Me.SqlDataAdapter1.Update и все записалось в базу.
...
Рейтинг: 0 / 0
Подчиненная таблица
    #32968009
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Давайте попорядку.... Структура БД (лучше DDL скрипт), и усеченная постановка задачи.

Я пока понял - что существуют две таблицы в отношении Master-Detail. Сначала заполняются данные в таблице Master затем в Detail.

Код: plaintext
 uid  =  S a
...
Рейтинг: 0 / 0
Подчиненная таблица
    #32968257
.DLL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SaДавайте попорядку.... Структура БД (лучше DDL скрипт), и усеченная постановка задачи.

Я пока понял - что существуют две таблицы в отношении Master-Detail. Сначала заполняются данные в таблице Master затем в Detail.

Код: plaintext
 uid  =  S a


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_ЛюдиЖД_ПродажаЖД]') and OBJECTPROPERTY(id, N'IsForeignKey') =  1 )
ALTER TABLE [dbo].[ЛюдиЖД] DROP CONSTRAINT FK_ЛюдиЖД_ПродажаЖД
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[ЛюдиЖД]') and OBJECTPROPERTY(id, N'IsUserTable') =  1 )
drop table [dbo].[ЛюдиЖД]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[ПродажаЖД]') and OBJECTPROPERTY(id, N'IsUserTable') =  1 )
drop table [dbo].[ПродажаЖД]
GO

CREATE TABLE [dbo].[ЛюдиЖД] (
	[Код_человека] [int] IDENTITY ( 1 ,  1 ) NOT NULL ,
	[ФИО] [varchar] ( 100 ) COLLATE Cyrillic_General_CI_AS NULL ,
	[Номер_бланка] [varchar] ( 20 ) COLLATE Cyrillic_General_CI_AS NULL ,
	[Дата1] [smalldatetime] NULL ,
	[Дата2] [smalldatetime] NULL ,
	[Класс] [int] NULL ,
	[Число_мест] [int] NULL ,
	[Город1] [int] NULL ,
	[Город2] [int] NULL ,
	[Город3] [int] NULL ,
	[Тариф] [money] NULL ,
	[КомСбор] [money] NULL ,
	[Код_продажи] [int] NULL ,
	[ВТЧСтВзнос] [money] NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[ПродажаЖД] (
	[Код_продажи] [int] IDENTITY ( 1 ,  1 ) NOT NULL ,
	[Код_контрагента] [int] NULL ,
	[Форма_оплаты] [int] NULL ,
	[Номер_накладной] [varchar] ( 12 ) COLLATE Cyrillic_General_CI_AS NULL ,
	[Дата_от] [smalldatetime] NULL ,
	[Оператор] [varchar] ( 32 ) COLLATE Cyrillic_General_CI_AS NULL ,
	[Сотруднику] [int] NULL ,
	[Дата_создания] [smalldatetime] NULL ,
	[Код] [int] NOT NULL ,
	[Префикс] [varchar] ( 10 ) COLLATE Cyrillic_General_CI_AS NOT NULL ,
	[К_уделению] [int] NULL 
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[ЛюдиЖД] WITH NOCHECK ADD 
	CONSTRAINT [PK_ЛюдиЖД] PRIMARY KEY  CLUSTERED 
	(
		[Код_человека]
	)  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[ПродажаЖД] WITH NOCHECK ADD 
	CONSTRAINT [PK_ПродажаЖД] PRIMARY KEY  CLUSTERED 
	(
		[Код_продажи]
	)  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[ЛюдиЖД] WITH NOCHECK ADD 
	CONSTRAINT [DF_ЛюдиЖД_ВТЧСтВзнос] DEFAULT ( 2 . 30 ) FOR [ВТЧСтВзнос]
GO

ALTER TABLE [dbo].[ПродажаЖД] WITH NOCHECK ADD 
	CONSTRAINT [DF_ПродажаЖД_Сотруднику] DEFAULT (null) FOR [Сотруднику],
	CONSTRAINT [DF_ПродажаЖД_Дата_создания] DEFAULT (getdate()) FOR [Дата_создания],
	CONSTRAINT [DF_ПродажаЖД_К_уделению] DEFAULT ( 0 ) FOR [К_уделению]
GO

 CREATE  INDEX [IX_ЛюдиЖД] ON [dbo].[ЛюдиЖД]([Код_человека]) ON [PRIMARY]
GO

 CREATE  UNIQUE  INDEX [IX_ПродажаЖД] ON [dbo].[ПродажаЖД]([Код_продажи]) ON [PRIMARY]
GO

ALTER TABLE [dbo].[ЛюдиЖД] ADD 
	CONSTRAINT [FK_ЛюдиЖД_Города] FOREIGN KEY 
	(
		[Город1]
	) REFERENCES [dbo].[Города] (
		[Код_города]
	),
	CONSTRAINT [FK_ЛюдиЖД_Города1] FOREIGN KEY 
	(
		[Город2]
	) REFERENCES [dbo].[Города] (
		[Код_города]
	),
	CONSTRAINT [FK_ЛюдиЖД_Города2] FOREIGN KEY 
	(
		[Город3]
	) REFERENCES [dbo].[Города] (
		[Код_города]
	),
	CONSTRAINT [FK_ЛюдиЖД_Классы] FOREIGN KEY 
	(
		[Класс]
	) REFERENCES [dbo].[Классы] (
		[Код_класса]
	),
	CONSTRAINT [FK_ЛюдиЖД_ПродажаЖД] FOREIGN KEY 
	(
		[Код_продажи]
	) REFERENCES [dbo].[ПродажаЖД] (
		[Код_продажи]
	) ON DELETE CASCADE  ON UPDATE CASCADE 
GO

ALTER TABLE [dbo].[ПродажаЖД] ADD 
	CONSTRAINT [FK_ПродажаЖД_Контрагенты] FOREIGN KEY 
	(
		[Код_контрагента]
	) REFERENCES [dbo].[Контрагенты] (
		[Код_контрагента]
	),
	CONSTRAINT [FK_ПродажаЖД_Сотрудники] FOREIGN KEY 
	(
		[Сотруднику]
	) REFERENCES [dbo].[Сотрудники] (
		[Код_сотрудника]
	),
	CONSTRAINT [FK_ПродажаЖД_ФормыОплаты] FOREIGN KEY 
	(
		[Форма_оплаты]
	) REFERENCES [dbo].[ФормыОплаты] (
		[Код_формы]
	)
GO
- это скрит
Сначала заполняю ПродажаЖД, потом ЛюдиЖД и я хотел заносить данные в DataTable, делать update чтобы изменения отражались в базе данных.
Не обязательно моя структура таблиц (можно например Классы - Ученики, т.е. тоже один ко многим), я хочу сам принцип понять, как вносятся данные через форму подобную моей в базу.
...
Рейтинг: 0 / 0
Подчиненная таблица
    #32968298
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вас интересует работа через типизированный DataSet? И визуальная работа с Command ом , DataAdapter ом и т.д ???

Или без разницы.

Код: plaintext
 uid  =  S a
...
Рейтинг: 0 / 0
Подчиненная таблица
    #32968342
.DLL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SaВас интересует работа через типизированный DataSet? И визуальная работа с Command ом , DataAdapter ом и т.д ???

Или без разницы.

Код: plaintext
 uid  =  S a

Хм.
Без разници думаю. Просто нужен результат.
Какие свойства нужно изменить у полей для привязки к конкретным полям таблицы, чтобы осуществлять ввод и пр.
Может где есть готовый пример?
...
Рейтинг: 0 / 0
Подчиненная таблица
    #32968442
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Несомненно в сети есть и готовые примеры.
Сегодня ночью/утром, думаю я выложу сюда демонстрирующий пример по вашей схеме данных.

P.S. сейчас просто нет для этого времени :-(

Код: plaintext
 uid  =  S a
...
Рейтинг: 0 / 0
Подчиненная таблица
    #32968832
.DLL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SaНесомненно в сети есть и готовые примеры.
Сегодня ночью/утром, думаю я выложу сюда демонстрирующий пример по вашей схеме данных.

P.S. сейчас просто нет для этого времени :-(

Код: plaintext
 uid  =  S a


Спасибо огромное! Не торопитесь, всеравно впереди выходные.
...
Рейтинг: 0 / 0
Подчиненная таблица
    #32969437
Фотография Deft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скажи пожалуйста, а что за грид у тебя на форме?
...
Рейтинг: 0 / 0
Подчиненная таблица
    #32970581
.DLL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DeftСкажи пожалуйста, а что за грид у тебя на форме?
XtraGrid от Devexpress.
...
Рейтинг: 0 / 0
Подчиненная таблица
    #32970614
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Написал тестовый вариант. Но перечитав весть тред засомневался на чем именно вы споткнулись?
.DLL
VB ругается, что чтобы вставить записи в подчиненную таблицу необходимо наличие записи в главной таблице,

Ругается когда работаете с DataSet или уже при попытке внесения изменений в БД?

Код: plaintext
 uid  =  S a
...
Рейтинг: 0 / 0
Подчиненная таблица
    #32970695
.DLL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SaРугается когда работаете с DataSet или уже при попытке внесения изменений в БД?

Ругается когда работаю в DataSet
...
Рейтинг: 0 / 0
Подчиненная таблица
    #32970699
.DLL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Он правильно ругается, потому что в главной талице еще нет записи, а в подчиненную я ее вношу через датасет. А как напрямую через текстовые поля внести в DataTable запись я не знаю :/
...
Рейтинг: 0 / 0
Подчиненная таблица
    #32970798
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
теперь понятно,
выкладываю тестовый пример, при создании формы использовал Data Wizard за счет этого, на весь пример ушло 7 минут.
То что к коду Data-мастера добавил я, маркированно как "added by Sa"

Какая либо БД для работы примера не требуется, DataSet создан по вашей схеме, единственно я убрал (лишнии для тестового примера поля).

+ на форме добавил GroupBox и подписался на ValidateChanged, где уже commit ю изменения произведенные в TextBox ах, т.е. предполагаем что функцию Отмену в этой форме для ПродажаЖД делать не надо. Commit ить добавленную запись в ПродажаЖД приходится обязательно, иначе по DataRelation в Detail table значения ID не попадут.

Код: plaintext
 uid  =  S a
...
Рейтинг: 0 / 0
Подчиненная таблица
    #32970808
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сам пример

Код: plaintext
 uid  =  S a
...
Рейтинг: 0 / 0
Подчиненная таблица
    #32970879
.DLL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо большущее!
Сейчас поизучаю.
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Подчиненная таблица
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]