|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
03.05.2012, 06:22 | #1 |
Старожил
Регистрация: 05.06.2008
Сообщений: 4,206
|
Как найти столбец в DBGridEh по заголовку и удалить его?
Доброе утро! Нужно реализовать поиск столбца в DBGridEh по заголовку, которое будет введено в Edit. Это нужно для того, чтобы удалить найденный столбец. Столбцы просто добавляются пользователем, без добавления его в базу данных. Как можно реализовать поиск столбца (получить его индекс чтоли)?
----------------------------- Добавлено №1: Вот, нашел как получить номер (индекс) колонки: Код:
Блин, хорошо, когда сам пытаешь думать. Вот, надумал такой поиск (дилетанский, но почти рабочий): Код:
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
Последний раз редактировалось artemavd; 03.05.2012 в 07:05. |
03.05.2012, 07:39 | #2 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Круто наваял )))
Вот мое предложение. Код:
I'm learning to live...
|
03.05.2012, 07:39 | #3 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
artemavd , допустим в гриде 10 колонок, и задали существующий заголовок. Ваш код 1 раз выдаст, что колонка найдена и 9 раз, что не найдена. Перед циклом в булевскую переменную False, в цикле засунуть в неё True если колонка найдена. И после цикла на основании ее значения сообщение выдать
ADD Stilet ну очень не рекомендуется использовать так переменную цикла по завершению его
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Последний раз редактировалось Аватар; 03.05.2012 в 07:41. |
03.05.2012, 07:59 | #4 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Ну ладно ладно... Не рекомендуется
Да здравствует великий и ужасный Булеан - не спорю
I'm learning to live...
|
03.05.2012, 08:20 | #5 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
Цитата:
но я бы уточнил - речь идёт ИСКЛЮЧИТЕЛЬНО про циклы FOR (т.е. где сам компилятор решает как ему удобнее изменять переменную). если использовать циклы repeat until или while - то переменной после цикла можно пользоваться вполне законно! хотя я бы тоже завёл дополнительную булевскую переменную и через неё проверял, было ли совпадение... |
|
03.05.2012, 10:13 | #6 | |
Старожил
Регистрация: 05.06.2008
Сообщений: 4,206
|
Цитата:
Про булеву переменную понятно, попробую потом. Пока думал, придумал красивую фишку. Но, с удалением колонки обязательно разберусь. Спасибо за ответы
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
|
|
03.05.2012, 10:55 | #7 |
personality
Старожил
Регистрация: 28.04.2009
Сообщений: 2,885
|
Для таких хитростей (речь про действие при ненайденности элемента в цикле вообще, а не про гридех) я применял сие:
Код:
Последний раз редактировалось phomm; 03.05.2012 в 10:58. |
03.05.2012, 11:23 | #8 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
phomm, как показывает опыт, в некоторых случаях, при включённой оптимизации компилятор крутит цикл в обратном направлении (от больших значений к меньшим). Если это произойдёт в предложенном вами варианте кода - то элемент никогда не будет найден.
Цитата:
нет, обязательно нужно хакерскими методами задачку решать, по другому никак нельзя! |
|
03.05.2012, 12:05 | #9 | ||
Старожил
Регистрация: 20.04.2008
Сообщений: 5,528
|
Цитата:
Цитата:
columnfordelete: intger; индекс колонки для удаления. с начальным значение (ДО ВХОДА в цикл поиска) =-1 Код:
много времени процессора одно присвоение не займет!
программа — запись алгоритма на языке понятном транслятору
Последний раз редактировалось evg_m; 03.05.2012 в 12:12. |
||
03.05.2012, 13:41 | #10 |
personality
Старожил
Регистрация: 28.04.2009
Сообщений: 2,885
|
Ну Continue там не зря ведь стоит, цикл так и пойдёт от макс элемента до нулевого, для макс значения счётчика мы не производим никаких действий над Items[i], а делаем что надо нам, например, запишем в результирующую переменную(которой там кстати место, а не шоумесаджу) нужный результат, потом цикл либо перепишет её своим значением, либо так и останется, потом мы уже согласно этой переменной производим действия, например, тот же шоумессадж который выводит такую переменную текстом, ибо 2 шоумесаджа - имо некрасивый код, полу-функция либо должна вернуть результат вызывающему, либо произвести работу над единственной сущностью. Плюс я расписал приём для общего случая.
Насчёт данного же случая: нелюбви к булеан-вару у меня нет, я так и сказал, что тут толковее (имо) использовать те же repeat и while, а с ними булеан - ни к чему. Извиняюсь за не слишком понятное первичное изложение мысли (плюс по привычке комменты на англ, в них немало деталей идеи раскрыто), надеюсь сейчас объяснил нормально. Последний раз редактировалось phomm; 03.05.2012 в 13:44. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как найти окно по заголовку с определенным словом? | tozter | Общие вопросы Delphi | 5 | 21.12.2011 17:00 |
Как найти программу по заголовку и закрыть ее? | Catsys | Общие вопросы Delphi | 2 | 16.09.2011 23:26 |
Как удалить столбец таблицы средствами VB | Kingson | Microsoft Office Access | 4 | 08.04.2010 10:46 |
найти самое короткое слово и удалить его из файла | Pihan | Помощь студентам | 2 | 18.06.2009 23:03 |
Как в dbgrideh получить имя поля той колонки, по заголовку которой Вы щелкнули???? | zimmion | БД в Delphi | 4 | 04.03.2008 15:02 |