2 / 2 / 0
Регистрация: 26.09.2012
Сообщений: 27
1

INSERT и UPDATE в MySQL

26.09.2012, 21:57. Показов 4238. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте! Возникла такая проблема. При создании и редактировании записи использую один квери. При редактировании записи, происходит передача SQL кода:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
qrInupdel.SQL.Text:=
'UPDATE KONTRAGENT SET familiya =:familiya,'+
'imya =:imya, otchestvo =:otchestvo, seriya =:seriya, nomer =:nomer,'+
'registratsiya =:registratsiya, adres =:adres, dolzhnost =:dolzhnost,'+
'tip_kontragent =:tip_kontragent, data_rozhdeniya =:data_rozhdeniya,'+
'data_vydachi =:data_vydachi, kem_vydan =:kem_vydan, gorod =:gorod,'+
'rejting =:rejting, dopinfo =:dopinfo WHERE id =:id';
 
SotrudnikForm.Edit1.Text:= srSotrudnik.DataSet.FieldByName('familiya').AsString;
SotrudnikForm.Edit2.Text:= srSotrudnik.DataSet.FieldByName('imya').AsString;
SotrudnikForm.Edit3.Text:= srSotrudnik.DataSet.FieldByName('otchestvo').AsString;
SotrudnikForm.Edit7.Text:= srSotrudnik.DataSet.FieldByName('seriya').AsString;
SotrudnikForm.Edit8.Text:= srSotrudnik.DataSet.FieldByName('nomer').AsString;
SotrudnikForm.Memo1.Text:= srSotrudnik.DataSet.FieldByName('registratsiya').AsString;
SotrudnikForm.Memo3.Text:= srSotrudnik.DataSet.FieldByName('adres').AsString;
SotrudnikForm.Edit5.Text:= srSotrudnik.DataSet.FieldByName('dolzhnost').AsString;
SotrudnikForm.Edit10.Text:= srSotrudnik.DataSet.FieldByName('data_vydachi').AsString;
SotrudnikForm.Edit9.Text:= srSotrudnik.DataSet.FieldByName('data_rozhdeniya').AsString;
SotrudnikForm.Memo2.Text:= srSotrudnik.DataSet.FieldByName('kem_vydan').AsString;
SotrudnikForm.Edit4.Text:= srSotrudnik.DataSet.FieldByName('gorod').AsString;
SotrudnikForm.Edit6.Text:= srSotrudnik.DataSet.FieldByName('rejting').AsString;
SotrudnikForm.Memo4.Text:= srSotrudnik.DataSet.FieldByName('dopinfo').AsString;
SotrudnikForm.ShowModal;
На форме, которая открывается, имеется кнопка сохранить, на которой происходит передача параметров:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Sotrudnik.qrInupdel.Parameters.ParamByName('familiya').Value:= Edit1.Text;
Sotrudnik.qrInupdel.Parameters.ParamByName('imya').Value:= Edit2.Text;
Sotrudnik.qrInupdel.Parameters.ParamByName('otchestvo').Value:= Edit3.Text;
Sotrudnik.qrInupdel.Parameters.ParamByName('seriya').Value:= Edit7.Text;
Sotrudnik.qrInupdel.Parameters.ParamByName('nomer').Value:= Edit8.Text;
Sotrudnik.qrInupdel.Parameters.ParamByName('registratsiya').Value:= Memo1.Text;
Sotrudnik.qrInupdel.Parameters.ParamByName('adres').Value:= Memo3.Text;
Sotrudnik.qrInupdel.Parameters.ParamByName('dolzhnost').Value:= Edit5.Text;
Sotrudnik.qrInupdel.Parameters.ParamByName('tip_kontragent').Value:= '1';
Sotrudnik.qrInupdel.Parameters.ParamByName('data_rozhdeniya').Value:= Edit9.Text;
Sotrudnik.qrInupdel.Parameters.ParamByName('data_vydachi').Value:= Edit10.Text;
Sotrudnik.qrInupdel.Parameters.ParamByName('kem_vydan').Value:= Memo2.Text;
Sotrudnik.qrInupdel.Parameters.ParamByName('gorod').Value:= Edit4.Text;
Sotrudnik.qrInupdel.Parameters.ParamByName('rejting').Value:= Edit6.Text;
Sotrudnik.qrInupdel.Parameters.ParamByName('dopinfo').Value:= Memo4.Text;
Sotrudnik.qrInupdel.Parameters.ParamByName('id').Value:=
Sotrudnik.srSotrudnik.DataSet.FieldByName('id').AsInteger;
 
Sotrudnik.qrInupdel.ExecSQL;
Sotrudnik.qrSelect.Refresh;
Close;
Проблема вот в чем... При сохранении я передаю параметр, чтобы было ясно, какую строку необходимо редактировать. Вопрос: "Как быть с добавлением записи? ". При создании новой записи передается вот такой SQL код:

Delphi
1
2
3
4
5
6
7
qrInupdel.SQL.Text:=
'INSERT INTO kontragent (familiya, imya, otchestvo, seriya, nomer, registratsiya, adres,'+
'dolzhnost, tip_kontragent, data_rozhdeniya, data_vydachi, kem_vydan, gorod, rejting,'+
'dopinfo) VALUES (:familiya, :imya, :otchestvo, :seriya, :nomer, :registratsiya, :adres,'+
':dolzhnost, :tip_kontragent, :data_rozhdeniya, :data_vydachi, :kem_vydan, :gorod, :rejting,'+
':dopinfo)';
SotrudnikForm.ShowModal;
Здесь, как видно параметра id не существует. и это правильно, ведь он создается автоматически на уровне БД. Как быть в такой ситуации?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.09.2012, 21:57
Ответы с готовыми решениями:

Массовый insert/update в mySQL через phpMyAdmin
Приветствую. Встала задача автоматизировать загрузку товаров на сайт. БД - mySQL. Товары...

Добавление и обновление (insert and update) данных связанных таблиц mysql
Добрый день всем. Стараюсь изучить связи таблиц в mysql и остановился на обновлении данных в...

INSERT OR UPDATE
Как можно создать такой запрос: вбивать запись в таблицу, если записи с таким id там ещё нет, и...

INSERT or UPDATE
Здравствуйте, помогите разобраться, подкорректировать запрос. Есть рабочий запрос(Если в таблице...

5
479 / 392 / 112
Регистрация: 24.04.2012
Сообщений: 1,632
Записей в блоге: 3
28.09.2012, 18:39 2
Я так понял тебе надо проверить есть он или нет и если есть предать его. и Где тут проблема?!
либо
Delphi
1
Try  Except
1
2 / 2 / 0
Регистрация: 26.09.2012
Сообщений: 27
28.09.2012, 19:35  [ТС] 3
Я переделал всё под FireBird. Но принцип один и тот же. Ведь в FB ID создается с помощью триггера и генератора.

"Я так понял тебе надо проверить есть он или нет и если есть предать его" -

Он по-любому будет. И я об этом знаю. Я ведь создаю новую запись. Я просто думаю, может изменить вот эту часть запроса:

Delphi
1
2
3
4
qrInupdel.SQL.Text:=
'UPDATE KONTRAGENT SET 
...
WHERE id =:id';
Можно ли без WHERE id =:id, объяснить, какую именно мне строку необходимо апдейтить? Может есть какой-нибудь другой способ? Тогда я наконец избавлюсь от этого параметра.
0
479 / 392 / 112
Регистрация: 24.04.2012
Сообщений: 1,632
Записей в блоге: 3
29.09.2012, 07:49 4
с firebird все проще, если у тебя версия 2 и выше. в нем есть такая функция Update or Insert и у тебя вопрос отподет сам собой.
Цитата Сообщение от Евгений_88 Посмотреть сообщение
Здесь, как видно параметра id не существует. и это правильно, ведь он создается автоматически на уровне БД.
ты путаешь параметр IBDataSet со значением поля. Я тебе говорил именно про параметр IBDataSet
1
2 / 2 / 0
Регистрация: 26.09.2012
Сообщений: 27
30.09.2012, 20:33  [ТС] 5
Цитата Сообщение от Bit_Man Посмотреть сообщение
с firebird все проще, если у тебя версия 2 и выше. в нем есть такая функция Update or Insert и у тебя вопрос отподет сам собой.
ты путаешь параметр IBDataSet со значением поля. Я тебе говорил именно про параметр IBDataSet
Ну это уже использование дополнительного компонента. А у меня был лишь квери и датасет. Я думал все сделать через квери. Раньше я всё гораздо проще делал. Подключал компонент IBUpdateSQL и производил добавление с помощью DataSet.Insert. И быстрее и проще и кода в 10 раз меньше. Но один умный человек сказал, что это ни есть правильно, что каждую операцию нужно проводить через отдельную транзакцию. Вот теперь и создал сам себе проблем с параметрами. Может просто он был не прав?
0
479 / 392 / 112
Регистрация: 24.04.2012
Сообщений: 1,632
Записей в блоге: 3
01.10.2012, 15:22 6
у тебя firebird точно? если да то прочитай про Update or Insert

Добавлено через 1 минуту
Цитата Сообщение от Евгений_88 Посмотреть сообщение
через отдельную транзакцию
Это все зависит от потребностей
0
01.10.2012, 15:22
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.10.2012, 15:22
Помогаю со студенческими работами здесь

Update/Insert
Добрый день, господа. Есть таблица сотрудников для учета отработанного времени. Выгружаю базу из...

UPDATE AND INSERT
Доброго времени суток. Помогите с поставленной задачей. Надо обновить данные и в тот же момент...

Insert, update
нужно создать 3 кнопки в borland builder: создать запись, добавить, удалить с помощью insert,...

UPDATE INSERT
Добрый день Уважаемые участники форума. Имеется база данных Oracle, проект Веб-проект ASP.NET. ...


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

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

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