Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 10.04.2008, 06:29
rdfx rdfx вне форума
Прохожий
 
Регистрация: 20.03.2008
Сообщения: 10
Репутация: 10
Восклицание Помогите найти ошибку!

Есть вот такой код:

Код:
Table1.First;
while not Table1.eof do begin
if Table1.FieldbyName('Num').AsString=edit1.text then Table1.Delete;
Table1.next;
end;

Почему при выполнении он удаляет не все нужные строки в таблице? Таблицы Paradox.
Заранее спасибо
Ответить с цитированием
  #2  
Старый 10.04.2008, 10:57
MegaPiha MegaPiha вне форума
Активный
 
Регистрация: 24.03.2008
Сообщения: 227
Версия Delphi: Delphi 7
Репутация: 30
По умолчанию

Можно так попробовать.
Код:
Var n:integer;
begin
Table1.First;
   while not Table1.eof do
   begin
      if Table1.FieldbyName('Tip_id').asString =edit1.text then
      begin
          n:=Table1.recNo;
          Table1.Delete;
          if n<>1 then
             Table1.recNo:=n-1;
      end;
      Table1.next;
   end;

end;
Ответить с цитированием
  #3  
Старый 10.04.2008, 11:39
rdfx rdfx вне форума
Прохожий
 
Регистрация: 20.03.2008
Сообщения: 10
Репутация: 10
По умолчанию

Вроде все работает, вот только когда в таблице остаются только те записи, которые нужно удалить (например с индексом "1"), удаляются все кроме первого. Иначе говоря, в таблице все равно остается одна запись, которая удаляется только со второго раза
Ответить с цитированием
  #4  
Старый 10.04.2008, 12:14
MegaPiha MegaPiha вне форума
Активный
 
Регистрация: 24.03.2008
Сообщения: 227
Версия Delphi: Delphi 7
Репутация: 30
По умолчанию

Ну тогда так.
Код:
Table1.Last;
for n:=table1.recordcount downto 1 do
begin
    if Table1.FieldbyName('Tip_id').asString =edit1.text then
       Table1.delete;
    Table1.Prior;
end;
Ответить с цитированием
  #5  
Старый 10.04.2008, 13:26
rdfx rdfx вне форума
Прохожий
 
Регистрация: 20.03.2008
Сообщения: 10
Репутация: 10
По умолчанию

так все работает. Спасибо большое. А в чем была ошибка, вроде алгоритмы совершенно равнозначные?
Ответить с цитированием
  #6  
Старый 10.04.2008, 14:43
MegaPiha MegaPiha вне форума
Активный
 
Регистрация: 24.03.2008
Сообщения: 227
Версия Delphi: Delphi 7
Репутация: 30
По умолчанию

Цитата:
Сообщение от rdfx
так все работает. Спасибо большое. А в чем была ошибка, вроде алгоритмы совершенно равнозначные?
Метод delete удаляет текущую запись и переходит на следующую запись, а в первом случае мы пишем table1.next и он опять переходит на следующую запись. Т.е. удаляем половину записей.
Ответить с цитированием
  #7  
Старый 12.04.2008, 10:30
K735Demon K735Demon вне форума
Прохожий
 
Регистрация: 30.03.2008
Сообщения: 10
Репутация: 10
По умолчанию мда

помоему проще всё было сделать одним SQL-запросом ...
delete from таблица t
where t.имя_поля = условие;
но как кому нравится
Ответить с цитированием
  #8  
Старый 12.04.2008, 11:24
MegaPiha MegaPiha вне форума
Активный
 
Регистрация: 24.03.2008
Сообщения: 227
Версия Delphi: Delphi 7
Репутация: 30
По умолчанию

Цитата:
Сообщение от K735Demon
помоему проще всё было сделать одним SQL-запросом ...
delete from таблица t
where t.имя_поля = условие;
но как кому нравится

Согласен. Но не все ищут легкие пути.
Если размер таблицы не большой то не принципиально.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 03:42.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter