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