Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.01.27;
Скачать: CL | DM;

Вниз

Вставка строки в бд   Найти похожие ветки 

 
Natangelina ©   (2003-01-07 01:24) [0]

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

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

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


 
Alexandr ©   (2003-01-07 07:52) [1]

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


 
natangelina ©   (2003-01-07 14:03) [2]

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


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

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


 
natangelina ©   (2003-01-07 15:32) [4]


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

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


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

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


 
Мышь ©   (2003-01-07 22:49) [6]

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


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, да? Так делать не хорошо, так как в момент отображения диалога на сервере будет открытая транзакция, а при использовании транзакций следует максимально возможно минимизировать их время.


 
Мышь ©   (2003-01-07 22:52) [7]

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


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

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



Страницы: 1 вся ветка

Текущий архив: 2003.01.27;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.028 c
14-87144
Sergo
2003-01-10 11:27
2003.01.27
PARADOX


8-86969
dummie
2002-10-10 14:39
2003.01.27
gluBuild2DMipmaps/glTexImage2D и видеопамять...


1-86918
Andrey V.
2003-01-16 15:20
2003.01.27
dinamyc arrays


1-86796
Чайник(заварной)
2003-01-18 00:51
2003.01.27
TStringGrid скролирование


14-87044
Jim
2003-01-10 23:55
2003.01.27
Строка между записями