Главная страница
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.015 c
1-24018
maxim2
2002-07-28 18:10
2002.08.08
Как подключать файлы pas и dcu


1-23984
Sand
2002-07-25 07:15
2002.08.08
Инструментльная панель как в MS Office


3-23923
saxon
2002-07-15 19:23
2002.08.08
Stored Procedure In IB


3-23941
Sergeyy
2002-07-17 09:12
2002.08.08
Invalid variant type conversion при работе с рекордсетом


1-24009
Солер
2002-07-28 14:14
2002.08.08
Как записать в Label значение combobox