![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TQuery.FieldCount [D6, MSSQL]
Новачок © (2003-05-23 15:55:00)Всем привет!
Скажите плиз, почему не показывается количество полей?
Var
i: integer;
qr: TQuery;
Begin
... //Здесь выполнился запрос. Там три поля.
i:=qr.Fields.Count;
... //значение i - ноль. ?!
End.
Новачок (2003-05-23 16:42:00) [1]Вообщем, я думаю, необходимо все запихивать во временную таблицу с помощью ExecSQL, а потом открывать с помощью Open - и получать поля.
sniknik (2003-05-23 16:38:00) [2]Новачок (23.05.03 16:32)
если ExecSQL то рекордсета в кверях просто нет, какие у него тогда поля?
Надо Open
Новачок (2003-05-23 16:32:00) [3]>Johnmen © (23.05.03 16:24)
> Надо Open
а если ExecSQL - решений никаких нет?
Новачок (2003-05-23 16:29:00) [4]Странно... ведь сайт называется МАСТЕРА Delphi.
Текст SQL-запроса формируется в зависимости от различных условий.
Формируется именно список полей после оператора select:
declare @CntAllSymb int -- количество всех символов
declare @NumCurrSymb int -- номер текущего символа
declare @CurrSymb int -- текущий символ
declare @SH01 varchar(255)
declare @SH02 varchar(255)
declare @SH03 varchar(255)
declare @SH04 varchar(255)
declare @SH05 varchar(255)
declare @SH06 varchar(255)
declare @SH07 varchar(255)
declare @SH08 varchar(255)
declare @SH09 varchar(255)
declare @SH10 varchar(255)
declare @SH11 varchar(255)
declare @SH12 varchar(255)
declare @SH13 varchar(255)
declare @SG1 varchar(255)
declare @SG2 varchar(255)
declare @ST1 varchar(255)
declare @ST2 varchar(255)
declare @SM varchar(4)
declare @SC varchar(1000)
select @CntAllSymb = (select count(*) from garbage..C_ClnSymb)
select @NumCurrSymb = 0
select @SH01 = "select "
select @SH02 = "case "
select @SH03 = "when CRS.CID = 0 then "Чужой клиент" "
select @SH04 = "else (select CLN.CLN_FNAM "
select @SH05 = " from vicont..CLN CLN "
select @SH06 = " where CLN.CLN_ID = CRS.CID) "
select @SH07 = " end CLNNAME, "
select @SG1 = @SH01+@SH02+@SH03+@SH04+@SH05+@SH06+@SH07
select @SH08 = "case "
select @SH09 = "when CRS.CID = 0 then 99 "
select @SH10 = "else (select CLN.CLN_JP "
select @SH11 = " from vicont..CLN CLN "
select @SH12 = " where CLN.CLN_ID = CRS.CID) "
select @SH13 = " end CLNJP, CRS.CID"
select @SG2 = @SH08+@SH09+@SH10+@SH11+@SH12+@SH13
select @ST1 = " from garbage..C_ClnResSymb CRS"
select @ST2 = " order by 3"
select @SC = ""
while @NumCurrSymb < @CntAllSymb
begin
select @NumCurrSymb=@NumCurrSymb+1
select @CurrSymb = (select CS.SIMB from garbage..C_ClnSymb CS
where CS.ID = @NumCurrSymb)
select @SM = convert(varchar(4), @CurrSymb)
select @SC = @SC+", CRS.S"+@SM
end
execute(@SG1+@SG2+@SC+@ST1+@ST2)
Вот такой текст присваивается свойству qr.SQL
после чего я выполняю запрос qr.ExecSQL.
fool (2003-05-23 16:26:00) [5]если ты пишешь gr.SQL.Text := "select...";
то пиши gr.Open и получишь FieldCount
иначе, как ты и делаешь qr.ExecSQL но полей не жди
Johnmen (2003-05-23 16:24:00) [6]Надо Open
fool (2003-05-23 16:23:00) [7]>Новачок (23.05.03 16:18)
какие же здесь поля, ты же не запрос делаешь
Новачок (2003-05-23 16:23:00) [8]> Соловьев
Набор данных он возвращает.
Соловьев (2003-05-23 16:21:00) [9]
> qr.ExecSQL;
прикольно :))) он набор данных не возвращает!!!
Хелп:
procedure ExecSQL;
Description
Call ExecSQL to execute the SQL statement currently assigned to the SQL property. Use ExecSQL to execute queries that do not return a cursor to data (such as INSERT, UPDATE, DELETE, and CREATE TABLE).
Новачок (2003-05-23 16:18:00) [10]> Johnmen
qr.ExecSQL;
Соловьев (2003-05-23 16:13:00) [11]
> Новачок (23.05.03 15:55)
а зачем такая задача, когда известно сколько полей?
Johnmen (2003-05-23 16:08:00) [12]Как выполняется запрос ?
Новачок (2003-05-23 16:02:00) [13]> Johnmen ©
Новачок (23.05.03 15:57)
Johnmen (2003-05-23 16:00:00) [14]А так i:=qr.FieldCount; ?
Новачок (2003-05-23 15:57:00) [15]Извиняюсь за различие между заголовком сообщения и текстом сообщения.
Дело в том, что я пробовал получить количество полей различными способами:
i:=qr.FieldCount;
i:=qr.Fields.Count;
оба варианта показывают ноль.