Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > как в dbgrid удалить строку с известным номером


Автор: blackDancer 29.4.2009, 21:09
как в dbgrid удалить строку с известным номером?

Код

GridMap->DataSource->DataSet->Delete();


не работает

Автор: Alca 29.4.2009, 23:38
давай больше кода

Автор: Данкинг 29.4.2009, 23:43
Цитата(blackDancer @  29.4.2009,  22:09 Найти цитируемый пост)
как в dbgrid удалить строку с известным номером?

В DBGrid- никак. smile Не устану этого повторять. smile 

Цитата(blackDancer @  29.4.2009,  22:09 Найти цитируемый пост)
не работает

Почему не работает? Этот код должен удалять ту строку, которая активна в Dataset.

Автор: blackDancer 29.4.2009, 23:44
Цитата(Alca @ 29.4.2009,  23:38)
давай больше кода

Какой нафик код.
Как удалить в dbgrid строку с известным номером?
Какой тут может быть код я просто привёл пример что так не работает.
Есть dbgrid  в нём что то есть надо удалить например третью строку и всё. Как? smile  

Автор: Alca 29.4.2009, 23:49
а DBNavigator удаляет?

Автор: Данкинг 29.4.2009, 23:49
Цитата(blackDancer @  30.4.2009,  00:44 Найти цитируемый пост)
Есть dbgrid  в нём что то есть надо удалить например третью строку и всё. Как? 

Третью строку Dataset' а надо удалить? Дык:
Код

Dataset->Recno()=3;
DataSet->Delete();

Автор: Alca 29.4.2009, 23:50
Если надо удалять неактивную запись, то надо юзать SQL.

Добавлено через 1 минуту и 7 секунд
Либо бегать по датасету 

Автор: Dmi3ev 30.4.2009, 00:41
Код

        if (ADOQuery1->RecordCount>0)
                ADOQuery1->Delete();
        else
                MessageBox(NULL, "Таблица пуста! Удаление невозможно!", "Сообщение", MB_OK);

У тебя тоже самое! Но это удалит ту запись, на которой, в данный момент бегунок...

Автор: SAnatoliy 30.4.2009, 10:09
У меня работает так. при выделении строк/и.

 if(DBGrid1->SelectedRows) { DBGrid1->SelectedRows->Delete(); }
             else { ShowMessage("Выделите запись"); }

Автор: blackDancer 30.4.2009, 11:14
Код

        GridMap->DataSource->DataSet->First();  
        while(!GridMap->DataSource->DataSet->Eof)   
        {
                GridMap->DataSource->DataSet->Delete();
                GridMap->DataSource->DataSet->Next();      
        }


Делаю вот так при вызове данной функции прога виснет?

Автор: Alca 30.4.2009, 11:22
 smile 

Автор: Лапоть 30.4.2009, 11:28
Цитата(Данкинг @  30.4.2009,  00:43 Найти цитируемый пост)
В DBGrid- никак.  Не устану этого повторять
Блин! Ну когда ж этот перец (да и не только он) поймёт, что в гриде данные только отображаются! smile 

Автор: Данкинг 30.4.2009, 11:34
Цитата(blackDancer @  30.4.2009,  12:14 Найти цитируемый пост)
Делаю вот так при вызове данной функции прога виснет? 

Это вопрос? Отвечаю: да, виснет. smile Почему? Потому что в твоём случае более логично сделать так:

Код

 while(!GridMap->DataSource->DataSet->Recordcount()=0)   
        {GridMap->DataSource->DataSet->Delete();}

(в синтаксисе Билдера могу ошибаться, но суть такая)
Но вообще-то боюсь, что при больших объёмах такой код сильно замедлит работу программы. И лучше использовать запрос (delete from ...).

Цитата(Лапоть @  30.4.2009,  12:28 Найти цитируемый пост)
Блин! Ну когда ж этот перец (да и не только он) поймёт, что в гриде данные только отображаются!

Когда-нибудь: мы же верим в лучшее! smile 

Автор: blackDancer 30.4.2009, 11:43
Цитата(Данкинг @ 30.4.2009,  11:34)
Цитата(blackDancer @  30.4.2009,  12:14 Найти цитируемый пост)
Делаю вот так при вызове данной функции прога виснет? 

Это вопрос? Отвечаю: да, виснет. smile Почему? Потому что в твоём случае более логично сделать так:

Код

 while(!GridMap->DataSource->DataSet->Recordcount()=0)   
        {GridMap->DataSource->DataSet->Delete();}

(в синтаксисе Билдера могу ошибаться, но суть такая)
Но вообще-то боюсь, что при больших объёмах такой код сильно замедлит работу программы. И лучше использовать запрос (delete from ...).

Цитата(Лапоть @  30.4.2009,  12:28 Найти цитируемый пост)
Блин! Ну когда ж этот перец (да и не только он) поймёт, что в гриде данные только отображаются!

Когда-нибудь: мы же верим в лучшее! smile

Так не работает вообше даже не запускается, и какая разница что так как ты предложил и я сделал нет разницы только первый вариант сто пудов работает:

Код

     while(!GridMap->DataSource->DataSet->Eof)   
     {
        KeshRes[i][0]=GridMap->Fields[3]->AsFloat; 

        GridMap->DataSource->DataSet->Next();      
        i++;                            
        maxLongKesh++;                  
     }


Это пример его использования вот.

Автор: Dmi3ev 30.4.2009, 11:50
blackDancer, мы тебе все вот че пытаемся объяснить:

Вот упрощенная схема (без разбора конкретных технологий и тд и тп)
________
твоя БД  |
________|
Таблица1|-------------------->Table1-------------->DataSource1------------->DBGrid1
________|                                 |
Таблица2|                                 |----------------->DataSource2------------->DBGrid2
________|

попробуй при таком раскладе удалять все в DBGrid1!
в DBGrid2 ничего не изменится...
потому как DBGrid - это компонент для визуально отображения данных... Понимаешь??? в БД при этом ничего не случится!!! 
Для того чтобы удалять данные в БД, в данном случае, надо работать с методами Table1...

Автор: blackDancer 30.4.2009, 11:52
Короче так раз вы говорите что из DBGrid нельзя удалить то как мне сделать вот что?

Задумка этого в том что:
1) на одной форме делается поиск по базе
2) затем юзер нажимает кнопку перейти на другую форму для графического представления всего того что он нашёл
3) нажимает отобразить, отображаются все объекты на карте
4) и наконец то из за чего я уже всех зае.....  я указываю радиус (круг для выделения) и все объекты которые попали в этот радиус я должен оставить на карте а остальные удалить.

Как я хотел это сделать пройди по DBGrid брать значения для пересчёта(это я знаю как сделать), поставить условие если не выполняется удалить строгу в Гриде если выполняется то оставить, затем взять данные из ДБГрида и заново их отрисовать.ВОТ!

Что скажете?

Автор: Dmi3ev 30.4.2009, 11:52
ЗЫ, а если тебе действительно надо удалять данные из DBGrid и никакой БД не существует, то есть StringGrid )))

Автор: blackDancer 30.4.2009, 11:56
Цитата(Dmi3ev @ 30.4.2009,  11:50)
blackDancer, мы тебе все вот че пытаемся объяснить:

Вот упрощенная схема (без разбора конкретных технологий и тд и тп)
________
твоя БД  |
________|
Таблица1|-------------------->Table1-------------->DataSource1------------->DBGrid1
________|                                 |
Таблица2|                                 |----------------->DataSource2------------->DBGrid2
________|

попробуй при таком раскладе удалять все в DBGrid1!
в DBGrid2 ничего не изменится...
потому как DBGrid - это компонент для визуально отображения данных... Понимаешь??? в БД при этом ничего не случится!!! 
Для того чтобы удалять данные в БД, в данном случае, надо работать с методами Table1...

Блин мне не нужно что то удалить из базы,  если бы я хотел что сделать с базой я бы это сделал дахе не стал ничего писать вам.

Добавлено через 2 минуты и 5 секунд
Цитата(Dmi3ev @ 30.4.2009,  11:50)
blackDancer, мы тебе все вот че пытаемся объяснить:

Вот упрощенная схема (без разбора конкретных технологий и тд и тп)
________
твоя БД  |
________|
Таблица1|-------------------->Table1-------------->DataSource1------------->DBGrid1
________|                                 |
Таблица2|                                 |----------------->DataSource2------------->DBGrid2
________|

попробуй при таком раскладе удалять все в DBGrid1!
в DBGrid2 ничего не изменится...
потому как DBGrid - это компонент для визуально отображения данных... Понимаешь??? в БД при этом ничего не случится!!! 
Для того чтобы удалять данные в БД, в данном случае, надо работать с методами Table1...

Блин мне не нужно что то удалить из базы,  если бы я хотел что сделать с базой я бы это сделал дахе не стал ничего писать вам.

Автор: Dmi3ev 30.4.2009, 11:59
Цитата

Как я хотел это сделать пройди по DBGrid брать значения для пересчёта(это я знаю как сделать), поставить условие если не выполняется удалить строгу в Гриде если выполняется то оставить, затем взять данные из ДБГрида и заново их отрисовать.ВОТ!

проделай тоже самое (раз знаешь как), но только не с гридом, а с Table, Query или где у тебя данные... я хз... Грид оставь в покое... Забудь про него...
Не знаю уже как объяснить! 
Допустим, ты открыл фотошоп и хочешь что-то там нарисовать... 
Ты берешь маркер и начинаешь на мониторе фигачить (сейчас ты именно так делаешь)...
но монитор для отображения служит, а не для рисования...
Для рисования есть мышка или другие устройства ...
Хз, если и так непонятно... то...

Автор: blackDancer 30.4.2009, 11:59
Цитата(Dmi3ev @ 30.4.2009,  11:50)
blackDancer, мы тебе все вот че пытаемся объяснить:

Вот упрощенная схема (без разбора конкретных технологий и тд и тп)
________
твоя БД  |
________|
Таблица1|-------------------->Table1-------------->DataSource1------------->DBGrid1
________|                                 |
Таблица2|                                 |----------------->DataSource2------------->DBGrid2
________|

попробуй при таком раскладе удалять все в DBGrid1!
в DBGrid2 ничего не изменится...
потому как DBGrid - это компонент для визуально отображения данных... Понимаешь??? в БД при этом ничего не случится!!! 
Для того чтобы удалять данные в БД, в данном случае, надо работать с методами Table1...

Блин мне не надо из базы нихера удалять, если я бы хотел сделать это то даже не стал бы вас ни о чем спрашивать.

Автор: Dmi3ev 30.4.2009, 12:00
Цитата

Блин мне не нужно что то удалить из базы,  если бы я хотел что сделать с базой я бы это сделал дахе не стал ничего писать вам.

ок, тогда тебе нужен запрос, которые выберет тебе записи которые удовлетворяют условию... а потом его результат отображать в Гриде

Автор: blackDancer 30.4.2009, 12:05
Цитата(Dmi3ev @ 30.4.2009,  12:00)
ок, тогда тебе нужен запрос, которые выберет тебе записи которые удовлетворяют условию... а потом его результат отображать в Гриде

Если писать запрос то ко всей базе, а мне надо из того что уже выбрали и ОТОБРАЗИЛИ в гриде. Надо обработать данные которые отображаются в ГРИДЕ. КАК?

Автор: Dmi3ev 30.4.2009, 12:26
blackDancer, ты сам пойми, что тебе надо  smile  Если тебе не надо работать с БД, то нах тебе Грид??? Возьми StringGrid, запихни туда все и работай с ним... выглядит он так же... 

Автор: Лапоть 30.4.2009, 14:30
Цитата(blackDancer @  30.4.2009,  12:59 Найти цитируемый пост)
Блин мне не надо из базы нихера удалять, если я бы хотел сделать это то даже не стал бы вас ни о чем спрашивать. 

drop database user posted image

Автор: Данкинг 30.4.2009, 14:34
Цитата(blackDancer @  30.4.2009,  12:59 Найти цитируемый пост)
Блин мне не надо из базы нихера удалять,

Сам определись, что тебе нужно, а потом другим мозги компостируй. smile 


Автор: Alca 30.4.2009, 14:37
 smile 

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