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


Автор: Solominka 18.12.2009, 19:33
И так, вторая моя проблема.
Требовалось написать код для удаления выделенной строки из  компонента StringGrid. Я написала, и всё бы ничего, он работает, но возникла такая проблема.
Дело в том, что добавление записей в StringGrid идёт непосредственно из компонента DBGrid, связанного в свою очередь с Базой Данных. И удалять то удаляет... Но когда после удаления добавляешь что-то ещё, добавляется весьма криво. А когда пытаюсь записать данные из StringGrid-a в другую таблицу Базы Данных (DBGrid на форме 3), то выходит ошибка.
Как сделать так, чтобы выделенная строка в StringGrid удалялась без ущерба для дальнейших нужных действий?

Для пущей ясности ссыль на исходник: http://www.sendspace.com/file/kmzd2p

Автор: chip_and_dayl 18.12.2009, 20:15
Оно кажись и крыво удаляет, если добавить две записи, то оно вообще нифига не удаляет, а если добавить больше 2 или трех записей, то оно якобы удаляет последнюю

Автор: Данкинг 18.12.2009, 20:20
Цитата(Solominka @  18.12.2009,  19:33 Найти цитируемый пост)
добавление записей в StringGrid идёт непосредственно из компонента DBGrid

Смысл? И если всё же смысл в этом есть, то при чём здесь DBGrid? Данные в любом случае берутся не из него, а из источника, к нему подвязанного.

Цитата(Solominka @  18.12.2009,  19:33 Найти цитируемый пост)
из компонента DBGrid, связанного в свою очередь с Базой Данных

DBGrid не может быть связан с базой данных; он может быть связан с набором данных, т.е. таблицей.

Цитата(Solominka @  18.12.2009,  19:33 Найти цитируемый пост)
добавляется весьма криво

Цитата(Solominka @  18.12.2009,  19:33 Найти цитируемый пост)
то выходит ошибка.

 smile 

Цитата(Solominka @  18.12.2009,  19:33 Найти цитируемый пост)
Для пущей ясности ссыль на исходник:

Кстати, файлы до мегабайта можно прикрепить непосредственно к сообщению.

Добавлено через 1 минуту и 2 секунды
Вот chip_and_dayl, сразу понял, что к чему, а до меня не доходит; видимо, IQ ниже. smile 

В общем, сформулируй вопрос более конкретно.

Автор: Solominka 18.12.2009, 20:22
Ой, да кстати... Что-то я и правда этого не заметила (((
В общем как мне написать ТАК, чтобы работало так как надо?

Автор: chip_and_dayl 18.12.2009, 20:24
Данкинг
Я исходник скачалsmile Решил полюбоваться


СтрингГрид там, чтобы с общей базы выбрать несколько строк (заказ комплектующих)

Добавлено через 2 минуты и 26 секунд
Цитата(Solominka @ 18.12.2009,  20:22)
Ой, да кстати... Что-то я и правда этого не заметила (((
В общем как мне написать ТАК, чтобы работало так как надо?

Изобретать и копировать не буду, если в гугл ввести stringgrid в delphi удаление строк, то много готовых написаных ф-цийsmile Выбираем любую

Добавлено через 3 минуты и 51 секунду
Не удержался и скопировал smile 
Код

procedure SGDeleteRow(SG: TStringGrid; RowToDelete: Integer);
var
  i: Integer;
begin
  with SG do
  begin
    if (RowToDelete >= 0) and (RowToDelete < RowCount) then
    begin
      for i := RowToDelete to RowCount - 2 do
        Rows[i].Assign(Rows[i + 1]);
      RowCount := RowCount - 1;
    end;
  end;
end;

Автор: Данкинг 18.12.2009, 20:28
chip_and_dayl, я тоже скачал, но Парадокс юзать не умею - никогда с ним не работал - потому прога не запускается. К тому же там путь к базе прописан чётко в корне диска C:, которого у меня нет. smile 

Цитата(Solominka @  18.12.2009,  20:22 Найти цитируемый пост)
В общем как мне написать ТАК, чтобы работало так как надо? 

 smile 

Автор: chip_and_dayl 18.12.2009, 20:33
Цитата(Данкинг @  18.12.2009,  20:28 Найти цитируемый пост)
я тоже скачал, но Парадокс юзать не умею - никогда с ним не работал

С ним работать и не нужно, на его нужно смотреть или просто вспоминать о нем :)

Я тут вывел правило, если на форуме появляются упоминания о Парадоксе, значить сессия на носу :)

Автор: Solominka 18.12.2009, 20:34
chip_and_dayl, я эти процедуры пробовала и ни с одной из них программа не работает...
И здесь процедура SGDeleteRow тоже не работает... Жалуется почти на все слова...

Автор: chip_and_dayl 18.12.2009, 20:39
ммм..у меня все работает.

В кнопке Удаления я поместил  SGDeleteRow(StringGrid1, номер строки);
Ну и само собой скопировал процедуру в код

Осталось только узнать, как считать строку где стоит указатель и передавать соответствующий номер

Сча гляну, может и отправлю исходник О:)

Автор: Solominka 18.12.2009, 20:43
А у меня что-то ничего((( 
Я наверное не те вещи меняю... И не там где надо (((
Исходник - было бы конечно здорово...

Автор: chip_and_dayl 18.12.2009, 20:44
Вот код, там отдельно кнопка Удалить2

Автор: Данкинг 18.12.2009, 20:46
Цитата(chip_and_dayl @  18.12.2009,  20:33 Найти цитируемый пост)
Я тут вывел правило, если на форуме появляются упоминания о Парадоксе, значить сессия на носу smile 

Неужели кроме ничего в ВУЗах рассказывать не про что? smile 
Впрочем, у меня образование гуманитарное, я вообще не знаю, как в ВУЗах программирование преподают. smile 

Автор: chip_and_dayl 18.12.2009, 20:47
По поводу вставки после удаления строк. Там у тебя глобальная И, которая только увеличивается. При удаление ее нужно уменьшать И=И-1 или dec(i)

Добавлено @ 20:51
Данкинг
Наверно нечего или точнее некому 

З. Ы. Интересно, шоколадку за помощь получу О:) З.Ы. З.Ы. Люблю свиточ молочный :)

Автор: Solominka 18.12.2009, 20:55
chip_and_dayl , после Вашего удаления так же, как и после моего, нельза нормально добавить содержимое стринг грида в таблицу Zakaz формы 3... Выдаётся ошибка... Попробуйте после удаления нажать кнопку "заказать"...  А надо чтобы всё было нормально... :(

Шоколадку бы я вам отдала, но находитесь вы к сожалению далековато (в другой стране)... А так, для хороших людей ничего не жалко smile

Данкинг , вам крупно повезло... Нам его вообще НИКАК не предподают... Тупо дают задания и методички к лабам... в лучшем случае - пару корявых электронных книг, в худшем - вообще ничего не дают...

Автор: chip_and_dayl 18.12.2009, 21:04
Solominka
Конечно выскакивает ошибка. В кнопке удаления 2, которую я добавил нужно добавить такую строчку w=w-1

Добавлено через 1 минуту и 49 секунд
А вообще я не пойму зачем переменная i и w, они кажись обозначают одно и тоже. Суть проблемы в том, что когда ты добавляешь строку одну, то и=1 и в=1, если добавишь вторую строку и=2 и в=2, но если ты удаляешь строку ты ничего не делала,  вот  оно в базу записывало пустые

Добавлено через 4 минуты и 40 секунд
а также добавь i=i-1 после w=w-1

Автор: Solominka 18.12.2009, 21:12
chip_and_dayl, я добавила w:=w-1 в код вашей кнопки... всё равно та же ошибка...

Автор: chip_and_dayl 18.12.2009, 21:17
Шоколадкой уже не отделаться

Автор: Solominka 18.12.2009, 21:23
chip_and_dayl, всё!
Работает!
Премного Вам благодарна!
Я так рада! smile

А вот с http://forum.vingrad.ru/forum/act-ST/f-88/t-284422/unread-1.html не поможете?  smile 

Так и быть, с меня ТОРТ  smile 

Автор: chip_and_dayl 18.12.2009, 21:41
Уже ответил... смотри.

Торт уже можно высылать:)

Автор: Данкинг 18.12.2009, 21:45
Цитата(chip_and_dayl @  18.12.2009,  20:47 Найти цитируемый пост)
Интересно, шоколадку за помощь получу

Щяс будет... smile 

Цитата(Solominka @  18.12.2009,  20:55 Найти цитируемый пост)
Нам его вообще НИКАК не предподают... 

Это не есть отмазка. smile На уровне простейшей работы с БД можно и самому научиться, тем более для диплома. В общем-то, меня тоже никто никогда не учил, я сам разбирался всегда. smile 

Автор: Solominka 18.12.2009, 21:51
Данкинг, ну для вас может и не отмазка, а вот для меня - вполне...
Сравнили тоже, сколько вам лет и сколько мне, кто вы и кто я... Люди все разные, для моего понимания, например, такие вещи очень тяжело даются, тем не менее я пытаюсь хоть во что-то вникнуть, насколько это в  моих силах...

Автор: Данкинг 18.12.2009, 21:55
Цитата(Solominka @  18.12.2009,  21:51 Найти цитируемый пост)
и сколько мне

Не знаю. smile 

Цитата(Solominka @  18.12.2009,  21:51 Найти цитируемый пост)
кто вы и кто я..

А кто я? smile 

Цитата(Solominka @  18.12.2009,  21:51 Найти цитируемый пост)
тем не менее я пытаюсь хоть во что-то вникнуть, насколько это в  моих силах... 

Честно говоря, пока незаметно. Но я верю в лучшее. smile 

Автор: chip_and_dayl 18.12.2009, 21:57
Данкинг
Для девушки то, что она знает, это уже много:)

Автор: Solominka 18.12.2009, 22:03
Вот именно, chip_and_dayl правильно сказал... Ибо многие девушки не знают даже этого...
Я бы с удовольствием с Вами, Данкинг, мозгами махнулась... Да только жаль что способа пересадки мозгов ещё не придумали... smile 

Автор: Romikgy 20.12.2009, 01:45
а согласится ли Данкинг?

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