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

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

проблема в сохранение в базе [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 ?


Наверх

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