Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вставка строки  в бд [D6, IB6.x]


Natangelina ©   (2003-01-07 01:24:00) 

Необходимо вставить данные в таблицу бд. Данные берутся с Form2.

if form2. showmodal =mrOk then
begin
table1.insert;
Tr.commit; /tr - транзакция
end
table1.insert;

При исполнении этой процедуры вместо встаки строки , она исправляет предыдущие данные


Sergey Masloff   (2003-01-08 09:08:00) [1]

Мышь ©
Если у тебя есть данные которые ты получил через TIBQuery и видишь в DB-контролах то транзакция у тебя уже стартована явно или неявно. Так что говорить в таком случае о времени "держания" транзакции бессмысленно.
Если же сильно хочется экономить на времени между Start и Commit то нужно кэшировать данные на клиенте (через ClientDataSet или по другому - неважно)


Мышь   (2003-01-07 22:52:00) [2]

Ну, в смысле Query.Post и Query.Cancel


Мышь   (2003-01-07 22:49:00) [3]

Видимо, стоит сделать так:


Query1.Insert;
if Form2.ShowModal = mrOk
then Post
else Cancel;


Если что-нибудь от if до then может испортить состояние DataSet"a (перевести его из состояния dsInsert в dsBrowse), то перед Post стоит еще сделать проверку "If Query.Sate = dsInsert".
После того, как стало понятно, что нужно сделать с новой записью (забыть или в Базу запомнить) уже можно играться с транзакциями, ApplyUpdate"ами и так далее.
Кстати, если после then появился Commit, значит перед if где-то есть StartTransaction, да? Так делать не хорошо, так как в момент отображения диалога на сервере будет открытая транзакция, а при использовании транзакций следует максимально возможно минимизировать их время.


Sergey Masloff   (2003-01-07 21:18:00) [4]

Insert вставляет пустую запись готовую для редактирования. Соответственно делаете Insert(), вводите ваши данные и делаете Post. Потом, по желанию и Commit транзакции (если вы ей делали Start до этого).
Кстати, посмотрите примеры в {Delphi}/Demos/Db что ли... Это намного быстрее и полезнее ожидания ответов в конференциях...


natangelina   (2003-01-07 15:32:00) [5]


> Sergey Masloff (07.01.03 14:13)
> natangelina ©
> Ну, я, кажется, понял. Вы Insert вызываете уже после того,
> как данные в свой DBEdit ввели? Это не есть правильно ;-)
> Вы вводите данные, при этом DBEdit через DataSource переводит
> DataSet в состояние dsEdit - ну дальше все понятно. А потом,
> уже что-то наредактировав вы вставляете новую строку Insert-ом

А как мне сделать так , чтобы строка вставлялась , а не редактировалась?


Sergey Masloff   (2003-01-07 14:13:00) [6]

natangelina ©
Ну, я, кажется, понял. Вы Insert вызываете уже после того, как данные в свой DBEdit ввели? Это не есть правильно ;-) Вы вводите данные, при этом DBEdit через DataSource переводит DataSet в состояние dsEdit - ну дальше все понятно. А потом, уже что-то наредактировав вы вставляете новую строку Insert-ом


natangelina   (2003-01-07 14:03:00) [7]

Имеетсяч table1 в которую надо записать новую строку. ввожу данные через dbedit1, но вместо добавления строки, редактируюстся данные. Использую процедуру tabel1.insert.


Alexandr   (2003-01-07 07:52:00) [8]

бред какй-то написан, увы.


Наверх

Титульная страница Поиск, карта сайта Написать письмо