Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перебор полей и записей БД 
:(
    Опции темы
mmik
Дата 14.4.2009, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 14.10.2008

Репутация: нет
Всего: нет



Код

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). Если не вставлять новую запись, то все прекрасно заменяется, значит дело только в том, что запись новая.

PM MAIL   Вверх
Данкинг
Дата 14.4.2009, 11:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



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

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

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




--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
pavelv
Дата 14.4.2009, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 5.2.2006

Репутация: нет
Всего: нет



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

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

Там же можно глянуть как часто она туда заходит и после какого поля. Если из идей думаю дело именно в table2.prior и table2.next, бегаешь по записям вот она и сбрасывает режим редактирования.
PM MAIL   Вверх
mmik
Дата 14.4.2009, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 14.10.2008

Репутация: нет
Всего: нет



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. Но почему только один раз?

Это сообщение отредактировал(а) mmik - 14.4.2009, 11:55
PM MAIL   Вверх
Данкинг
Дата 14.4.2009, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



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

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


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
pavelv
Дата 15.4.2009, 06:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 5.2.2006

Репутация: нет
Всего: нет



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

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


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

Это сообщение отредактировал(а) pavelv - 15.4.2009, 06:27
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0476 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.