|
本帖最后由 wylton 于 2014-10-20 23:40 编辑
realThinClientSdk 的RTCMemDataset 转换TField会出现类型转换不了。特别像 mysql 的语句 id INT UNSIGNED NOT NULL AUTO_INCREMENT 产生的字段栏。
可以在rtcDB.pas 的第739行插入 'if val=ft_LongWord then val:=ft_integer;' ;
另一方法是修改lazarus 本身的DB.pas 文件,
在TField = class(TComponent)里头的protected部分
1.加入'function GetAsLongWord: LongWord; virtual;' 和'procedure SetAsLongWord(Value: LongWord); virtual;' 这两句。大概在340行左右.
2.替换TFieldType。
TFieldType = (ftUnknown, ftString, ftSmallint, ftInteger, ftWord, // 0..4
ftBoolean, ftFloat, ftCurrency, ftBCD, ftDate, ftTime, ftDateTime, // 5..11
ftBytes, ftVarBytes, ftAutoInc, ftBlob, ftMemo, ftGraphic, ftFmtMemo, // 12..18
ftParadoxOle, ftDBaseOle, ftTypedBinary, ftCursor, ftFixedChar, ftWideString, // 19..24
ftLargeint, ftADT, ftArray, ftReference, ftDataSet, ftOraBlob, ftOraClob, // 25..31
ftVariant, ftInterface, ftIDispatch, ftGuid, ftTimeStamp, ftFMTBcd, // 32..37
ftFixedWideChar, ftWideMemo, ftOraTimeStamp, ftOraInterval, // 38..41
ftLongWord, ftShortint, ftByte, ftExtended, ftConnection, ftParams, ftStream, //42..48
ftTimeStampOffset, ftObject, ftSingle); //49..51
3.在fields.inc 中加如相关的事件。
第480行附近插入
function TField.GetAsLongWord: LongWord;
begin
raise AccessError('LongWord');
end;
第820行附近插入
procedure TField.SetAsLongWord(Value: LongWord);
begin
raise AccessError('LongWord');
end;
|
|