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

Вниз

проблема в сохранение в базе   Найти похожие ветки 

 
Xmen   (2009-12-11 09:37) [0]

Привет мастерам.
У меня такая проблема.
Была программа нормально работающая создан в Д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;
может у кого небуд такое было? у меня раньше то кого не было.


 
StriderMan ©   (2009-12-11 14:29) [1]

Ошибка какая-нибудь вылазит?
Какой тип транзакции?

Что такое dtsDisk? если TIBDataSet то у него должен быть корректно заполнен UpdateObject, какой там запрос ModifySQL ?


 
zorik ©   (2009-12-11 14:33) [2]

Ты ручками ввел добавили 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;


 
zorik ©   (2009-12-11 14:40) [3]

1. Надо еще стартануть транзакцию, но может она и автоматически стартует
2. CommitRetaining нежелательно использовать, а просто Commit
3. Неплохо бы заключить в блок try-except и в случае чего делать откат

Ты подтверждал транзакцию в цикле - это нехорошо, возможно CommitRetaining перебрасывал на первую запись, и еще прописные и строчные буквы дисков


 
Xmen   (2009-12-11 15:18) [4]


> StriderMan ©   (11.12.09 14:29) [1]
> Ошибка какая-нибудь вылазит?Какой тип транзакции?Что такое
> dtsDisk? если TIBDataSet то у него должен быть корректно
> заполнен UpdateObject, какой там запрос ModifySQL ?

интересно то что не выдает ошибку.
Да это Датасет и у него правил заполнены поля.

CommitRetaining и по вашему сделал вне цикла. Но результат тот же.

Я попробовал через Тэйбл запись получился но через датасет не получается.
Не понятно.


 
Sergey13 ©   (2009-12-11 15:48) [5]

> [4] Xmen   (11.12.09 15:18)
> Да это Датасет и у него правил заполнены поля.

Тексты запросов приведи?


 
StriderMan ©   (2009-12-11 16:20) [6]


> Dm_Pochta.TR.CommitRetaining;

брэкпоинт сюда пробовал? Приходит?

Кстати какие параметры транзакции?


 
Sergey13 ©   (2009-12-11 16:52) [7]

ИМХО там скорее всего в модифицирующих запросах в секции where перчислены все поля. Индексное поле не указано.


 
Xmen   (2009-12-14 07:02) [8]


> Sergey13 ©   (11.12.09 16:52) [7]
> ИМХО там скорее всего в модифицирующих запросах в секции
> where перчислены все поля. Индексное поле не указано.

попробую это исправить



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

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

Наверх




Память: 0.49 MB
Время: 0.01 c
1-1237192368
Kolan
2009-03-16 11:32
2010.02.14
Дополнение перечисления


2-1261052520
oleg1963lora
2009-12-17 15:22
2010.02.14
Помогите создать класс


2-1260723444
Дмитрий
2009-12-13 19:57
2010.02.14
Отображение информации из базы данных


15-1260214408
Павел33333
2009-12-07 22:33
2010.02.14
Копирование программы с одного компьютера на другой.Не пашет.


1-1237982706
Eraser
2009-03-25 15:05
2010.02.14
TListView и экшены