Direct Access

To retrieve data, you can either:

  • use the DB Link API alone with type-related member functions,

  • or bind the application memory space on output.

DB Link data accessors are of the form IldRequest::getCol<type>Value where <type> can be one of the following 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 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.