Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.06.26;
Скачать: CL | DM;

Вниз

Почему ХП возвращает ReadOnly рекордсет??? ПОМОГИТЕ ПЛЗ!   Найти похожие ветки 

 
DBDev   (2003-05-30 15:11) [0]

А результат выполнения запроса (т.е. TADOStoredProcedure) хочется редактировать...

Сама процедура:

CREATE PROCEDURE sp_boards_main
...
AS

BEGIN

DECLARE @query_text VARCHAR(3000)

SET @query_text = "SELECT ..."
EXEC(@query_text)

END
GO


 
DBDev   (2003-05-30 15:23) [1]

???????


 
Соловьев ©   (2003-05-30 15:29) [2]


> SET @query_text = "SELECT ..."

что там?


 
DBDev   (2003-05-30 15:38) [3]

2Соловьев:

CREATE PROCEDURE sp_boards_main
@SupplierID VarChar(5),
@CityID VarChar(5),
@isInner VarChar(5),
@DF VarChar(12),
@DT VarChar(12),
@FreeFilter VarChar(1),
@ResFilter VarChar(1),
@OrdFilter VarChar(1),
@ByedFilter VarChar(1),
@OrderByClause VarChar(100)
AS

BEGIN

DECLARE @query_text VARCHAR(3000)
DECLARE @IsStated INT
DECLARE @Q CHAR(1)

SELECT @Q = CHAR(ASCII("""))

SET @IsStated = 0
SET @query_text = "SELECT BoardID, Address, Linkage, PointNum, Passport, SizeID,
CategoryID, SupplierID, CityID, IsPriceCalc, RealPrice,
Description, ImageA, Boards.ImageB, ImageS, IsSellAllowed,
DateSellAllowed, WhoSellAllowed, IsRestricted, DateRestricted,
WhoRestricted, DateCreated, WhoCreated,
DateModifyed, WhoModifyed, isInner,
dbo.GetBoardInnerState (BoardID, " + @Q + "A1" + @Q + ", " + @Q + @DF + @Q + ", " + @Q + @DT + @Q + ") AS AState,
dbo.GetBoardInnerState (BoardID, " + @Q + "B1" + @Q + ", " + @Q + @DF + @Q + ", " + @Q + @DT + @Q + ") AS BState,
dbo.GetBoardOuterState (BoardID, " + @Q + "A1" + @Q + ", " + @Q + @DF + @Q + ", " + @Q + @DT + @Q + ") AS ASPLState,
dbo.GetBoardOuterState (BoardID, " + @Q + "B1" + @Q + ", " + @Q + @DF + @Q + ", " + @Q + @DT + @Q + ") AS BSPLState,
dbo.GetBoardSurfsNum (BoardID) AS SideNum,
dbo.GetBoardDimensions (SizeID) AS Dimensions,
dbo.GetBoardCategoryPrice (CategoryID) AS CategoryPrice,
dbo.GetBoardPrice (BoardID, SizeID, CategoryID, IsPriceCalc) AS Price,
Address + " + @Q + " " + @Q + " + Linkage AS LinkedAddress,
dbo.GetBoardGraphixPresence(BoardID, ImageA, ImageB) AS Graphix
FROM Boards "

IF (@SupplierID <> 0)
BEGIN
IF @IsStated = 0
BEGIN
SET @IsStated = 1
SET @query_text = @query_text + "WHERE (SupplierID = " + @SupplierID + ") "
END
ELSE SET @query_text = @query_text + "AND (SupplierID = " + @SupplierID + ") "
END

IF @IsStated = 0
BEGIN
SET @IsStated = 1
SET @query_text = @query_text + "WHERE "
END
ELSE SET @query_text = @query_text + "AND "


SET @query_text = @query_text + "(BoardID IN (SELECT BoardID FROM Surfaces WHERE SurfaceID IN
(SELECT SurfaceID FROM AgrBoards WHERE AgreementID IN
(SELECT AgreementID FROM Agreements WHERE (State = " + @FreeFilter + " OR State = " + @ResFilter + " OR State = " + @OrdFilter + " OR State = " + @ByedFilter + ") AND
(((DateFrom <= CONVERT(datetime," + @Q + @DF + @Q + ", 104)) AND
(DateTo >= CONVERT(datetime," + @Q + @DT + @Q + ", 104))) OR
((DateFrom >= CONVERT(datetime," + @Q + @DF + @Q + ", 104)) AND
(DateFrom <= CONVERT(datetime," + @Q + @DT + @Q + ", 104))) OR
((DateTo >= CONVERT(datetime," + @Q + @DF + @Q + ", 104)) AND
(DateTo <= CONVERT(datetime," + @Q + @DT + @Q + ", 104)))))) OR " + @FreeFilter + " = " + @Q + "1" + @Q + " AND SurfaceID NOT IN
(SELECT SurfaceID FROM AgrBoards WHERE AgreementID IN
(SELECT AgreementID FROM Agreements WHERE
(((DateFrom <= CONVERT(datetime," + @Q + @DF + @Q + ", 104)) AND
(DateTo >= CONVERT(datetime," + @Q + @DT + @Q + ", 104))) OR
((DateFrom >= CONVERT(datetime," + @Q + @DF + @Q + ", 104)) AND
(DateFrom <= CONVERT(datetime," + @Q + @DT + @Q + ", 104))) OR
((DateTo >= CONVERT(datetime," + @Q + @DF + @Q + ", 104)) AND
(DateTo <= CONVERT(datetime," + @Q + @DT + @Q + ", 104))))))))
OR "

IF @IsStated = 1 SET @query_text = @query_text + "AND "

SET @query_text = @query_text + " (BoardID IN (SELECT BoardID FROM Surfaces WHERE State = " + @FreeFilter + " OR State = " + @ResFilter + " OR State = " + @OrdFilter + " OR State = " + @ByedFilter + ")) "

IF @OrderByClause IS NOT NULL SET @query_text = @query_text + @OrderByClause

UPDATE t set t = @query_text where id = 1

EXEC(@query_text)

END
GO


 
Соловьев ©   (2003-05-30 15:41) [4]

и ты хочешь потом это редактировать? не выйдет...


 
DBDev   (2003-05-30 15:51) [5]

Почему?


 
Соловьев ©   (2003-05-30 15:53) [6]

вложенные запросы


 
DBDev   (2003-05-30 17:25) [7]

Нету вложеннных запросов, все на функциях... Должно редактироваться...


 
MOA ©   (2003-05-30 17:36) [8]

А какой ожидается результат редактирования, например, поля Adress?
Удачи!


 
DBDev   (2003-05-30 18:17) [9]

2 моа - ?


 
MOA ©   (2003-05-30 18:32) [10]

Предположим, рекордсет стал редактируемым. Юзер поменял поле Address, напрмер, не "ССадовая", а "Садовая". Что должно произойти в результате этого действия юзера?


 
KSergey ©   (2003-06-02 08:29) [11]

а) процедура всегда возвращает нередактируемый рекордсет.
б) А где же ответ на MOA (30.05.03 18:32)? Или попытавшись ответить поняли нашелся и ответ на основной вопрос? ;)


 
АлексейК   (2003-06-02 08:35) [12]

> KSergey © (02.06.03 08:29)
> а) процедура всегда возвращает нередактируемый рекордсет.
Процедура не всегда возвращает нередактируемый DataSet.



 
ЮЮ ©   (2003-06-02 09:53) [13]

>АлексейК (02.06.03 08:35)
>Процедура не всегда возвращает нередактируемый DataSet
Иногда она его вообще не возвращает :-)


 
Соловьев ©   (2003-06-02 10:01) [14]


> Нету вложеннных запросов, все на функциях...

а это что?


> SELECT SurfaceID FROM AgrBoards WHERE AgreementID IN
> (SELECT AgreementID FROM Agreements WHERE
>
> (((DateFrom <= CONVERT(datetime," + @Q + @DF
> + @Q + ", 104)) AND
>



 
jocko ©   (2003-06-02 10:18) [15]

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


 
Fiend ©   (2003-06-02 10:42) [16]

То DBDev:
помоему всё достаточно просто. Просто ADO не видит критерия уникальности записей, я так думаю. К тому же как бі ни біл сложен запрос, то отредактировать его на клиенте всегда можно, используя метод указанный jocko. Немного не так конечно, если хочется простоты, но рыть в том направлении


 
KSergey ©   (2003-06-02 11:13) [17]

> АлексейК (02.06.03 08:35)

Приношу извинения за то, что пытался ввести в заблуждение. И правда - даже из функций получается редактируемый.


 
jocko ©   (2003-06-02 13:40) [18]

2 Fiend >Немного не так конечно,
А как?



Страницы: 1 вся ветка

Текущий архив: 2003.06.26;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.032 c
1-84393
Rel_
2003-06-09 14:05
2003.06.26
кол-во своб. памяти


14-84710
Soft
2003-06-04 16:03
2003.06.26
Языки программирования


1-84126
Hooch
2003-06-10 13:26
2003.06.26
Вид приложения


14-84719
Mike B.
2003-06-05 14:48
2003.06.26
Правда об Ильиче


14-84713
dor
2003-06-05 14:41
2003.06.26
Господа,как из программы скачать определенный файл с инета