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