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

Вниз

Invalid variant type conversion при работе с рекордсетом   Найти похожие ветки 

 
Sergeyy ©   (2002-07-17 09:12) [0]

на форме - ADOConnection1 с подключением к Ораклу по OLE DB

var
rst:_recordset;
VarRstResult: Variant;
sSQL: string;
CurRow, CurCol:Integer;
begin
CurRow := 0;
sSQL := "select...";
rst := ADOConnection1.Execute(sSQL);
VarRstResult := VarArrayCreate([1, rst.RecordCount, 1, rst.Fields.Count], varVariant);
while (not rst.EOF) and (CurRow < 65536) do
begin
CurRow := CurRow + 1;
for CurCol := 1 to rst.Fields.Count do
rstResult[CurRow, CurCol] := rst.Fields[CurCol - 1].Value;
rst.MoveNext;
Application.ProcessMessages;
end;
rst.Close;
end;


Этот код в D5 работает на "ура". В D6 - при присвоении значения поля рекордсета элементу массива - ошибка "Invalid Variant Type conversion". Эта ошибка возникает при попытке обработать числовое поле или поле с датой. Строковые поля идут без проблем.

Кто-нить знает, как преодолеть?


 
kig ©   (2002-07-17 10:56) [1]

А попробуйте этим воспользоваться

"
GetRows Method
Retrieves multiple records of a Recordset object into an array.

Syntax
array = recordset.GetRows( Rows, Start, Fields )
Return Value
Returns a Variant whose value is a two-dimensional array.

Parameters
Rows
Optional. A GetRowsOptionEnum value that indicates the number of records to retrieve. The default is adGetRowsRest.
Start
Optional. A String value or Variant that evaluates to the bookmark for the record from which the GetRows operation should begin. You can also use a BookmarkEnum value.
Fields
Optional. A Variant that represents a single field name or ordinal position, or an array of field names or ordinal position numbers. ADO returns only the data in these fields.
"

А потом сравните в полученном массиве, как числовое поле там представлено и в соответствующим Fields[xx].Value


 
German Ivanov   (2002-07-19 04:58) [2]

Скорее всего у тебя одно из полей содержит NULL

Вот пример для ADODB.Recordset обходящий эту ситуацию.

var
v:variant;
fldname:string;
begin

...

v:=fromrs.Fields[fldname].Value;
if not(varType(v) in [varNull,varEmpty]) then begin
tors.Fields[fldname].Value:=v;
end;

...



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

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

Наверх




Память: 0.47 MB
Время: 0.01 c
14-24231
BlackGrin
2002-07-13 01:26
2002.08.08
Ищу иходник


4-24266
keymaster
2002-06-02 08:43
2002.08.08
Часовой пояс


7-24255
OK
2002-05-22 17:10
2002.08.08
Как узнать ассоцированные с неким расширением файлов проги


3-23874
Doctor
2002-07-17 10:33
2002.08.08
Помогите з отчетом 2


3-23859
Misa
2002-07-19 16:17
2002.08.08
ADO под XP