Casa
Top.Mail.Ru Yandeks.Metrika
Fórum: "Bases";
Arquivo atual: 2004.04.11;
Download: [xml.tar.bz2];

Para baixo

pedidos Encontre agências semelhantes


Koba   (2004-04-15 21:21) [0]

Пожскажите как узнать результат запроса(присвоить его переменной):
select count(*) from XXX



Koba   (2004-04-15 21:21) [0]

Пожскажите как узнать результат запроса(присвоить его переменной):
select count(*) from XXX



kaif ©   (2004-04-15 21:26) [1]

Зависит от того, как делается сам запрос. Если с помощью компонентов типа TQuery, то нужно запрос открыть (метод Open),  а затем считать значение поля методом
Query1.Fields[0].AsInteger.
А можно сделать псевдоним для поля в запросе:
select count(*) ccc from XXX
И обратиться по имени:
Query1.FieldByName("ccc").AsInteger



kaif ©   (2004-04-15 21:26) [1]

Зависит от того, как делается сам запрос. Если с помощью компонентов типа TQuery, то нужно запрос открыть (метод Open),  а затем считать значение поля методом
Query1.Fields[0].AsInteger.
А можно сделать псевдоним для поля в запросе:
select count(*) ccc from XXX
И обратиться по имени:
Query1.FieldByName("ccc").AsInteger



tERRORist ©   (2004-04-15 21:26) [2]

declare @len int
set @len=(select count(*) from xxx)

а вот меня интересует как найти максимальную длину значения (если значение представить как строку) в поле, когда название самого поля и таблицы заранее не известно.



tERRORist ©   (2004-04-15 21:26) [2]

declare @len int
set @len=(select count(*) from xxx)

а вот меня интересует как найти максимальную длину значения (если значение представить как строку) в поле, когда название самого поля и таблицы заранее не известно.



kaif ©   (2004-04-15 21:29) [3]

2 tERRORist ©   (15.04.04 21:26) [2]
Это код для MSSQL ?
Тогда, ИМХО, ответом на твой вопрос будет запрос этих данных из системных таблиц MSSQL. Где описываются метаданные таблиц?



kaif ©   (2004-04-15 21:29) [3]

2 tERRORist ©   (15.04.04 21:26) [2]
Это код для MSSQL ?
Тогда, ИМХО, ответом на твой вопрос будет запрос этих данных из системных таблиц MSSQL. Где описываются метаданные таблиц?



tERRORist ©   (2004-04-15 21:33) [4]

НЕ не совсем меня правильно понял. Максимально допустимую длину (т.е. которую задаешь при проектировании таблицы можно легко вытащить из метаданных), а мне нужно узнать какова реальная максимальная длина поля (длину самого длинного значения :).
Причем еще косяк в том, что название столбца и таблицы заранее не известно, а получаются из текстовых параметров...



tERRORist ©   (2004-04-15 21:33) [4]

НЕ не совсем меня правильно понял. Максимально допустимую длину (т.е. которую задаешь при проектировании таблицы можно легко вытащить из метаданных), а мне нужно узнать какова реальная максимальная длина поля (длину самого длинного значения :).
Причем еще косяк в том, что название столбца и таблицы заранее не известно, а получаются из текстовых параметров...



kaif ©   (2004-04-15 21:39) [5]

А что максимально задаваемая не равна реально максимальной?
Например, мне всегда казалось, что VARCHAR(50) это поле, в которое реально можно запихать строку, длиной именно максимум в  50 символов. Или это в MSSQL не так?



kaif ©   (2004-04-15 21:39) [5]

А что максимально задаваемая не равна реально максимальной?
Например, мне всегда казалось, что VARCHAR(50) это поле, в которое реально можно запихать строку, длиной именно максимум в  50 символов. Или это в MSSQL не так?



tERRORist ©   (2004-04-15 21:41) [6]

Если названия столбца и таблицы знать заранее, то найти легко:

set @len=(select max(len(cast(COLUMN1 as varchar(8000)))) from TABLE1)

Но дело в том что COLUMN1, TABLE1 нужно подставлять динамически.
Попробовал сделать функцию, в которой выполняю динамические запросы exec("<command>") и записываю результат во временную табличку, но при присвоении переменной @len=(select column_length from #temporary_table) сервер зараза ругается, говорит что нельзя обращаться из функций к временных таблицам :(



tERRORist ©   (2004-04-15 21:41) [6]

Если названия столбца и таблицы знать заранее, то найти легко:

set @len=(select max(len(cast(COLUMN1 as varchar(8000)))) from TABLE1)

Но дело в том что COLUMN1, TABLE1 нужно подставлять динамически.
Попробовал сделать функцию, в которой выполняю динамические запросы exec("<command>") и записываю результат во временную табличку, но при присвоении переменной @len=(select column_length from #temporary_table) сервер зараза ругается, говорит что нельзя обращаться из функций к временных таблицам :(



kaif ©   (2004-04-15 21:42) [7]

Может тебе нужно
select max(length(<поле>)) from <таблица>
?
Тогда нужно откопать функцию length в MSSQL. Там много функций. Такая явно тоже найдется. И не одна.



kaif ©   (2004-04-15 21:42) [7]

Может тебе нужно
select max(length(<поле>)) from <таблица>
?
Тогда нужно откопать функцию length в MSSQL. Там много функций. Такая явно тоже найдется. И не одна.



kaif ©   (2004-04-15 21:47) [8]

Я понял наконец. А в конце-то концов что нужно получить на стороне клиента? Одно значение для данного поля данной таблицы? Или целый массив таких значений?



kaif ©   (2004-04-15 21:47) [8]

Я понял наконец. А в конце-то концов что нужно получить на стороне клиента? Одно значение для данного поля данной таблицы? Или целый массив таких значений?



kaif ©   (2004-04-15 21:48) [9]

Из хранимых процедур же можно обращаться к временным таблицам. Напиши хранимую процедуру.



kaif ©   (2004-04-15 21:48) [9]

Из хранимых процедур же можно обращаться к временным таблицам. Напиши хранимую процедуру.



tERRORist ©   (2004-04-15 21:51) [10]

Нужно что-то вроде этого:

set @command=" if not exists( select * from  tempdb..sysobjects where name="##temp_table") "+
 " create table ##temp_table (column_length int);"
exec(@command)

set @command=" insert into ##temp_table (column_length)"+
 " select max(len(cast("+@column+" as varchar(8000)))),  " from "+@table+";"
exec(@command)
set @len=(select column_length from ##temp_table)


где @table и @column -динамически подставляемые имена



tERRORist ©   (2004-04-15 21:51) [10]

Нужно что-то вроде этого:

set @command=" if not exists( select * from  tempdb..sysobjects where name="##temp_table") "+
 " create table ##temp_table (column_length int);"
exec(@command)

set @command=" insert into ##temp_table (column_length)"+
 " select max(len(cast("+@column+" as varchar(8000)))),  " from "+@table+";"
exec(@command)
set @len=(select column_length from ##temp_table)


где @table и @column -динамически подставляемые имена



kaif ©   (2004-04-15 21:56) [11]

Объяви курсор и в нем сделай это присвоение.



kaif ©   (2004-04-15 21:56) [11]

Объяви курсор и в нем сделай это присвоение.



tERRORist ©   (2004-04-15 21:56) [12]

Ну наверно придется действительно пихать все это в процедуру,
просто хотел ее разгрузить, вынести определение длины в функцию.
А нужно это все для универсального отчета. Вобщем штука такая, в процедуру передаются название таблицы и список группируемых столбцов, а она выдает тебе результат в красивом виде и так для любой таблицы.



tERRORist ©   (2004-04-15 21:56) [12]

Ну наверно придется действительно пихать все это в процедуру,
просто хотел ее разгрузить, вынести определение длины в функцию.
А нужно это все для универсального отчета. Вобщем штука такая, в процедуру передаются название таблицы и список группируемых столбцов, а она выдает тебе результат в красивом виде и так для любой таблицы.



kaif ©   (2004-04-15 22:02) [13]

Да, я понял, что ты хочешь сделать. Только я вот чего не понял. Почему внутри функции ты можешь задействовать запрос SELECT, но не можешь у него "похитить" результат? Ты пробовал объявлять курсор? Курсор по динамическом SQL сработает? Он же всего один раз должен будет "щелкнуть" - присвоить результат переменной, которую вернет функция.



kaif ©   (2004-04-15 22:02) [13]

Да, я понял, что ты хочешь сделать. Только я вот чего не понял. Почему внутри функции ты можешь задействовать запрос SELECT, но не можешь у него "похитить" результат? Ты пробовал объявлять курсор? Курсор по динамическом SQL сработает? Он же всего один раз должен будет "щелкнуть" - присвоить результат переменной, которую вернет функция.



tERRORist ©   (2004-04-15 22:08) [14]

Че-то я вопрса не понял...
Селект-то я могу сделать, но ведь заранее не известно на что -
имена столбца и таблицы переменные. А вытащить данные из exec(@command) никак не получится, сервер ведь открывает отдельною соединение, и там выполнияет код который идет в параметре @command



tERRORist ©   (2004-04-15 22:08) [14]

Че-то я вопрса не понял...
Селект-то я могу сделать, но ведь заранее не известно на что -
имена столбца и таблицы переменные. А вытащить данные из exec(@command) никак не получится, сервер ведь открывает отдельною соединение, и там выполнияет код который идет в параметре @command



Hro   (2004-04-15 22:20) [15]

>> tERRORist
Стоп, только без курсоров пожалуйста, они медленно работают.
Меня kaif попросил помоч.
сформулируй пожалуйста еще раз свою задачу



Hro   (2004-04-15 22:20) [15]

>> tERRORist
Стоп, только без курсоров пожалуйста, они медленно работают.
Меня kaif попросил помоч.
сформулируй пожалуйста еще раз свою задачу



Hro   (2004-04-15 22:23) [16]

>> tERRORist
для одного поля
select maxlen=max(L) from (select L=len(field1) from table1) as tt



Hro   (2004-04-15 22:23) [16]

>> tERRORist
для одного поля
select maxlen=max(L) from (select L=len(field1) from table1) as tt



tERRORist ©   (2004-04-15 22:34) [17]

>Стоп, только без курсоров пожалуйста, они медленно работают.
Курсоры работают нормально, я на них как раз все и строю, чтоб получать группировки.

>Меня kaif попросил помоч.
>сформулируй пожалуйста еще раз свою задачу

Задача офигенная, надо сделать универсальный отчет, чтоб в процедуру передавались имя таблицы и список группируемых столбцов, а она выдавала результат в красивом сгруппированном виде. Вобщем уже все сделал реально, на клиенте в DBGridEh все выводится, раскрашивается по уровням группировки, сделал даже свертывание, развертывание уровней на ЦеллКлик, суммирование - т.е как Пивот Тэйбл в Екселе. Осталось немного подправить такую штуку. Если хочется сгруппировать на одном уровне несколько столбцов, то у меня формируется строка (которая вставляется в результат как заголовок уровня) "Название столбца1: Сгруппированное значние1 "+ "Название столбца2: Сгруппированное значение2". Но значения <Сгруппированное значение> могут иметь разную длину, т.е. в другом заголовке того же уровня они не будут строго друг под другом, вот я и хотел находить максимальную длину и по ней форматировать. Вобщем это наверно сложно для понимания, если б посмотреть скриншот сразу станет ясно... Жаль картинки нельзя вставлять



tERRORist ©   (2004-04-15 22:34) [17]

>Стоп, только без курсоров пожалуйста, они медленно работают.
Курсоры работают нормально, я на них как раз все и строю, чтоб получать группировки.

>Меня kaif попросил помоч.
>сформулируй пожалуйста еще раз свою задачу

Задача офигенная, надо сделать универсальный отчет, чтоб в процедуру передавались имя таблицы и список группируемых столбцов, а она выдавала результат в красивом сгруппированном виде. Вобщем уже все сделал реально, на клиенте в DBGridEh все выводится, раскрашивается по уровням группировки, сделал даже свертывание, развертывание уровней на ЦеллКлик, суммирование - т.е как Пивот Тэйбл в Екселе. Осталось немного подправить такую штуку. Если хочется сгруппировать на одном уровне несколько столбцов, то у меня формируется строка (которая вставляется в результат как заголовок уровня) "Название столбца1: Сгруппированное значние1 "+ "Название столбца2: Сгруппированное значение2". Но значения <Сгруппированное значение> могут иметь разную длину, т.е. в другом заголовке того же уровня они не будут строго друг под другом, вот я и хотел находить максимальную длину и по ней форматировать. Вобщем это наверно сложно для понимания, если б посмотреть скриншот сразу станет ясно... Жаль картинки нельзя вставлять



kaif ©   (2004-04-16 01:55) [18]

Может залезть в дебри DBGridEh, я так понял, что вся информация уже на клиенте?



kaif ©   (2004-04-16 01:55) [18]

Может залезть в дебри DBGridEh, я так понял, что вся информация уже на клиенте?



Страницы: 1 filial inteira

Fórum: "Bases";
Arquivo atual: 2004.04.11;
Download: [xml.tar.bz2];

em cima









Memória: 0.71 MB
Hora: 0.109 c
14-1082123506
juiceman
2004-04-16 17:51
2004.05.09
Помогите найти Ketmara


11-1068245737
nsvi
2003-11-08 01:55
2004.05.09
Вопросы по ToolBar


1-1082482320
Polkan
2004-04-20 21:32
2004.05.09
StringGrid и SaveToFile


8-1076754236
capaz
2004-02-14 13:23
2004.05.09
TImage ZOOM


14-1081863818
Dimerol
2004-04-13 17:43
2004.05.09
Proftpd and symbolic links





afrikaans albanês Arabic armênio azerbaijano basco belarusian Bulgarian catalão Chinês simplificado) Chinês tradicional) croata checo dinamarquês Dutch Inglês estoniano filipino Finnish French
Galego georgiano German grego crioulo haitiano hebraico hindi húngaro islandês Indonesian irlandês Italian Japanese Korean letão lituano macedónio Malay maltês Norwegian
persa polonês Portuguese romeno Russa sérvio Slovak esloveno espanhol swahili sueco tailandês turco ucraniano urdu vietnamita galês ídiche bengali bósnio
cebuano esperanto gujarati hausa hmong igbo javanês kannada khmer lao latino maori marata mongol Nepali punjabi somali tâmil telugu yoruba
zulu
Английский francês Alemão Italiano Португальский russo Espanhol