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

Вниз

NextRecordset(RecordsAffected). Что возвращает RecordsAffected?   Найти похожие ветки 

 
Bless ©   (2004-11-08 12:34) [0]

Цитата из MSDN:
RecordsAffected
Optional. A Long variable to which the provider returns the number of records that the current operation affected.

Note   This parameter only returns the number of records affected by an operation; it does not return a count of records from a select statement used to generate the Recordset.

Объясните, плз, разницу между

number of  records affected by an operation

и

count of records from a select statement used to generate the Recordset

Разве в случае select-а это не одно и те же?

А то при ADODataSet1.commandtext равном "select * from t1 select * from t2"
после строчки ADODataSet1.NextRecordset(i) у меня всегда i=-1.

Что, параметр RecordsAffected всегда равен -1 для select и будет отличным от -1 только для команд типа insert, update?

И еще
про метод NextRecordset написано, что он
Clears the current Recordset object and returns the next Recordset by advancing through a series of commands.

Как понимать слова Clears the current Recordset object?


 
sniknik ©   (2004-11-08 12:57) [1]

а если не селект, если инсерт? RecordsAffected вернет количество записей над которыми совершениа операция но рекордсет будет пустой, вот тебе и <>.

> А то при ADODataSet1.commandtext равном "select * from t1 select * from t2"
> после строчки ADODataSet1.NextRecordset(i) у меня всегда i=-1.
возможно это непровильно работает (что именно ADODataSet оставляет (?), возможно именно второй рекордсет)
я в таких случаях пользуюсь, примерно таким  

ADOCommand1.CommandText:= "select * from t1 select * from t2";
ADODataSet1.Recordset:= ADOCommand1.Execute(RecordsAffected, EmptyParam);
ADODataSet1.NextRecordset(RecordsAffected);

(на самом деле с промежуточным переменной рекордсет, но и так должно сработать, а так попроще)

> Как понимать слова Clears the current Recordset object?
прямо, старый рекордсет очишается когда на его место следующий приходит, нигде не сохраняется (одна из причин пользоваться промежуточным).


 
Bless ©   (2004-11-08 14:14) [2]

>прямо, старый рекордсет очишается когда на его место следующий
>приходит, нигде не сохраняется

cmd.CommandText:="select * from t1 select * from t1 where 1=0";
ADODataSet1.Recordset:=cmd.execute(recordsAffected, EmptyParam);
showmessage(inttostr(AdoDataset1.RecordCount));
ADODataSet1.NextRecordset(recordsAffected);
showmessage(inttostr(AdoDataset1.RecordCount));

В приведенном фрагменте на экран выскакивают два message-а:3 и 3 (число записей в t1 = 3). Хотя, если бы старый рекордсет очищался, то вторым message-ем очевидно должен бы быть 0.
А вот если заменить
ADODataSet1.NextRecordset(recordsAffected);
на
adodataset1.Recordset:=ADODataSet1.NextRecordset(recordsAffected);
то действительно выскакивает 3 и 0.
То есть выходит, что вызов метода NextRecordset реально старый рекордсет не чистит? Или где я ошибаюсь?


 
sniknik ©   (2004-11-08 14:28) [3]

> То есть выходит, что вызов метода NextRecordset реально старый рекордсет не чистит? Или где я ошибаюсь?
выходит так... ;о) а ошибка (сам тоже недоглядел), это же функция! стоит посмотреть на исходную реализацию  

function TCustomADODataSet.NextRecordset(
 var RecordsAffected: Integer): _Recordset;
var
 VarRecsAffected: OleVariant;
begin
 CheckBrowseMode;
 Result := RecordSet.NextRecordSet(VarRecsAffected);
 RecordsAffected := VarRecsAffected;
end;


чтобы понять в чем ошибка (второй вызов у тебя правильный)


 
Bless ©   (2004-11-08 15:39) [4]

>выходит так... ;о)
Аж от сердца отлегло :) А то я думал, у меня что-то криво растет.
А просмотр исходной реализации функции не помогает понять, в чем ошибка, имхо. Ведь внутри все-равно вызывается функция интерфейса (или как  это правильно называется) RecordSet.NextRecordSet.
И это именно про него в MSDN написано
Clears the current Recordset object and returns the next Recordset by advancing through a series of commands.

Выходит, ошибка в MSDN.



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

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

Наверх




Память: 0.48 MB
Время: 0.05 c
1-1101297620
markers
2004-11-24 15:00
2004.12.05
Нитка.....


14-1100074668
Суслик
2004-11-10 11:17
2004.12.05
Где купить delphi6 со всеми сервис паками?


1-1100685907
Mishenka
2004-11-17 13:05
2004.12.05
NameValueSeparator в TStringList


1-1101126608
Frozzen
2004-11-22 15:30
2004.12.05
Как определить включает ли один регион другой


14-1100688195
blackman
2004-11-17 13:43
2004.12.05
25 января – Татьянин день