Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Перебор полей и записей БД


Автор: mmik 14.4.2009, 10:39
Код

Table1.First;
table2.insert;
 
While Table1.fields[1].AsString <>'write' do
 
//Здесь происходит запись данных в новую запись таблицы
 
end;
 
 table2.Post;
 
//Далее идет перебор всех полей таблицы и все значения, которые не являются вещественными переписываются с предыдущей записи этого же поля. 
 
table2.last;
table2.Edit;
 
  for i:=2 to table2.Fields.Count - 1 do
    begin
    st:=table2.Fields[i].AsString;
    rez:=strtofloatdef(st,-9999);
    if rez = -9999 then
      begin
        table2.Prior;
        st:=table2.Fields[i].AsString;
         table2.Next;
//        table2.Edit;
        table2.Fields[i].AsString:=st;
      end;
    end;
 
   table2.Post;
 
end;


Помогите разобраться, пожалуйста. 
Что не работает: Либо выдается сообщение что еще кто-то юзает эту БД, либо что БД не в режимах insert/edit ( если убрать комментарий внутри цикла ошибка не выдается, но не понятно почему т.к. перед циклом есть edit). Если не вставлять новую запись, то все прекрасно заменяется, значит дело только в том, что запись новая.

Автор: Данкинг 14.4.2009, 11:08
Цитата(mmik @  14.4.2009,  11:39 Найти цитируемый пост)
Либо выдается сообщение что еще кто-то юзает эту БД

Значит, её кто-то юзает. smile 

Зачем .Edit на 12-й строке? Как раз логичнее было бы оставить его в цикле (на 21-й строке), да и .Post делать в том же цикле.


Автор: pavelv 14.4.2009, 11:52
Не спец, но не понял:
1) С помощью Table2.Last ты встаешь на ту запись которую вставил? Лишнее имхо и так должна находится на той которой только, что Post прошёл.
2) Если не хочешь постоянно делать Table2.Edit напиши: 
Код

if not(Table2.State in [DsEdit,DsInsert]) then Table2.Edit;

Там же можно глянуть как часто она туда заходит и после какого поля. Если из идей думаю дело именно в table2.prior и table2.next, бегаешь по записям вот она и сбрасывает режим редактирования.

Автор: mmik 14.4.2009, 11:53
Edit и Post - уже поставлены в цикле. Работает почему-то только один раз. Это все по нажатию кнопки происходит. Т.е. после превого нажатия  - сработало, а потом -  нет.

Добавлено через 4 минуты и 13 секунд
Цитата(pavelv @ 14.4.2009,  11:52)
 С помощью Table2.Last ты встаешь на ту запись которую вставил? Лишнее имхо и так должна находится на той которой только, что Post прошёл.

Просто причину ошибки не могу найти вот так и делаю, хотя тоже думаю, что должно находиться на ней

Добавлено через 6 минут и 26 секунд
Цитата(pavelv @ 14.4.2009,  11:52)
table2.prior и table2.next, бегаешь по записям вот она и сбрасывает режим редактирования.

С этим уже стало понятно, они как post действуют. Поэтому потом опять надо edit. Но почему только один раз?

Автор: Данкинг 14.4.2009, 14:48
Цитата(mmik @  14.4.2009,  12:53 Найти цитируемый пост)
С этим уже стало понятно, они как post действуют. 

Насколько я помню, если значением .Next будет .EOF, то .Post 'а не произойдёт на эту последнюю запись.

Автор: pavelv 15.4.2009, 06:27
Только один раз говоришь?
Бред конечно, но поставь перед циклом:
Код

table2.last;
table2.Edit;
table2.prior;
table2.Edit;
table2.last;


Это бред конечно и так писать нельзя, уж лучше в цикле всё оставить. Но для эксперимента можно smile.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)