![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Почему ХП возвращает ReadOnly рекордсет??? ПОМОГИТЕ ПЛЗ! [MSSQL]
DBDev © (2003-05-30 15:11:00)А результат выполнения запроса (т.е. TADOStoredProcedure) хочется редактировать...
Сама процедура:
CREATE PROCEDURE sp_boards_main
...
AS
BEGIN
DECLARE @query_text VARCHAR(3000)
SET @query_text = "SELECT ..."
EXEC(@query_text)
END
GO
jocko (2003-06-02 13:40:00) [1]2 Fiend >Немного не так конечно,
А как?
KSergey (2003-06-02 11:13:00) [2]> АлексейК (02.06.03 08:35)
Приношу извинения за то, что пытался ввести в заблуждение. И правда - даже из функций получается редактируемый.
Fiend (2003-06-02 10:42:00) [3]То DBDev:
помоему всё достаточно просто. Просто ADO не видит критерия уникальности записей, я так думаю. К тому же как бі ни біл сложен запрос, то отредактировать его на клиенте всегда можно, используя метод указанный jocko. Немного не так конечно, если хочется простоты, но рыть в том направлении
jocko (2003-06-02 10:18:00) [4]если используется ado и ltBatchOptimistic, а рекордсет надо редактировать, положим в гриде, то можно использовать промежуточную врем.таблицу (или табличную переменную) и окончательный селект делать из нее. Какой бы ни был запрос редактироваться будет.
Соловьев (2003-06-02 10:01:00) [5]
> Нету вложеннных запросов, все на функциях...
а это что?
> SELECT SurfaceID FROM AgrBoards WHERE AgreementID IN
> (SELECT AgreementID FROM Agreements WHERE
>
> (((DateFrom <= CONVERT(datetime," + @Q + @DF
> + @Q + ", 104)) AND
>
ЮЮ (2003-06-02 09:53:00) [6]>АлексейК (02.06.03 08:35)
>Процедура не всегдавозвращает нередактируемый DataSet
Иногда она его вообще не возвращает :-)
АлексейК (2003-06-02 08:35:00) [7]> KSergey © (02.06.03 08:29)
> а) процедура всегда возвращает нередактируемый рекордсет.
Процедура не всегдавозвращает нередактируемый DataSet.
KSergey (2003-06-02 08:29:00) [8]а) процедура всегда возвращает нередактируемый рекордсет.
б) А где же ответ на MOA (30.05.03 18:32)? Или попытавшись ответить поняли нашелся и ответ на основной вопрос? ;)
MOA (2003-05-30 18:32:00) [9]Предположим, рекордсет стал редактируемым. Юзер поменял поле Address, напрмер, не "ССадовая", а "Садовая". Что должно произойти в результате этого действия юзера?
DBDev (2003-05-30 18:17:00) [10]2 моа - ?
MOA (2003-05-30 17:36:00) [11]А какой ожидается результат редактирования, например, поля Adress?
Удачи!
DBDev (2003-05-30 17:25:00) [12]Нету вложеннных запросов, все на функциях... Должно редактироваться...
Соловьев (2003-05-30 15:53:00) [13]вложенные запросы
DBDev (2003-05-30 15:51:00) [14]Почему?
Соловьев (2003-05-30 15:41:00) [15]и ты хочешь потом это редактировать? не выйдет...
DBDev (2003-05-30 15:38:00) [16]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:29:00) [17]
> SET @query_text = "SELECT ..."
что там?
DBDev (2003-05-30 15:23:00) [18]???????