Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 13.04.2014
Сообщений: 98
1

Добавление записи в БД

28.09.2016, 00:23. Показов 1417. Ответов 29
Метки нет (Все метки)

Знаю тем много! сейчас разобрался как заполнять 1 табличку через sql запрос
а как правильно написать запрос для добавление записи в таблицу которая состоит из нескольких таблиц?
допустим есть 2 таблицы автомобили и владелец.
и таблица автомобили связана с владельцем через ID тогда мы получаем некую связь и когда мы хотим добавить владельца со своим авто то нам нужны разные поля из двух этих таблиц..
как правильно нужно будет написать запрос? ввод текста будет через Edit. запрос в ADOQuery
буду очень благодарен если напишите пример такого запроса для добавления ,редактирования и удаления записи !
Всем спасибо )!
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.09.2016, 00:23
Ответы с готовыми решениями:

ListView: добавление записи, выбор записи, удаление записи
на форме есть три текст бокса: textbox1(имя), textbox2(фамилия), textbox3(отчество),...

Добавление новой записи в таблицу и осуществление запроса на добавление при загрузке формы
Здравствуйте. Есть одна просьба, подскажите как сделать или пример кода покажите на вот такую...

Добавление и удаление записи, поиск записи с максимальной зарплатой, сортировка по алфавиту
Помогите, пожалуйста!:help: Очень нужно сделать до 26!(а если не сложно, то еще и с комментариями...

Автоматическое добавление записи в таблицу, после добавления записи в другой таблице
Привет всем! Подскажите, как Access 2010 сделать так, чтобы при добавлении записи в одной таблице,...

29
пофигист широкого профиля
4451 / 2939 / 830
Регистрация: 15.07.2013
Сообщений: 16,915
28.09.2016, 01:39 2
А что первично? Владелец или автомобиль? Или и то и другое?
0
W
115 / 115 / 33
Регистрация: 16.04.2013
Сообщений: 733
28.09.2016, 08:17 3
В 2 таблицы одновременно sql не добавит. По идее автомобиль имеет только 1 владельца, а у владельца может быть 10000 и более авто. Значит главная таблица Автомобили, Владельцы - справочник.
В Автомобили добавляем запись и из справочника выбираем заранее забитого туда владельца точнее его id.
0
Супер-модератор
8767 / 2502 / 142
Регистрация: 07.03.2007
Сообщений: 11,856
28.09.2016, 08:57 4
diegovoin, честно говоря, вы не первый, который хочет подобной странной операции... что мешает последовательно добавить по записи в каждую таблицу? вы думаете, подобным образом, ускорить работу своей программы до бесконечности? или чем вызван интерес к подобным операциям? в принципе есть вариант - хранимые процедуры + триггеры... передаете туда данные, а там уже добавляете данные в нужные таблицы...
0
0 / 0 / 0
Регистрация: 13.04.2014
Сообщений: 98
28.09.2016, 10:07  [ТС] 5
Lord_Voodoo, да в принципе можно и добавить запись последовательно в каждую таблицу, а связь не повлияет на это? с о вторым вариантом не связывался
0
97 / 97 / 25
Регистрация: 25.04.2016
Сообщений: 525
28.09.2016, 10:15 6
Цитата Сообщение от diegovoin Посмотреть сообщение
а как правильно написать запрос для добавление записи в таблицу которая состоит из нескольких таблиц?
Вы путаете таблицу (которая Таблица) с результатом выполнения запроса скорее всего.
Для примера:
У вас есть 2 таблицы: Table1 (id int; name nvarchar(10)); Table2 (id int; surname nvarchar(20)); Между которыми связь по полю id. Теперь если сделать вот так:
SQL
1
2
SELECT name,surname FROM Table1 AS t1
LEFT JOIN Table2 AS t2 ON t1.id = t2.id
То у вас запрос выведет одну "таблицу") Скорее всего вы имеете ввиду именно эту "Таблицу".
И да, вам действительно надо добавлять данные в несколько таблиц. По принципу - сначала источник, потом таблица со ссылкой. Например первая таблица ссылается на вторую - значит делаете:
SQL
1
2
INSERT INTO table2 SELECT 1, 'Пупкин';
INSERT INTO table1 SELECT 1, 'Вася'.
0
0 / 0 / 0
Регистрация: 13.04.2014
Сообщений: 98
28.09.2016, 10:15  [ТС] 7
kavasaka, получается .если правильно я вас понял .. insertОМ мы можем заполнить каждую табличку( сначала справочник потом главную) и когда будем заполнять главную то для поля ФИО владельца(например так) мы используем select который передает на combobox хмхм... как в коде то будет
0
97 / 97 / 25
Регистрация: 25.04.2016
Сообщений: 525
28.09.2016, 10:31 8
Вот вам пример на MSSQL

SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
--Создадим 2 таблицы.
--Связь между ними по полю @humans.carid - @cars.id
DECLARE @humans TABLE (id uniqueidentifier DEFAULT newid(), carid uniqueidentifier, hname nvarchar(20));
DECLARE @cars TABLE (id uniqueidentifier, car_model nvarchar(20), car_year INT);
--Заполним справочник Авто
INSERT INTO @cars SELECT newid(), 'Audi', 2016
INSERT INTO @cars SELECT newid(), 'Bmw', 2014
INSERT INTO @cars SELECT newid(), 'Opel', 2012
INSERT INTO @cars SELECT newid(), 'Lada', 2011
--Добавим данные по людям - кто каким авто владеет
INSERT INTO @humans SELECT newid(), (SELECT id FROM @cars WHERE car_model = 'Audi'), 'Петр Петров'
INSERT INTO @humans SELECT newid(), (SELECT id FROM @cars WHERE car_model = 'Bmw'), 'Петр Петров'
INSERT INTO @humans SELECT newid(), (SELECT id FROM @cars WHERE car_model = 'Lada'), 'Сергей Иванов'
INSERT INTO @humans SELECT newid(), (SELECT id FROM @cars WHERE car_model = 'Lada'), 'Николай Васильев'
INSERT INTO @humans SELECT newid(), (SELECT id FROM @cars WHERE car_model = 'Opel'), 'Иван Иванов'
--Люди:
SELECT * FROM @humans
--Авто:
SELECT * FROM @cars
--Кто чем владеет:
SELECT hname, car_model FROM @humans AS h
LEFT JOIN @cars AS c ON h.carid = c.id
Миниатюры
Добавление записи  в БД  
1
W
115 / 115 / 33
Регистрация: 16.04.2013
Сообщений: 733
28.09.2016, 11:11 9
Цитата Сообщение от diegovoin Посмотреть сообщение
как в коде то будет
какой код? sql запроса, так тебе вон сколько накидали. На крайняк сам его можешь в конструкторе аксеса сваять.
А если на Delphi, то выкладывай проект и базу чтобы понятно было что ты от нее хочешь.
1
W
115 / 115 / 33
Регистрация: 16.04.2013
Сообщений: 733
28.09.2016, 11:46 10
Программу я бы такого типа нарисовал. Для начала выполняем поиск васи в базе, если его еще там нет - добавляем как нового. При этом ему присваивается id например 123.
Миниатюры
Добавление записи  в БД  
0
W
115 / 115 / 33
Регистрация: 16.04.2013
Сообщений: 733
28.09.2016, 11:48 11
Затем добавляем ему новый авто. Запрос для этого добавления берет текущий id васи из датасета Владельцы (123) и вносит в таблицу Автомобили.
0
Супер-модератор
8767 / 2502 / 142
Регистрация: 07.03.2007
Сообщений: 11,856
28.09.2016, 16:10 12
Цитата Сообщение от diegovoin Посмотреть сообщение
да в принципе можно и добавить запись последовательно в каждую таблицу, а связь не повлияет на это?
ну смотря как добавлять... если добавлять в последовательности: основная таблица - зависимая таблица (по ID из основной таблицы), тогда сервер одобрит... в противном случае, как можно добавить какие-то данные для несуществующего ID... если можно так выразиться, то получается, что похоронили того, кто еще и не родился...

Цитата Сообщение от diegovoin Посмотреть сообщение
с о вторым вариантом не связывался
рано или поздно все равно придется, так что лучше раньше...
0
0 / 0 / 0
Регистрация: 13.04.2014
Сообщений: 98
28.09.2016, 18:32  [ТС] 13
kavasaka, да сейчас буду разбираться с тем что накидали ! а так у меня проект "Автомойка"
регистрация клиента если его нет в базе ,в анкету идут таблицы автомобиль клиент и услуги с ценами .
если есть клиент то там уже сразу выводит клиента ну и услуги ... в дальнейшем если клиент наберет определенную стоимость то делается скидка .. но это в дальнейшем будет ..
сейчас я пытаюсь разобраться по кусочкам... регистрация клиента ,редактирование удаление ..

Добавлено через 21 минуту
kavasaka, и у меня Delphi 7 + MS SQL Server 2008 как то так) в акцесе запретили делать
0
97 / 97 / 25
Регистрация: 25.04.2016
Сообщений: 525
28.09.2016, 22:50 14
Ловите базу для автомойки вашей
Готов пояснить, если понравится

SQL
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
IF EXISTS (SELECT * FROM sysobjects WHERE id = object_id('[clients]') AND sysstat & 0xf = 3) DROP TABLE [clients]
--Клиенты
CREATE TABLE [clients]
    (
        [guid] [uniqueidentifier] NOT NULL DEFAULT newid(),     --Уникальный код клиента.
        [name] [nvarchar](50) NOT NULL,                         --Имя
        [surname] [nvarchar](50) NOT NULL,                      --Фамилия
        [lastname] [nvarchar](50) NULL,                         --Отчество
        [datebirth] [DATE] NULL                                 --День рождения
        CONSTRAINT [pk_clients] PRIMARY KEY clustered ([guid] ASC) ON [PRIMARY]) ON [PRIMARY]
CREATE nonclustered INDEX [idx_client_name] ON [clients] ([name] ASC)
CREATE nonclustered INDEX [idx_client_sname] ON [clients] ([surname] ASC)
CREATE nonclustered INDEX [idx_client_lname] ON [clients] ([lastname] ASC)
 
IF EXISTS (SELECT * FROM sysobjects WHERE id = object_id('[transport]') AND sysstat & 0xf = 3) DROP TABLE [transport]
--Автомобили
CREATE TABLE [transport]
    (
        [guid] [uniqueidentifier] NOT NULL DEFAULT newid(),     --Уникальный код авто
        [model] [nvarchar](50) NOT NULL,                        --Модель АВТО
        [produce_year] [INT] NULL,                              --Год производства
        [NUMBER] [nvarchar](10) NOT NULL                        --Номерной знак (Гос Номер)
        CONSTRAINT [pk_transport] PRIMARY KEY clustered ([guid] ASC) ON [PRIMARY]
    ) ON [PRIMARY]
CREATE UNIQUE nonclustered INDEX [idx_transport_name] ON [transport] ([model],[NUMBER] ASC)
 
IF EXISTS (SELECT * FROM sysobjects WHERE id = object_id('[clientvalues]') AND sysstat & 0xf = 3) DROP TABLE [clientvalues] 
--Связь клиента и авто.
CREATE TABLE [clientvalues]
    (
        [client_guid] [uniqueidentifier] NOT NULL,              --Код клиента
        [transport_guid] [uniqueidentifier] NOT NULL            --Код авто
        CONSTRAINT [pk_cval] PRIMARY KEY clustered ([client_guid],[transport_guid] ASC) ON [PRIMARY]
    ) ON [PRIMARY]
 
IF EXISTS (SELECT * FROM sysobjects WHERE id = object_id('[pricelist]') AND sysstat & 0xf = 3) DROP TABLE [pricelist]   
--Прейскурант (прайс-лист услуг)
CREATE TABLE [pricelist]
    (
        [guid] [uniqueidentifier] NOT NULL DEFAULT newid(),     --Уникальный код услуги
        [name] [nvarchar](50) NOT NULL,                         --Наименование услуги
        [price] [money] NOT NULL DEFAULT 0                      --Цена услуги
        CONSTRAINT [pk_pricelist] PRIMARY KEY clustered ([guid] ASC) ON [PRIMARY]
    ) ON [PRIMARY]
CREATE nonclustered INDEX [idx_pricelist_name] ON [pricelist] ([name] ASC)
 
IF EXISTS (SELECT * FROM sysobjects WHERE id = object_id('[checks]') AND sysstat & 0xf = 3) DROP TABLE [checks] 
--Чеки.
CREATE TABLE [checks]
    (
        [guid] [uniqueidentifier] NOT NULL DEFAULT newid(),     --Код чека.
        [close_date] [smalldatetime] NOT NULL DEFAULT getdate(),--Дата закрытия чека.
        [client_guid] [uniqueidentifier] NOT NULL,              --Код клиента, который оплатил чек.
        [total_price] [money] NOT NULL,                         --Итого по чеку.
        [total_discount] [money] NOT NULL DEFAULT 0             --Итого скидка по чеку.
        CONSTRAINT [pk_checks] PRIMARY KEY clustered ([guid] ASC) ON [PRIMARY]
    ) ON [PRIMARY]
CREATE nonclustered INDEX [idx_checks_date] ON [checks] ([close_date] ASC)
CREATE nonclustered INDEX [idx_checks_client] ON [checks] ([client_guid] ASC)
 
IF EXISTS (SELECT * FROM sysobjects WHERE id = object_id('[check_line]') AND sysstat & 0xf = 3) DROP TABLE [check_line] 
--Строки чека.
CREATE TABLE [check_line](
    [guid] [uniqueidentifier] NOT NULL DEFAULT newid(),         --Уникальный номер строки чека.
    [check_guid] [uniqueidentifier] NOT NULL,                   --Ссылка на родительский чек (в который входит строка)
    [price_guid] [uniqueidentifier] NOT NULL,                   --Сылка на прейскурант цен. Код услуги.
    [quantity] INT NOT NULL DEFAULT 1,                          --Количество.
    [price] money NOT NULL,                                     --Цена услуги.
    [total_price] money NOT NULL                                --Итого сумма (Цена * Количество)
    CONSTRAINT [pk_check_line] PRIMARY KEY clustered ([guid] ASC) ON [PRIMARY]
) ON [PRIMARY]
CREATE nonclustered INDEX [idx_check_line_check_guid] ON [check_line] ([check_guid] ASC)
CREATE nonclustered INDEX [idx_check_line_check_qty] ON [check_line] ([quantity] ASC)
CREATE nonclustered INDEX [idx_check_line_check_prc] ON [check_line] ([price] ASC)
CREATE nonclustered INDEX [idx_check_line_check_tpr] ON [check_line] ([total_price] ASC)
Создаете БД в Management Studio, например AService;
делаете use AService;
Выполняете запрос и вставляете запрос.
Будет создана эта БД.

Добавлено через 1 минуту
Здесь нету FK, если нужно - добавлю, но с ними работа с БД будет сильно сложнее - надо будет действительно понимать что и как делать и в какой последовательности.
1
97 / 97 / 25
Регистрация: 25.04.2016
Сообщений: 525
28.09.2016, 23:43 15
Обновил запрос.
Добавил пару полей, для более прозрачной архитектуры + наполнение бд и вывод нескольких отчетов.
Вложения
Тип файла: zip Автомойка.zip (2.3 Кб, 7 просмотров)
0
W
115 / 115 / 33
Регистрация: 16.04.2013
Сообщений: 733
29.09.2016, 09:51 16
Так это автомойка, а я думал гаишня))). Тогда вообще можно в одну таблицу и авто и владельца вбивать, а в подчиненную уже услуги с ценами.

Добавлено через 12 минут
Цитата Сообщение от diegovoin Посмотреть сообщение
Delphi 7 + MS SQL Server 2008 как то так) в акцесе запретили делать
Жесть однако! Что даже базу нельзя в mdb?
0
0 / 0 / 0
Регистрация: 13.04.2014
Сообщений: 98
29.09.2016, 12:59  [ТС] 17
kavasaka, можно использовать все что угодно но кроме акцесса... была мысля MySQL Java .. но передумал уж
0
W
115 / 115 / 33
Регистрация: 16.04.2013
Сообщений: 733
29.09.2016, 13:25 18
Оно тебе надо! mdb база и Delphi приложение для студ курсача самое то, порой на форуме сам увидишь. Другое дело реальная задача и то еще подумать можно...
0
0 / 0 / 0
Регистрация: 13.04.2014
Сообщений: 98
29.09.2016, 13:45  [ТС] 19
kavasaka, так мы курсач и пилим.. ))
0
W
115 / 115 / 33
Регистрация: 16.04.2013
Сообщений: 733
29.09.2016, 14:04 20
и как успехи на чем остановились?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.09.2016, 14:04

Изменение первой в таблице записи (одного кортежа) при добавление новой записи
Добрый день! При добавлении новой записи через форму ДобСтуд в таблице Студ у первой записи...

Массив структур: добавление записи, удаление записи, поиск по одному или нескольким из полей
Необходимо реализовать базу данных с полями «Фамилия», «Имя», «Отчество», «Пол», «Год рождения»....

Невозможно добавление или изменение записи. Для обеспечения целостности данных необходимо наличие связанной записи
Убедительная просьба, если в это в ваших силах, ответить по быстрее. Не могу понять в чем ошибка....

Невозможно добавление или изменение записи. Для обеспечения целостности данных необходимо наличие связанной записи
Здравствуйте, дорогие форумчане. Пытаюсь создать приложение для работы с БД Access. Исходник...

Добавление записи в таблицу на основе существующей записи
Здравствуйте! PHP и MySQL только начинаю изучать и естественно не все получается. У меня есть...

Добавление записи(подстроки) к существующей записи(строке)
Предположим в таблице есть одно поле имя его - letters. В таблице существует одна запись где поле:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru