A new function ctdbSetFieldAsUTF16() has been added to c-treeDB API C API to enable applications to write data to Unicode field types.
CTDBRET ctdbSetFieldAsUTF16(CTHANDLE Handle, NINT FieldNbr, pWCHAR pValue);
ctdbSetFieldAsUTF16() puts a Unicode UTF-16 string in a Unicode field. If the underlying field type is not one of the Unicode field types, the UTF-16 string is converted to the appropriate type before the data is stored in the field. Handle is a record handle, FieldNbr is the field number and pValue is a pointer to a wide (UTF-16) string buffer. ctdbSetFieldAsUTF16() returns CTDBRET_OK on success.
Two new methods, SetFieldAsUTF16(), have been added to the CTRecord class to enable applications to write data to Unicode field types.
void CTRecord::SetFieldAsUTF16(NINT FieldNumber, pWCHAR value);
SetFieldAsUTF16() puts a Unicode UTF-16 string in a Unicode field. If the underlying field type is not one of the Unicode field types, the UTF-16 string is converted to the appropriate type before the data is stored in the field. FieldNbr is a number representing the field number and value is the wide (UTF-16) string buffer.
void CTRecord::SetFieldAsUTF16(const CTString& FieldName, pWCHAR value);
SetFieldAsUTF16() puts a Unicode UTF-16 string in a Unicode field. If the underlying field type is not one of the Unicode field types, the UTF-16 string is converted to the appropriate type before the data is stores in the field. FieldName is the field name and value is the wide (UTF-16) string buffer.
CTDBRET AddData(CTHANDLE hRecord, pTEXT str, NINT val)
{
CTDBRET eRet;
WCHAR WStr[32];
if ((eRet = ctdbClearRecord(hRecord)) != CTDBRET_OK)
{
printf("ctdbClearRecord failed with error %d", eRet);
goto Exit;
}
if ((eRet = (CTDBRET)ctdb_u8TOu16(str, WStr, sizeof(WStr))) != CTDBRET_OK)
{
printf("ctdb_u8TOu16 failed with error %d", eRet);
goto Exit;
}
if ((eRet = ctdbSetFieldAsUTF16(hRecord, 0, WStr)) != CTDBRET_OK)
{
printf("ctdbSetFieldAsUTF16 failed with error %d", eRet);
goto Exit;
}
if ((eRet = ctdbSetFieldAsSigned(hRecord, 1, (CTSIGNED)val)) != CTDBRET_OK)
{
printf("ctdbSetFieldAsSigned failed with error %d", eRet);
goto Exit;
}
if ((eRet = ctdbWriteRecord(hRecord)) != CTDBRET_OK)
{
printf("ctdbWriteRecord failed with error %d", eRet);
goto Exit;
}
Exit:
return eRet;
}