Главная страница
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.017 c
1-24014
eruc
2002-07-28 19:50
2002.08.08
---|Ветка была без названия|---


1-24077
Xomer
2002-07-26 12:25
2002.08.08
Как вытащить определенную строку из текста.


6-24153
Akni
2002-05-26 14:39
2002.08.08
Передача данных из одной программы в другую


14-24211
Igor_thief
2002-07-07 12:34
2002.08.08
Встраивание exe в exe


3-23913
PashketSiniz
2002-07-18 09:04
2002.08.08
Анатолию Подгоретскому