![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
проблема в сохранение в базе [D7, FireBird]
Xmen © (2009-12-11 09:37:00)Привет мастерам.
У меня такая проблема.
Была программа нормально работающая создан в Д7 и база в FB2.1 . Некоторый время назад переустановил дельфи, теперь у меня Дельфи Лайт. Все нормально работает. Сегодня создал в базе еще одну таблицу у него 3 поля:имя диска, размер диска, свободное место диска. Из проги заполнил первое поле, ввел 3 записи (С,D,E) и сохранил. Написал код который определяет свободное место и полный объём дисков и сохраняет его в этой таблицы. Но интересное то что эти записи он не сохраняет в таблице.
var
AmtFree: Int64;
Total: Int64;
i:Integer;
begin
Dm_Pochta.dtsDisk.Open;
Dm_Pochta.dtsDisk.First;
while not Dm_Pochta.dtsDisk.EOF do
begin
if Dm_Pochta.dtsDisk.FieldByName('Disk_name').AsVariant='C' then i:=3;
if Dm_Pochta.dtsDisk.FieldByName('Disk_name').AsVariant='D' then i:=4;
if Dm_Pochta.dtsDisk.FieldByName('Disk_name').AsVariant='E' then i:=5;
AmtFree := DiskFree(i);
Total := DiskSize(i);
Dm_Pochta.dtsDisk.Edit;
Dm_Pochta.dtsDisk.FieldByName('Disk_free_size').AsVariant := AmtFree/(1024*1024);
Dm_Pochta.dtsDisk.FieldByName('Disk_total').AsVariant := Total/(1024*1024);
Dm_Pochta.dtsDisk.Post;
Dm_Pochta.TR.CommitRetaining;
Dm_Pochta.dtsDisk.Next;
end;
может у кого небуд такое было? у меня раньше то кого не было.
Xmen (2009-12-14 07:02:00) [1]
> Sergey13 © (11.12.09 16:52) [7]
> ИМХО там скорее всего в модифицирующих запросах в секции
> where перчислены все поля. Индексное поле не указано.
попробую это исправить
Sergey13 (2009-12-11 16:52:00) [2]ИМХО там скорее всего в модифицирующих запросах в секции where перчислены все поля. Индексное поле не указано.
StriderMan (2009-12-11 16:20:00) [3]
> Dm_Pochta.TR.CommitRetaining;
брэкпоинт сюда пробовал? Приходит?
Кстати какие параметры транзакции?
Sergey13 (2009-12-11 15:48:00) [4]> [4] Xmen (11.12.09 15:18)
> Да это Датасет и у него правил заполнены поля.
Тексты запросов приведи?
Xmen (2009-12-11 15:18:00) [5]
> StriderMan © (11.12.09 14:29) [1]
> Ошибка какая-нибудь вылазит?Какой тип транзакции?Что такое
> dtsDisk? если TIBDataSet то у него должен быть корректно
> заполнен UpdateObject, какой там запрос ModifySQL ?
интересно то что не выдает ошибку.
Да это Датасет и у него правил заполнены поля.
CommitRetaining и по вашему сделал вне цикла. Но результат тот же.
Я попробовал через Тэйбл запись получился но через датасет не получается.
Не понятно.
zorik (2009-12-11 14:40:00) [6]1. Надо еще стартануть транзакцию, но может она и автоматически стартует
2. CommitRetaining нежелательно использовать, а просто Commit
3. Неплохо бы заключить в блок try-except и в случае чего делать откат
Ты подтверждал транзакцию в цикле - это нехорошо, возможно CommitRetaining перебрасывал на первую запись, и еще прописные и строчные буквы дисков
zorik (2009-12-11 14:33:00) [7]Ты ручками ввел добавили 3 записи (С,D,E)? Точно? Пройдись отладчиком, попадает ли он в цикл while
with Dm_Pochta.dtsDisk do
begin
Open;
while not EOF do
begin
case UpperCase(FieldByName('Disk_name').AsString[1]) of
'C': i := 3;
'D': i := 4;
'E': i := 5;
end;
AmtFree := DiskFree(i);
Total := DiskSize(i);
Edit;
FieldByName('Disk_free_size').Value := AmtFree/(1024*1024);
FieldByName('Disk_total').Value := Total/(1024*1024);
Post;
Next;
end;
Dm_Pochta.TR.CommitRetaining;
end;
StriderMan (2009-12-11 14:29:00) [8]Ошибка какая-нибудь вылазит?
Какой тип транзакции?
Что такое dtsDisk? если TIBDataSet то у него должен быть корректно заполнен UpdateObject, какой там запрос ModifySQL ?