Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.04.2010, 11:37   #1
Danilka
Пользователь
 
Аватар для Danilka
 
Регистрация: 30.03.2010
Сообщений: 28
По умолчанию Удаление строк из БД

задача удалить строки у которых совпадает 1н из столбцов. таких строк в таблице несколько, но при выполнении этой процедуры удаляются только 2-3 строки =(
Тк в ListBox'e отсчет идет с 0, а в таблице с 1 поэтому такое условие =)

Код:
  Table1.Open;
  Table1.First;
  while not Table1.Eof do
    begin
      if ListBox1.ItemIndex=Table1.FieldByName('ID').AsInteger-1 then
        Table1.Delete;
      Table1.Next;
    end;
что не так в коде?
Никогда и ничего не просите! Никогда и ничего, и в особенности у тех, кто сильнее вас. Сами предложат и сами все дадут! © Булгаков
Danilka вне форума Ответить с цитированием
Старый 14.04.2010, 11:41   #2
BARNEY
Участник клуба
 
Регистрация: 23.04.2009
Сообщений: 1,058
По умолчанию

не проще запросом? чем такой велосипед
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)
BARNEY вне форума Ответить с цитированием
Старый 14.04.2010, 11:45   #3
quit
Я есть!
Форумчанин
 
Аватар для quit
 
Регистрация: 17.02.2008
Сообщений: 318
По умолчанию

к чему это условие? почему вы сравниваете по id??
Код:
if ListBox1.ItemIndex=Table1.FieldByName('ID').AsInteger-1 then
задача не ясна, по крайней мере я не телепат, не буду говорить за остальных
опиши по подробнее и приведи тело всей процедуры
©Учиться, учиться и еще раз учиться!
quit вне форума Ответить с цитированием
Старый 14.04.2010, 11:45   #4
Danilka
Пользователь
 
Аватар для Danilka
 
Регистрация: 30.03.2010
Сообщений: 28
По умолчанию

BARNEY, а можно поподробней?
Никогда и ничего не просите! Никогда и ничего, и в особенности у тех, кто сильнее вас. Сами предложат и сами все дадут! © Булгаков
Danilka вне форума Ответить с цитированием
Старый 14.04.2010, 11:49   #5
Danilka
Пользователь
 
Аватар для Danilka
 
Регистрация: 30.03.2010
Сообщений: 28
По умолчанию

Цитата:
Сообщение от quit Посмотреть сообщение
к чему это условие? почему вы сравниваете по id??
Код:
if ListBox1.ItemIndex=Table1.FieldByName('ID').AsInteger-1 then
задача не ясна, по крайней мере я не телепат, не буду говорить за остальных
опиши по подробнее и приведи тело всей процедуры
ну я же написал выше, что нужно удалить строки у которых совподает 1н из столбцов, тоесть я выбираю элемент в ListBox'e, считываю его индекс и ищу соответствующие значения в столбце базы данных: "ID" - это какраз и есть 1н из столбцов =)

это и есть все тело процедуры "DeleteBtn1Click(Sender: TObject);"
Никогда и ничего не просите! Никогда и ничего, и в особенности у тех, кто сильнее вас. Сами предложат и сами все дадут! © Булгаков
Danilka вне форума Ответить с цитированием
Старый 14.04.2010, 11:56   #6
quit
Я есть!
Форумчанин
 
Аватар для quit
 
Регистрация: 17.02.2008
Сообщений: 318
По умолчанию

попахивает одноколесным велосипедом с треугольным колесом)))

в таблице у тебя поле ID уникальное? или нет?
получается ты выбрал нулевой индекс в листбоксе у тебя и удалят все строки с ID = 1.
©Учиться, учиться и еще раз учиться!
quit вне форума Ответить с цитированием
Старый 14.04.2010, 12:04   #7
BARNEY
Участник клуба
 
Регистрация: 23.04.2009
Сообщений: 1,058
По умолчанию

Код:
query.sql.text:='delete from table where id='+Table1.FieldByName('ID').AsInteger+'' ;
query.ex...чёто там :)
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)
BARNEY вне форума Ответить с цитированием
Старый 14.04.2010, 12:07   #8
quit
Я есть!
Форумчанин
 
Аватар для quit
 
Регистрация: 17.02.2008
Сообщений: 318
По умолчанию

тогда уж
Код:
query.sql.text:='delete from table where id='+IntToStr(ListBox1.ItemIndex+1);
query.execsql;
©Учиться, учиться и еще раз учиться!

Последний раз редактировалось quit; 14.04.2010 в 12:15.
quit вне форума Ответить с цитированием
Старый 14.04.2010, 18:12   #9
Danilka
Пользователь
 
Аватар для Danilka
 
Регистрация: 30.03.2010
Сообщений: 28
По умолчанию

Цитата:
Сообщение от quit Посмотреть сообщение
попахивает одноколесным велосипедом с треугольным колесом)))

в таблице у тебя поле ID уникальное? или нет?
получается ты выбрал нулевой индекс в листбоксе у тебя и удалят все строки с ID = 1.
непойму что вас смущает, но если смущает слово ИД то представьте что вместо ид написано "номер группы" где перечислены фамилии и мне нужно удалить выбраную в лист боксе группу из бд
Код:
ID  фамилии       имена
1   блаблабла     блаблабла
1   блаблабла     блаблабла
1   блаблабла     блаблабла
..
2   ляляля          ляляля
2   ляляля          ляляля
..
3   трумпумпум   трумпумпум
..
вот задача удалить строки где ID = ListBox.ItemIndex + 1 =) а мой код удаляет не все, а только несколько строк =)
группа не может обозначаться как 0 =) а в лист боксе индексы начинаются именно с 0 =)


PS у меня почимуто делфи ругается на"query." - незарегистрированный идентификатор
Никогда и ничего не просите! Никогда и ничего, и в особенности у тех, кто сильнее вас. Сами предложат и сами все дадут! © Булгаков

Последний раз редактировалось Danilka; 14.04.2010 в 18:24.
Danilka вне форума Ответить с цитированием
Старый 14.04.2010, 20:37   #10
bezOn
Пользователь
 
Регистрация: 14.04.2010
Сообщений: 51
По умолчанию

Цитата:
Сообщение от Danilka Посмотреть сообщение
задача удалить строки у которых совпадает 1н из столбцов. таких строк в таблице несколько, но при выполнении этой процедуры удаляются только 2-3 строки =(
Тк в ListBox'e отсчет идет с 0, а в таблице с 1 поэтому такое условие =)

Код:
  Table1.Open;
  Table1.First;
  while not Table1.Eof do
    begin
      if ListBox1.ItemIndex=Table1.FieldByName('ID').AsInteger-1 then
       Table1.Delete;
      Table1.Next;
    end;
что не так в коде?
Если идёт удаление (DELETE) нельзя использовать потом NEXT.
Иначе в таблице будет курсор перепрыгивать через запись.

Написать нужно так:

Код:

IF ListBox1.ItemIndex = Table1.FieldByName('ID').AsInteger-1 
      then Table1.Delete {Удаление и переход на следующую запись}
      else Table1.Next; {Если нет совпадения, смотрим следующую запись}

Так будет правильно.
bezOn вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
удаление строк alexk Microsoft Office Excel 24 15.02.2011 08:34
Удаление строк из таблицы kostero Microsoft Office Access 3 19.03.2010 13:51
удаление строк в файле lg12 Помощь студентам 6 25.08.2009 00:00
Удаление строк Dr.Badnezz Общие вопросы Delphi 1 07.10.2008 15:22
удаление строк Dime_x Microsoft Office Excel 2 07.10.2008 13:38