Форум: "Базы";
Текущий архив: 2003.01.27;
Скачать: [xml.tar.bz2];
ВнизВставка строки в бд Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.009 c