Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.01 c
1-86769
BALU1111
2003-01-15 12:33
2003.01.27
Координаты корсора мыши


14-87144
Sergo
2003-01-10 11:27
2003.01.27
PARADOX


14-87124
Оливейра
2003-01-09 20:54
2003.01.27
Как же конструируется и инициализируется объект в Object Pascal


1-86959
Игорь Шевченко
2003-01-15 12:49
2003.01.27
Вопрос по Integrated Translation Environment


3-86719
b_baranov
2003-01-06 19:25
2003.01.27
FIBDataSet, run-time формирование SQL- запроса




   Наверх