123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600 |
- Unit tsamytable;
- {$mode objfpc}{$H+}
- Interface
- Uses Classes, SysUtils, db, fieldmap, sqldb;
- Const
- IID_MyTypeSafeAccess = '{1258E169-56C8-4846-8BAF-928C06B89487}';
- // Field names
- FLD_MyTypeSafeAccess_MyString = 'MyString';
- FLD_MyTypeSafeAccess_MyFixedChar = 'MyFixedChar';
- FLD_MyTypeSafeAccess_MyWideString = 'MyWideString';
- FLD_MyTypeSafeAccess_MyDateTime = 'MyDateTime';
- FLD_MyTypeSafeAccess_MyUnicodeString = 'MyUnicodeString';
- FLD_MyTypeSafeAccess_MyUTF8String = 'MyUTF8String';
- FLD_MyTypeSafeAccess_MyFixedWideString = 'MyFixedWideString';
- FLD_MyTypeSafeAccess_MyInteger = 'MyInteger';
- FLD_MyTypeSafeAccess_MyByteInteger = 'MyByteInteger';
- FLD_MyTypeSafeAccess_MySmallintInteger = 'MySmallintInteger';
- FLD_MyTypeSafeAccess_MyShortIntInteger = 'MyShortIntInteger';
- FLD_MyTypeSafeAccess_MyCardinalInteger = 'MyCardinalInteger';
- FLD_MyTypeSafeAccess_MyFloat = 'MyFloat';
- FLD_MyTypeSafeAccess_MyWord = 'MyWord';
- FLD_MyTypeSafeAccess_MyBoolean = 'MyBoolean';
- FLD_MyTypeSafeAccess_MyInt64 = 'MyInt64';
- FLD_MyTypeSafeAccess_MyQWordLargeInt = 'MyQWordLargeInt';
- FLD_MyTypeSafeAccess_MyBlob = 'MyBlob';
- SQLMyTypeSafeAccess =
- 'SELECT' + sLineBreak +
- 'MyString' + sLineBreak +
- ', MyFixedChar' + sLineBreak +
- ', MyWideString' + sLineBreak +
- ', MyDateTime' + sLineBreak +
- ', MyUnicodeString' + sLineBreak +
- ', MyUTF8String' + sLineBreak +
- ', MyFixedWideString' + sLineBreak +
- ', MyInteger' + sLineBreak +
- ', MyByteInteger' + sLineBreak +
- ', MySmallintInteger' + sLineBreak +
- ', MyShortIntInteger' + sLineBreak +
- ', MyCardinalInteger' + sLineBreak +
- ', MyFloat' + sLineBreak +
- ', MyWord' + sLineBreak +
- ', MyBoolean' + sLineBreak +
- ', MyInt64' + sLineBreak +
- ', MyQWordLargeInt' + sLineBreak +
- ', MyBlob' + sLineBreak +
- 'FROM MyTable';
- Type
- {$INLINE ON}
- { IMyTypeSafeAccess }
- IMyTypeSafeAccess = Interface(ITypeSafeDatasetAccess) [IID_MyTypeSafeAccess]
- Function GetMyString : AnsiString;
- Procedure SetMyString (aValue : AnsiString);
- Function GetMyFixedChar : AnsiString;
- Procedure SetMyFixedChar (aValue : AnsiString);
- Function GetMyWideString : WideString;
- Procedure SetMyWideString (aValue : WideString);
- Function GetMyDateTime : TDateTime;
- Procedure SetMyDateTime (aValue : TDateTime);
- Function GetMyUnicodeString : UnicodeString;
- Procedure SetMyUnicodeString (aValue : UnicodeString);
- Function GetMyUTF8String : Utf8String;
- Procedure SetMyUTF8String (aValue : Utf8String);
- Function GetMyFixedWideString : WideString;
- Procedure SetMyFixedWideString (aValue : WideString);
- Function GetMyInteger : Longint;
- Procedure SetMyInteger (aValue : Longint);
- Function GetMyByteInteger : Byte;
- Procedure SetMyByteInteger (aValue : Byte);
- Function GetMySmallintInteger : SmallInt;
- Procedure SetMySmallintInteger (aValue : SmallInt);
- Function GetMyShortIntInteger : ShortInt;
- Procedure SetMyShortIntInteger (aValue : ShortInt);
- Function GetMyCardinalInteger : Cardinal;
- Procedure SetMyCardinalInteger (aValue : Cardinal);
- Function GetMyFloat : Double;
- Procedure SetMyFloat (aValue : Double);
- Function GetMyWord : Word;
- Procedure SetMyWord (aValue : Word);
- Function GetMyBoolean : Boolean;
- Procedure SetMyBoolean (aValue : Boolean);
- Function GetMyInt64 : Int64;
- Procedure SetMyInt64 (aValue : Int64);
- Function GetMyQWordLargeInt : QWord;
- Procedure SetMyQWordLargeInt (aValue : QWord);
- Function GetMyBlob : TStream;
- Property MyString : AnsiString Read GetMyString Write SetMyString;
- Property MyFixedChar : AnsiString Read GetMyFixedChar Write SetMyFixedChar;
- Property MyWideString : WideString Read GetMyWideString Write SetMyWideString;
- Property MyDateTime : TDateTime Read GetMyDateTime Write SetMyDateTime;
- Property MyUnicodeString : UnicodeString Read GetMyUnicodeString Write SetMyUnicodeString;
- Property MyUTF8String : Utf8String Read GetMyUTF8String Write SetMyUTF8String;
- Property MyFixedWideString : WideString Read GetMyFixedWideString Write SetMyFixedWideString;
- Property MyInteger : Longint Read GetMyInteger Write SetMyInteger;
- Property MyByteInteger : Byte Read GetMyByteInteger Write SetMyByteInteger;
- Property MySmallintInteger : SmallInt Read GetMySmallintInteger Write SetMySmallintInteger;
- Property MyShortIntInteger : ShortInt Read GetMyShortIntInteger Write SetMyShortIntInteger;
- Property MyCardinalInteger : Cardinal Read GetMyCardinalInteger Write SetMyCardinalInteger;
- Property MyFloat : Double Read GetMyFloat Write SetMyFloat;
- Property MyWord : Word Read GetMyWord Write SetMyWord;
- Property MyBoolean : Boolean Read GetMyBoolean Write SetMyBoolean;
- Property MyInt64 : Int64 Read GetMyInt64 Write SetMyInt64;
- Property MyQWordLargeInt : QWord Read GetMyQWordLargeInt Write SetMyQWordLargeInt;
- Property MyBlob : TStream Read GetMyBlob;
- end;
- { TMyTypeSafeAccess }
- TMyTypeSafeAccess = Class(TTypeSafeDatasetAccess,IMyTypeSafeAccess)
- Private
- FBlobMyBlob : TBlobProxyStream;
- Procedure DoMyBlobChanged(Sender : TObject);
- Private
- Function GetMyString : AnsiString;
- Procedure SetMyString (AValue : AnsiString);
- Function GetMyFixedChar : AnsiString;
- Procedure SetMyFixedChar (AValue : AnsiString);
- Function GetMyWideString : WideString;
- Procedure SetMyWideString (AValue : WideString);
- Function GetMyDateTime : TDateTime;
- Procedure SetMyDateTime (AValue : TDateTime);
- Function GetMyUnicodeString : UnicodeString;
- Procedure SetMyUnicodeString (AValue : UnicodeString);
- Function GetMyUTF8String : Utf8String;
- Procedure SetMyUTF8String (AValue : Utf8String);
- Function GetMyFixedWideString : WideString;
- Procedure SetMyFixedWideString (AValue : WideString);
- Function GetMyInteger : Longint;
- Procedure SetMyInteger (AValue : Longint);
- Function GetMyByteInteger : Byte;
- Procedure SetMyByteInteger (AValue : Byte);
- Function GetMySmallintInteger : SmallInt;
- Procedure SetMySmallintInteger (AValue : SmallInt);
- Function GetMyShortIntInteger : ShortInt;
- Procedure SetMyShortIntInteger (AValue : ShortInt);
- Function GetMyCardinalInteger : Cardinal;
- Procedure SetMyCardinalInteger (AValue : Cardinal);
- Function GetMyFloat : Double;
- Procedure SetMyFloat (AValue : Double);
- Function GetMyWord : Word;
- Procedure SetMyWord (AValue : Word);
- Function GetMyBoolean : Boolean;
- Procedure SetMyBoolean (AValue : Boolean);
- Function GetMyInt64 : Int64;
- Procedure SetMyInt64 (AValue : Int64);
- Function GetMyQWordLargeInt : QWord;
- Procedure SetMyQWordLargeInt (AValue : QWord);
- Function GetMyBlob : TStream;
- Protected
- Class Function FieldMapClass : TFieldMapClass; override;
- Public
- Destructor Destroy; Override;
- Procedure ApplyUpdates; override;
- Class Function CreateQuery(aSQL : String; aConnection : TSQLConnection; aTransaction : TSQLTransaction) : TMyTypeSafeAccess; overload;
- Class Function CreateQuery(aConnection : TSQLConnection; aTransaction : TSQLTransaction) : TMyTypeSafeAccess; overload;
- Class Function GetQuery(aSQL : String; aConnection : TSQLConnection; aTransaction : TSQLTransaction) : IMyTypeSafeAccess; overload;
- Class Function GetQuery(aConnection : TSQLConnection; aTransaction : TSQLTransaction) : IMyTypeSafeAccess; overload;
- Published
- Property MyString : AnsiString Read GetMyString Write SetMyString;
- Property MyFixedChar : AnsiString Read GetMyFixedChar Write SetMyFixedChar;
- Property MyWideString : WideString Read GetMyWideString Write SetMyWideString;
- Property MyDateTime : TDateTime Read GetMyDateTime Write SetMyDateTime;
- Property MyUnicodeString : UnicodeString Read GetMyUnicodeString Write SetMyUnicodeString;
- Property MyUTF8String : Utf8String Read GetMyUTF8String Write SetMyUTF8String;
- Property MyFixedWideString : WideString Read GetMyFixedWideString Write SetMyFixedWideString;
- Property MyInteger : Longint Read GetMyInteger Write SetMyInteger;
- Property MyByteInteger : Byte Read GetMyByteInteger Write SetMyByteInteger;
- Property MySmallintInteger : SmallInt Read GetMySmallintInteger Write SetMySmallintInteger;
- Property MyShortIntInteger : ShortInt Read GetMyShortIntInteger Write SetMyShortIntInteger;
- Property MyCardinalInteger : Cardinal Read GetMyCardinalInteger Write SetMyCardinalInteger;
- Property MyFloat : Double Read GetMyFloat Write SetMyFloat;
- Property MyWord : Word Read GetMyWord Write SetMyWord;
- Property MyBoolean : Boolean Read GetMyBoolean Write SetMyBoolean;
- Property MyInt64 : Int64 Read GetMyInt64 Write SetMyInt64;
- Property MyQWordLargeInt : QWord Read GetMyQWordLargeInt Write SetMyQWordLargeInt;
- Property MyBlob : TStream Read GetMyBlob;
- end;
- Implementation
- Type
- { TMyFieldMap }
- TMyFieldMap = Class(TFieldMap)
- Private
- FMyString : TField;
- FMyFixedChar : TField;
- FMyWideString : TField;
- FMyDateTime : TField;
- FMyUnicodeString : TField;
- FMyUTF8String : TField;
- FMyFixedWideString : TField;
- FMyInteger : TField;
- FMyByteInteger : TField;
- FMySmallintInteger : TField;
- FMyShortIntInteger : TField;
- FMyCardinalInteger : TField;
- FMyFloat : TField;
- FMyWord : TField;
- FMyBoolean : TField;
- FMyInt64 : TField;
- FMyQWordLargeInt : TField;
- FMyBlob : TField;
- Public
- Procedure InitFields; Override;
- Property MyString : TField read FMyString;
- Property MyFixedChar : TField read FMyFixedChar;
- Property MyWideString : TField read FMyWideString;
- Property MyDateTime : TField read FMyDateTime;
- Property MyUnicodeString : TField read FMyUnicodeString;
- Property MyUTF8String : TField read FMyUTF8String;
- Property MyFixedWideString : TField read FMyFixedWideString;
- Property MyInteger : TField read FMyInteger;
- Property MyByteInteger : TField read FMyByteInteger;
- Property MySmallintInteger : TField read FMySmallintInteger;
- Property MyShortIntInteger : TField read FMyShortIntInteger;
- Property MyCardinalInteger : TField read FMyCardinalInteger;
- Property MyFloat : TField read FMyFloat;
- Property MyWord : TField read FMyWord;
- Property MyBoolean : TField read FMyBoolean;
- Property MyInt64 : TField read FMyInt64;
- Property MyQWordLargeInt : TField read FMyQWordLargeInt;
- Property MyBlob : TField read FMyBlob;
- end;
- { TMyTypeSafeAccess }
- { Constructor and destructor }
- Destructor TMyTypeSafeAccess.Destroy;
- begin
- FreeAndNil(FBlobMyBlob);
- Inherited;
- end;
- { Property Getters }
- Function TMyTypeSafeAccess.GetMyString : AnsiString;
- begin
- Result:=TMyFieldMap(FieldMap).MyString.AsAnsiString;
- end;
- Function TMyTypeSafeAccess.GetMyFixedChar : AnsiString;
- begin
- Result:=TMyFieldMap(FieldMap).MyFixedChar.AsAnsiString;
- end;
- Function TMyTypeSafeAccess.GetMyWideString : WideString;
- begin
- Result:=TMyFieldMap(FieldMap).MyWideString.AsWideString;
- end;
- Function TMyTypeSafeAccess.GetMyDateTime : TDateTime;
- begin
- Result:=TMyFieldMap(FieldMap).MyDateTime.AsDateTime;
- end;
- Function TMyTypeSafeAccess.GetMyUnicodeString : UnicodeString;
- begin
- Result:=TMyFieldMap(FieldMap).MyUnicodeString.AsUnicodeString;
- end;
- Function TMyTypeSafeAccess.GetMyUTF8String : Utf8String;
- begin
- Result:=TMyFieldMap(FieldMap).MyUTF8String.AsUtf8String;
- end;
- Function TMyTypeSafeAccess.GetMyFixedWideString : WideString;
- begin
- Result:=TMyFieldMap(FieldMap).MyFixedWideString.AsWideString;
- end;
- Function TMyTypeSafeAccess.GetMyInteger : Longint;
- begin
- Result:=TMyFieldMap(FieldMap).MyInteger.AsInteger;
- end;
- Function TMyTypeSafeAccess.GetMyByteInteger : Byte;
- begin
- Result:=TMyFieldMap(FieldMap).MyByteInteger.AsInteger;
- end;
- Function TMyTypeSafeAccess.GetMySmallintInteger : SmallInt;
- begin
- Result:=TMyFieldMap(FieldMap).MySmallintInteger.AsInteger;
- end;
- Function TMyTypeSafeAccess.GetMyShortIntInteger : ShortInt;
- begin
- Result:=TMyFieldMap(FieldMap).MyShortIntInteger.AsInteger;
- end;
- Function TMyTypeSafeAccess.GetMyCardinalInteger : Cardinal;
- begin
- Result:=TMyFieldMap(FieldMap).MyCardinalInteger.AsInteger;
- end;
- Function TMyTypeSafeAccess.GetMyFloat : Double;
- begin
- Result:=TMyFieldMap(FieldMap).MyFloat.AsFLoat;
- end;
- Function TMyTypeSafeAccess.GetMyWord : Word;
- begin
- Result:=TMyFieldMap(FieldMap).MyWord.AsInteger;
- end;
- Function TMyTypeSafeAccess.GetMyBoolean : Boolean;
- begin
- Result:=TMyFieldMap(FieldMap).MyBoolean.AsBoolean;
- end;
- Function TMyTypeSafeAccess.GetMyInt64 : Int64;
- begin
- Result:=TMyFieldMap(FieldMap).MyInt64.AsLargeInt;
- end;
- Function TMyTypeSafeAccess.GetMyQWordLargeInt : QWord;
- begin
- Result:=TMyFieldMap(FieldMap).MyQWordLargeInt.AsLargeInt;
- end;
- Procedure TMyTypeSafeAccess.DoMyBlobChanged(Sender : TObject);
- begin
- If Dataset.State in dsEditModes then
- TBlobField(TMyFieldMap(FieldMap).MyBlob).LoadFromStream(TStream(Sender));
- end;
- Function TMyTypeSafeAccess.GetMyBlob : TStream;
- begin
- if not Assigned(FBlobMyBlob) then
- begin
- FBlobMyBlob:=TBlobProxyStream.Create;
- FBlobMyBlob.OnChange:=@DoMyBlobChanged;
- end;
- FBlobMyBlob.Size:=0;
- FBlobMyBlob.Position:=0;
- if not FBlobMyBlob.Updating then
- begin
- TBlobField(TMyFieldMap(FieldMap).MyBlob).SaveToStream(FBlobMyBlob);
- FBlobMyBlob.Position:=0;
- end;
- Result:=FBlobMyBlob;
- end;
- { Property Setters }
- Procedure TMyTypeSafeAccess.SetMyString (AValue : AnsiString);
- begin
- TMyFieldMap(FieldMap).MyString.AsAnsiString:=aValue;
- end;
- Procedure TMyTypeSafeAccess.SetMyFixedChar (AValue : AnsiString);
- begin
- TMyFieldMap(FieldMap).MyFixedChar.AsAnsiString:=aValue;
- end;
- Procedure TMyTypeSafeAccess.SetMyWideString (AValue : WideString);
- begin
- TMyFieldMap(FieldMap).MyWideString.AsWideString:=aValue;
- end;
- Procedure TMyTypeSafeAccess.SetMyDateTime (AValue : TDateTime);
- begin
- TMyFieldMap(FieldMap).MyDateTime.AsDateTime:=aValue;
- end;
- Procedure TMyTypeSafeAccess.SetMyUnicodeString (AValue : UnicodeString);
- begin
- TMyFieldMap(FieldMap).MyUnicodeString.AsUnicodeString:=aValue;
- end;
- Procedure TMyTypeSafeAccess.SetMyUTF8String (AValue : Utf8String);
- begin
- TMyFieldMap(FieldMap).MyUTF8String.AsUtf8String:=aValue;
- end;
- Procedure TMyTypeSafeAccess.SetMyFixedWideString (AValue : WideString);
- begin
- TMyFieldMap(FieldMap).MyFixedWideString.AsWideString:=aValue;
- end;
- Procedure TMyTypeSafeAccess.SetMyInteger (AValue : Longint);
- begin
- TMyFieldMap(FieldMap).MyInteger.AsInteger:=aValue;
- end;
- Procedure TMyTypeSafeAccess.SetMyByteInteger (AValue : Byte);
- begin
- TMyFieldMap(FieldMap).MyByteInteger.AsInteger:=aValue;
- end;
- Procedure TMyTypeSafeAccess.SetMySmallintInteger (AValue : SmallInt);
- begin
- TMyFieldMap(FieldMap).MySmallintInteger.AsInteger:=aValue;
- end;
- Procedure TMyTypeSafeAccess.SetMyShortIntInteger (AValue : ShortInt);
- begin
- TMyFieldMap(FieldMap).MyShortIntInteger.AsInteger:=aValue;
- end;
- Procedure TMyTypeSafeAccess.SetMyCardinalInteger (AValue : Cardinal);
- begin
- TMyFieldMap(FieldMap).MyCardinalInteger.AsInteger:=aValue;
- end;
- Procedure TMyTypeSafeAccess.SetMyFloat (AValue : Double);
- begin
- TMyFieldMap(FieldMap).MyFloat.AsFLoat:=aValue;
- end;
- Procedure TMyTypeSafeAccess.SetMyWord (AValue : Word);
- begin
- TMyFieldMap(FieldMap).MyWord.AsInteger:=aValue;
- end;
- Procedure TMyTypeSafeAccess.SetMyBoolean (AValue : Boolean);
- begin
- TMyFieldMap(FieldMap).MyBoolean.AsBoolean:=aValue;
- end;
- Procedure TMyTypeSafeAccess.SetMyInt64 (AValue : Int64);
- begin
- TMyFieldMap(FieldMap).MyInt64.AsLargeInt:=aValue;
- end;
- Procedure TMyTypeSafeAccess.SetMyQWordLargeInt (AValue : QWord);
- begin
- TMyFieldMap(FieldMap).MyQWordLargeInt.AsLargeInt:=aValue;
- end;
- Class Function TMyTypeSafeAccess.FieldMapClass : TFieldMapClass;
- begin
- Result:=TMyFieldMap;
- end;
- { TMyFieldMap }
- Procedure TMyFieldMap.InitFields;
- begin
- FMyString:=FieldByName('MyString');
- FMyFixedChar:=FieldByName('MyFixedChar');
- FMyWideString:=FieldByName('MyWideString');
- FMyDateTime:=FieldByName('MyDateTime');
- FMyUnicodeString:=FieldByName('MyUnicodeString');
- FMyUTF8String:=FieldByName('MyUTF8String');
- FMyFixedWideString:=FieldByName('MyFixedWideString');
- FMyInteger:=FieldByName('MyInteger');
- FMyByteInteger:=FieldByName('MyByteInteger');
- FMySmallintInteger:=FieldByName('MySmallintInteger');
- FMyShortIntInteger:=FieldByName('MyShortIntInteger');
- FMyCardinalInteger:=FieldByName('MyCardinalInteger');
- FMyFloat:=FieldByName('MyFloat');
- FMyWord:=FieldByName('MyWord');
- FMyBoolean:=FieldByName('MyBoolean');
- FMyInt64:=FieldByName('MyInt64');
- FMyQWordLargeInt:=FieldByName('MyQWordLargeInt');
- FMyBlob:=FieldByName('MyBlob');
- end;
- Class Function TMyTypeSafeAccess.CreateQuery(aConnection : TSQLConnection; aTransaction : TSQLTransaction) : TMyTypeSafeAccess;
- begin
- Result:=CreateQuery(SQLMyTypeSafeAccess,aConnection,aTransaction);
- end;
- Class Function TMyTypeSafeAccess.CreateQuery(aSQL : String; aConnection : TSQLConnection; aTransaction : TSQLTransaction) : TMyTypeSafeAccess;
- Var
- Q : TSQLQuery;
- MySQL : String;
- begin
- If aSQL='' then
- MySQL:=SQLMyTypeSafeAccess
- else
- MySQL:=aSQL;
- Q:=TSQLQuery.Create(aConnection);
- If aTransaction<>Nil then
- Q.Transaction:=aTransaction;
- Q.Database:=aConnection;
- Q.SQL.Text:=MySQL;
- Result:=TMyTypeSafeAccess.Create(Q,True);
- end;
- Class Function TMyTypeSafeAccess.GetQuery(aConnection : TSQLConnection; aTransaction : TSQLTransaction) : IMyTypeSafeAccess;
- begin
- Result:=CreateQuery(aConnection,aTransaction);
- end;
- Class Function TMyTypeSafeAccess.GetQuery(aSQL : String; aConnection : TSQLConnection; aTransaction : TSQLTransaction) : IMyTypeSafeAccess;
- begin
- Result:=CreateQuery(aSQL,aConnection,aTransaction);
- end;
- Procedure TMyTypeSafeAccess.ApplyUpdates;
- begin
- If Dataset is TSQLQuery then
- (Dataset as TSQLQuery).ApplyUpdates;
- end;
- end.
|