Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.03 c
3-83899
mic_2000
2003-05-29 12:00
2003.06.26
Вопросик по rFunc для Ib6


8-84449
Dunkan
2003-03-12 11:04
2003.06.26
как создать новый Wav файл и записать в него???


1-84439
Alexandr
2003-06-10 07:06
2003.06.26
компилятор


3-84032
Инна
2003-06-01 01:55
2003.06.26
FastReport


3-83894
DreamDesire
2003-06-03 10:32
2003.06.26
Master-Details в TClientDataSet: касадное удаление





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский