Sql ????
И ещё вопрос как привязать ProgressBar к выполнению SQL запроса, хотелось бы видеть процесс выполнения запроса.
Заранее спсибо.
Подскажите кто нить как можно подсчитать количество непустых столбцов в одной записи БД с помощью SQL.
И ещё вопрос как привязать ProgressBar к выполнению SQL запроса, хотелось бы видеть процесс выполнения запроса.
Заранее спсибо.
Про столюцы с помощью стандартного SQL не знаю, единственное что приходит на ум - Взять строку, с помощью ХП ее транспонировать и потом уже считать=)))Но это все справедливо для MSSQL и иже с ними. Про прогресс: если работаешь через ADO то смотри - FetchProgress, FetchComplete в MSDN.
Подскажите кто нить как можно подсчитать количество непустых столбцов в одной записи БД с помощью SQL.
И ещё вопрос как привязать ProgressBar к выполнению SQL запроса, хотелось бы видеть процесс выполнения запроса.
Заранее спсибо.
Напиши функцию, которая возвращает 1, если значение поля непусто, а в селекте складывай. Возможно в твоей СУБД уже реализована подобная функция, нпример в Oracle это NVL.
Что ты подразумеваешь под процессом выполнения запроса? Этот процесс характеризуется большим количеством всяких параметров, характер изменений которых изменяется в зависимости от запроса. К тому же подобная привязка будет сделана не в одно действие. Я бы не привязывал к непосредственно исполняемому sql-у. И еще подумай, что часто можно оценить время выполнения запроса (в рантайме, в конкретной ситуации) и показывать юзеру прогресс бар привязанный просто к таймеру.
Напиши функцию, которая возвращает 1, если значение поля непусто, а в селекте складывай. Возможно в твоей СУБД уже реализована подобная функция, нпример в Oracle это NVL.
Что ты подразумеваешь под процессом выполнения запроса? Этот процесс характеризуется большим количеством всяких параметров, характер изменений которых изменяется в зависимости от запроса. К тому же подобная привязка будет сделана не в одно действие. Я бы не привязывал к непосредственно исполняемому sql-у. И еще подумай, что часто можно оценить время выполнения запроса (в рантайме, в конкретной ситуации) и показывать юзеру прогресс бар привязанный просто к таймеру.
Во первых как будет выглядеть функция? Я ведь не знаю на какой записи в данный момент происходит вычисление непустых столбцов. Если бы я знал, то через Table все бы нашел.
Во вторых как возвращенную функцией переменную использовать в реалтайме (и вообще) в SQl запросе.
"Что ты подразумеваешь под процессом выполнения запроса?"
Как я понимаю есть начало и конец выполнения запроса. Я хочу знать когда он закончится и привязать к этому ProgressBar.
А по таймеру глупо привязывать ProgressBar. На стареньких компах скорость выполнения намного меньше...
Во первых как будет выглядеть функция? Я ведь не знаю на какой записи в данный момент происходит вычисление непустых столбцов. Если бы я знал, то через Table все бы нашел.
Во вторых как возвращенную функцией переменную использовать в реалтайме (и вообще) в SQl запросе.
select Check_Null(col1) + Check_Null (col2) + ... from your_table, где Check_Null - хранимая процедура (функция), возвращающая 1, если аргумент не NULL, в противном случае 0. Для удобства можно преобразовывать все типы к символьному. Обрати внимание, что это процедура БД. Какую СУБД ты используешь?
Как я понимаю есть начало и конец выполнения запроса. Я хочу знать когда он закончится и привязать к этому ProgressBar.
Запрос начинает работу с Open() (возможны варианты) и, соответственно, заканчивает при переходе на следущую строку. Разве нет? Сделай шаг прогрессу следующей строкой.
А по таймеру глупо привязывать ProgressBar. На стареньких компах скорость выполнения намного меньше...
Я сказал оценить, а не расчитать и зашить в код. Даже если оценка окажется грубой, при большом количестве шагов и достаточно длительном времени выполнения не так уж и страшно, что прогресс вдруг быстро завершится, дойдя до 75%. Судя по прогрессам во многих программах именно так и поступают.
...как привязать ProgressBar к выполнению SQL запроса, хотелось бы видеть процесс выполнения запроса...
ежли запрос выполняеца настолько долго, что необходимо прогресс к нему вязать, то это глючный запрос и его переделывать нада... а коли для красоты и важности, так всамде, посади прогресс на таймер - типа во - работат... а через полчасика покажи юзеру результат запроса:) он ето оценит:)))