Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Почему ХП возвращает 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]

???????


Наверх

Титульная страница Поиск, карта сайта Написать письмо