Поиск:

Ответ в темуСоздание новой темы Создание опроса
> удаление данных из бд при выборе в listbox 
:(
    Опции темы
dize
Дата 8.9.2009, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Бд access 2003, метод доступа ADO.
При выборе группы отображается ее состав
Код

//отображение состава в lisbox3
  begin
  ListBox3.Items.Clear;
  ADOQ_kod.active:=false;
  ADOQ_kod.SQL.Text:='SELECT Dengi.Kod_klienta FROM Dengi INNER JOIN groups ON Dengi.id_group=groups.id_group WHERE groups.group="'+query[1]+'"';
  ADOQ_kod.open;
  ADOQ_kod.First;
    While not ADOQ_kod.eof do
      begin
        ListBox3.Items.add(ADOQ_kod.fieldbyname('Kod_klienta').AsString);
        ADOQ_kod.Next;
      end;
  ADOQ_kod.active:=false;
  end

При удалении выполняется следующая процедура
Код

begin
listbox3.DeleteSelected;
ADOQ_del.Close;
ADOQ_del.SQL.Clear;
ADOQ_del.SQL.Text:='UPDATE Dengi SET Dengi.id_group=null WHERE Dengi.Kod_klienta="' + listbox3.Items[i] + '"';
ADOQ_del.ExecSQL;
end;

При удалении подобным образом вылетает ошибка list index out of bonds(1). И выбранные данные не удаляются.
--------------------
- Скажите, Большой Брат существует в том же смысле что и я? - Вы не существуете.
PM MAIL   Вверх
Rodman
Дата 8.9.2009, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

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



Цитата(dize @  8.9.2009,  16:36 Найти цитируемый пост)
И выбранные данные не удаляются. 

кода удаления я не вижу...

на какой строке вылетает ошибка?
PM MAIL WWW Skype GTalk YIM MSN   Вверх
dize
Дата 8.9.2009, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



ADOQ_del.SQL.Text:='UPDATE Dengi SET Dengi.id_group=null WHERE Dengi.Kod_klienta="' + listbox3.Items[i] + '"';
--------------------
- Скажите, Большой Брат существует в том же смысле что и я? - Вы не существуете.
PM MAIL   Вверх
Frees
Дата 8.9.2009, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

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



чему равно i


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
Данкинг
Дата 8.9.2009, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


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

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



Цитата(dize @  8.9.2009,  17:36 Найти цитируемый пост)
При удалении подобным образом вылетает ошибка list index out of bonds(1)

Значит, элемента с данным индексом в листбоксе нет. И ADO тут ни при чём, равно как и БД.


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


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

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



итак:
1. Удаляют через запрос DELETE
2. итую наверно надо брать предыдущую (ты случаем не последний элемент берешь?)... т.е. I-1
PM MAIL WWW Skype GTalk YIM MSN   Вверх
Deniz
Дата 9.9.2009, 05:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

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



dize, поменяй местами порядок в процедуре удаления. Сначала запрос к БД, потом удаление из ListBox'а.
Так же ответь на вопрос 
Цитата(Frees @  8.9.2009,  23:40 Найти цитируемый пост)
чему равно i 
из кода этого не видно.


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
Staruha
Дата 9.9.2009, 09:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1292
Регистрация: 1.2.2004
Где: Казань

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



Цитата

I-1 

 После удаления строки обязательно нужно так сделать


--------------------
Возмездие настигнет
PM MAIL   Вверх
dize
Дата 9.9.2009, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Поспешил с ответом, если переставить с удаление из листбокса и update, при этом добавив i:=i-1, то работает, но через раз. При этом, если i:=i-1 не прописывать, удаляет без ошибок, но по подному элементу с начала, к тому же в случае создания группы и присвоения ей элементов, сразу удалять не хочет, а только после перезапуска программы. i равно количеству элементов в группе, выбираемой из combobox.

Это сообщение отредактировал(а) dize - 9.9.2009, 14:27
--------------------
- Скажите, Большой Брат существует в том же смысле что и я? - Вы не существуете.
PM MAIL   Вверх
Staruha
Дата 9.9.2009, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1292
Регистрация: 1.2.2004
Где: Казань

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



Всетаки должно быть что то вроде
 
Код

i:=0 to count-1 

тогда i-1 приобретает смысл


--------------------
Возмездие настигнет
PM MAIL   Вверх
Akella
Дата 9.9.2009, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

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



Начнём с того, что удалять в цикле записи из таблицы нужно с конца.
PM MAIL   Вверх
Deniz
Дата 10.9.2009, 06:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

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



Код
begin
  ADOQ_del.Close;
  ADOQ_del.SQL.Text:='UPDATE Dengi SET Dengi.id_group=null WHERE Dengi.Kod_klienta="' + listbox3.Items[listbox3.ItemIndex] + '"';
  ADOQ_del.ExecSQL;
  listbox3.DeleteSelected;
end;
вот и все.

Добавлено через 1 минуту и 35 секунд
Только если удалять нужно в запросе писать delete вместо update.


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
Romikgy
Дата 10.9.2009, 10:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



а если выделений не одно .....?
Код

begin

ADOQ_del.Close;
ADOQ_del.SQL.Clear;
ADOQ_del.SQL.Text:='UPDATE Dengi SET Dengi.id_group=null WHERE Dengi.Kod_klienta="' + listbox3.Items[i] + '"';
ADOQ_del.ExecSQL;

listbox3.DeleteSelected;
end;


Это сообщение отредактировал(а) Romikgy - 10.9.2009, 10:12


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Deniz
Дата 10.9.2009, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

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



Цитата(Romikgy @  10.9.2009,  13:08 Найти цитируемый пост)
а если выделений не одно .....?
неужели трудно дописать?
Код
var i : integer;
begin
  for i:=ListBox3.Items.Count-1 downto 0 do
    if ListBox3.Selected[i] then begin
      ADOQ_del.SQL.Clear;
      ADOQ_del.SQL.Text:='UPDATE Dengi SET Dengi.id_group=null WHERE Dengi.Kod_klienta="' + listbox3.Items[i] + '"';
      ADOQ_del.ExecSQL;
    end;
  listBox3.DeleteSelected;
end;


Это сообщение отредактировал(а) Deniz - 10.9.2009, 12:30


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
dize
Дата 10.9.2009, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Всем большое спасибо за помощь =)
--------------------
- Скажите, Большой Брат существует в том же смысле что и я? - Вы не существуете.
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.0601 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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