Subject | Re: [IBO] DML Caching |
---|---|
Author | Geoff Worboys |
Post date | 2001-08-29T15:06:26Z |
Martin,
You showed the exception happening in TIB_Row.GetColumnValue at:
for I := 0 to tmpColumns.Count - 1 do
Result[I] := TIB_Column( tmpColumns[I] ).AsVariant; <===ERROR
If you link with the VCL debug libraries, put a break point in and try
to step down into the code can you get any deeper than this? Just
trying to work out exactly what the callstack is to the actual point
of exception.
My best guess from looking at the code, is that the problem comes from
the fact that a compound key forces DMLCaching to use a variant array
rather than a simple variant. I suspect that we are probably seeing
some sort of limit in Delphi6s handling of int64s in this situation.
If my supposition is correct then some sort of work around will be
needed to handle this situation. If you could create a small demo
project of the problem that would make it easier to research in more
detail.
Since you have Delphi6 (I dont yet) - can you check out its online
help and see what (if anything) it says about variants, variant arrays
and support for int64. In Delphi4/5 there was a peculiar arrangement
to introduce a special type to handle int64 - the difficulty was that
the MS dlls could not recognise the type and generated errors like
what you are now seeing - however this was never documented and you
had to delve into the source code to discover what they were doing.
Not much help, but this sounds like a problem that may require some
work.
Geoff Worboys
Telesis Computing
You showed the exception happening in TIB_Row.GetColumnValue at:
for I := 0 to tmpColumns.Count - 1 do
Result[I] := TIB_Column( tmpColumns[I] ).AsVariant; <===ERROR
If you link with the VCL debug libraries, put a break point in and try
to step down into the code can you get any deeper than this? Just
trying to work out exactly what the callstack is to the actual point
of exception.
My best guess from looking at the code, is that the problem comes from
the fact that a compound key forces DMLCaching to use a variant array
rather than a simple variant. I suspect that we are probably seeing
some sort of limit in Delphi6s handling of int64s in this situation.
If my supposition is correct then some sort of work around will be
needed to handle this situation. If you could create a small demo
project of the problem that would make it easier to research in more
detail.
Since you have Delphi6 (I dont yet) - can you check out its online
help and see what (if anything) it says about variants, variant arrays
and support for int64. In Delphi4/5 there was a peculiar arrangement
to introduce a special type to handle int64 - the difficulty was that
the MS dlls could not recognise the type and generated errors like
what you are now seeing - however this was never documented and you
had to delve into the source code to discover what they were doing.
Not much help, but this sounds like a problem that may require some
work.
Geoff Worboys
Telesis Computing