Форум: "Базы";
Текущий архив: 2003.06.26;
Скачать: [xml.tar.bz2];
ВнизПочему ХП возвращает 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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.025 c