Cursors > Results Retrieval > Direct Access
 
Direct Access
To retrieve data, you can either:
*use the Rogue Wave DB Link API alone with type-related member functions,
*or bind the application memory space on output.
Rogue Wave DB Link data accessors are of the form IldRequest::getCol<type>Value where <type> can be one of the following Rogue Wave DB Link types:
*ADT
*Binary
*Byte
*Date
*DateTime
*Integer
*LongText
*Money
*Numeric
*Real
*Ref
*String
Here is an example:
{
// Selection of the data accessor.
if (request->isColNull(i))
ItemsArray[i]._buffer = "-";
else
switch (request->getColType(i)) {
case IldDateType:
ItemsArray[i]._buffer =
IldStrRTrim((char*)request->getColDateValue(i));
break;
case IldDateTimeType:
ItemsArray[i]._buffer =
IldDateTimeToString(request->getColDateTimeValue(i));
break;
case IldStringType:
ItemsArray[i]._mode = IldLeft;
ItemsArray[i]._buffer =
(char*)request->getPurgedStringValue(i);
break;
case IldLongTextType:
ItemsArray[i]._mode = IldLeft;
ItemsArray[i]._buffer =
IldStrRTrim((char*)request->getLongTextValue(i));
break;
case IldMoneyType: {
ItemsArray[i]._buffer = &BuffersArray[i * IldBufSize];
ostrstream ostr(&BuffersArray[i * IldBufSize],
(int)IldBufSize);
ostr << '$' << request->getMoneyValue(i) << ends;
break;
}
case IldRealType: {
ItemsArray[i]._buffer = &BuffersArray[i * IldBufSize];
ostrstream ostr(&BuffersArray[i * IldBufSize],
(int)IldBufSize);
ostr << request->getRealValue(i) << ends;
break;
}
case IldByteType: {
ItemsArray[i]._buffer = &BuffersArray[i * IldBufSize];
ostrstream ostr(&BuffersArray[i * IldBufSize],
IldBufSize);
ostr << (short)request->getByteValue(i) << ends;
break;
}
case IldIntegerType: {
ItemsArray[i]._buffer = &BuffersArray[i * IldBufSize];
ostrstream ostr(&BuffersArray[i * IldBufSize],
IldBufSize);
ostr << request->getIntegerValue(i) << ends;
break;
}
case IldBinaryType: {
ItemsArray[i]._buffer = "...";
break;
}
case IldUnknownType: {
ItemsArray[i]._buffer = "???";
break;
}
}
}
Also, you should keep in mind that:
*When the value is of type IldStringType, IldBinaryType, or IldLongTextType, it must be copied over to the memory allocated by your application because after the next call to IldRequest::fetch, the value will be undetermined.
*Values returned for columns of type IldDateTimeType or IldNumericType are automatically copied into the receiving object.
*Values returned for columns of type IldObjectType or IldCollectionType become the property of the application. Therefore, the application must delete them when they are no longer needed.

Version 5.8
Copyright © 2014, Rogue Wave Software, Inc. All Rights Reserved.