ã¿ãªããããã«ã¡ã¯ïŒ
ä»æ¥ã¯ã
Doctrineããã³Java EEãã©ã¯ãã£ã¹ã®åœ±é¿äžã§RTTIã䜿çšããŠDelphiã®ORMãäœæããç§ã®çµéšã«ã€ããŠèª¬æããŸãã
ãªãã§ïŒ
æè¿ãDelphi7ã®å€ããããžã§ã¯ããç§ã®æš©éã®äžã«èœã¡ãŸãããããã¯ãInterbase 2009ã®äžã§ããŒã¿ããŒã¹ãç©æ¥µçã«äœ¿çšããŠããŸãããã®ãããžã§ã¯ãã®ã³ãŒãã¯æ¥œãããã®ã§ããã ããŒã¿ã®ååŸãæŽæ°ãæ°ãããšã³ããªã®äœæãåé€-ãããã¯ãã¹ãŠãã¢ããªã±ãŒã·ã§ã³ããžãã¯ã®å€ãã®è¡ãå æããã³ãŒããç解ããããšãéåžžã«å°é£ã«ããŸããïŒæãã¯ã24æéç§ã®æããªè³ªåã«çããè¯å¿çãªéçºè
ã«ãããŸãïŒã ãããžã§ã¯ãã¯ãå€ããã©ãã«ãåãé€ããæ°ããã¢ãžã¥ãŒã«ãè¿œå ããããã«ç§ã«åŒãæž¡ãããŸããããã®ã¿ã¹ã¯ã¯ãæ°ããããŒã¿ããŒã¹ããŒãã«ãã«ããŒããããšã§ãã
ç§ã¯MVCã¢ãããŒãã奜ãã§ãã¢ãã«ã³ãŒããšããžãã¯ã³ãŒããå
±æãããã£ãã§ãã ãããŠãçŽç²ãã®ããã«-æ°ããããŒãã«ã®ãã¹ãŠã®get / setã¡ãœãããæžãçŽãããã¯ãããŸããã§ããã æ°å¹ŽåãORMã®æŠå¿µãç¥ãããã«ãªãããããæ°ã«å
¥ããŸããã ç§ã¯ãã®ååã奜ãã§ãä»äºã«ãããé©çšã§ããŠããããã£ãã§ãã
ãã®ç¬éãç§ã¯Delphi7ã§å°ãªããšãDoctrineã«äŒŒããã®ããŸãã¯ããŒãã«ã®Entity / Facadeã¯ã©ã¹ã®ãžã§ãã¬ãŒã¿ãŒãæ€çŽ¢ããããã«æ¥ãã§è¡ããŸãã...ã©ã¡ãã§ããããŸããã ããããæ€çŽ¢çµæã«ã¯ããã€ãã®æ¢æã®ãœãªã¥ãŒã·ã§ã³ããããŸããã ããšãã°ã
DORM ã äžè¬çã«ãçŽ æŽãããããšã§ãããå®éãå¿
èŠãªãã®ã§ãïŒ
ãããããããããªãã«èµ·ãããã©ããã¯ããããŸãããéåžžã«éãããæ©èœãå¿
èŠãªãããæ¢è£œã®ãœãªã¥ãŒã·ã§ã³ãæåŠããŸãããDORMãŸãã¯tiOPFã®ã³ã³ãã³ãå
šäœããã©ãã°ããå¿
èŠã¯ãããŸããã ç§ãæããã®ãå®çŸãããã¹ãŠã®æ¬ ç¹ãç解ããŠãç§ã¯ãã®æ»ããããæé¢ãåããå°éããããã§ã...
åå°
ORMã«å°ãªããšãããçšåºŠã®é¡äŒŒæ§ããªãããšã¯ãéŠã®çã¿ã§ãã ç§ã¯ããã«ã€ããŠè©±ããŠããŸã-Javaã§ã¯ãæ¢æã®ããŒã¿ããŒã¹ã䜿çšããŠãäœæããããšã³ãã£ãã£ãæäœããããã®äžé£ã®ãšã³ãã£ãã£ã¯ã©ã¹ãšãã¡ãµãŒããäœæã§ããŸãã ãããã®ã¯ã©ã¹ã®ç®çã¯ãç¹å®ã®ããŒã¿ããŒã¹ãšå¯Ÿè©±ããããã®æ¢è£œã®ããŒã«ãéçºè
ã«æäŸããã¯ãšãªããã¹ãããã¢ããªã±ãŒã·ã§ã³ããžãã¯ã®ã¡ã€ã³ã³ãŒããæ¶å»ããå®è¡çµæã解æããããšã§ãã åãããšãããã¹ãŠã®äžè¬çãªPHPãã¬ãŒã ã¯ãŒã¯ã§ãQtã§ïŒã¡ã¢ãªãããŸãæ©èœããŠããã°ïŒäœããã®åœ¢ã§äœ¿çšãããŠããŸãã
ãªããžã§ã¯ããããã³ã°çšã«é«å質ã®ã©ã€ãã©ãªãå®è£
ããIDEã«å«ããããšã®é£ããã¯äœã§ããïŒ ã¿ã¹ã¯ã¯ãããŒã¿ããŒã¹ã«æ¥ç¶ãããŠãŒã¶ãŒã«ã¢ããªã±ãŒã·ã§ã³ã§å¿
èŠãªããŒãã«ãå°ããããŒãã«ã®ãã£ãŒã«ããšããŒãã«éã®é¢ä¿ãïŒå€éšããŒã«ãã£ãŠïŒèªã¿ããã¹ãŠã®é¢ä¿ãæ£ããç解ããããã©ãããæ確ã«ããåéãããããŒã¿ããã¯ã©ã¹ãçæããŸãã çæãšã¯ãã€ãŸããäœããã®ããŒãã«ããã®1ã€ã®ã¬ã³ãŒãã®ãªããžããªãã¿ã¹ã¯ãšãããšã³ãã£ãã£ã¯ã©ã¹ã®äœæã§ãã ããŒãã«ã®ååããããã°ããã®ãã¹ãŠã®ãã£ãŒã«ãããã£ãŒã«ãã¿ã€ãã確èªãããã®æ
å ±ããå¿
èŠãªæ
å ±ã宣èšããå
¬éãããã»ã¯ã·ã§ã³ãçæããå¿
èŠãªã»ãã¿ãŒãšã²ãã¿ãŒãè¿œå ããŸã...äžè¬ã«ãã¿ã¹ã¯ã¯æéãããããŸãããå®çŸå¯èœã§ãã
ãšã³ãã£ãã£ãŒã¯ã©ã¹ãçæããåŸãIDEã¯ãã¡ãµãŒãã¯ã©ã¹ïŒãŸãã¯ãããããã¢ããã¿ãŒãšåŒã¶ïŒã®çæãéå§ã§ããŸãã ã¢ããã¿ãŒã¯ãããã°ã©ããŒãšããŒã¿ããŒã¹ã®éã®ã¬ã€ã€ãŒã§ããããã®äž»ãªã¿ã¹ã¯ã¯ãç¹å®ã®ããŒã«å¯Ÿå¿ãããšã³ãã£ãã£ãåä¿¡ãããã®ããŒã®å€æŽãä¿åããåé€ã§ããããã«ããããšã§ãã äžè¬ã«ãã¢ããã¿ã®æ¬è³ªã¯ãããŒã¿ããŒã¹ãæäœããããã®éçºè
ã¡ãœãããæ瀺ããããšã§ããããã®çµæã¯ããããã«å¯Ÿå¿ãããšã³ãã£ãã£ã®ãªããžã§ã¯ãã®åœ¢åŒã§æ瀺ãããŸãã
Delphiã§ã®éçºã®ãã®åŽé¢ã¯å¥œãã§ã¯ãããŸããã§ããã 圌ãšã®ç§ã®çµéšã¯ãã§ã«æ¯èŒç倧ããããã®å°é£ãªåé¡ã«ã¯å€ãã®å©ç¹ããããŸãããæ°ããèšèªãç°å¢ã«ã€ããŠåŠã¹ã°åŠã¶ã»ã©ãDelphiã¯é©åã§ã¯ããããå°é£ã§å°é£ãªãšãã«å¿
èŠãªã¬ãã«ã«éããªãããŒã«ã§ãããšæããŠããŸããç§ã¯ããã»ã©å€ãã®æéãè²»ããå¿
èŠã¯ãããŸããã
ãšã³ãã£ãã£ã®çæãããŒããŒã®è©ã«ç§»ãæºåãã§ããŠããŸãã ããããã誰ãããããCastaliaãšããŠIDEèªäœã«åã蟌ãããšããã§ããã§ãããã ãããããµã³ããªã³ã°ãæŽæ°ãåé€ã®ã¡ãœããããšã³ãã£ãã£ããšã«åå¥ã«èšè¿°ããçç±ã¯ãããŸããã ããããªã findAllã¡ãœãããåŒã³åºããŠç®çã®ããŒãã«ãããã¹ãŠã®ã¬ã³ãŒããååŸãããšã³ãã£ãã£ã®ååãæž¡ãã¯ã©ã¹ãå¿
èŠã§ãã ãŸãã¯ãfindïŒ5ïŒãæžã蟌ã¿ãæ°åããŒ5ã§ã¬ã³ãŒããååŸããŸãã
ããã»ã¹
TUAdapterã¯ã©ã¹ãéçºããŠããŸãã
çµæãšããŠã¢ããã¿ãŒãã§ããããšïŒ
- ã¯ã©ã¹åã§ãªããžã§ã¯ããäœæããŸãã
- ã¯ã©ã¹ãã£ãŒã«ããåä¿¡ã§ãã
- ãã£ãŒã«ãåã§ãªããžã§ã¯ããã£ãŒã«ãã®å€ãååŸã§ãã
- ãã¹ãŠã®ããŒã¿ããµã³ããªã³ã°ã§ãã
- ããŒã§ãšã³ãã£ãã£ãååŸã§ããŸã
- ããŒã¿ããŒã¹å
ã®ãšã³ãã£ãã£ããŒã¿ãæŽæ°ã§ãã
- ããŒã¿ããŒã¹ãããšã³ãã£ãã£ãåé€ã§ãã
- ããŒã¿ããŒã¹ããæ°ãããšã³ãã£ãã£ãè¿œå ã§ããŸãã
ç§ã®å¶éïŒ
- PDOãªã-1ã€ã®ããŒã¿ããŒã¹ã®éçº-Interbase
- Delphi7ã«ã¯ããŸã å€ãããŒãžã§ã³ã®RTTIããããŸãã ïŒRad 2010 RTTIã¯å€§å¹
ã«æ¹åãããŸããïŒã å
¬éããããã£ãŒã«ãã®ã¿ãååŸã§ããŸã
- é¢ä¿ããã³é¢ä¿ã«ãããšã³ãã£ãã£ã®ååŸïŒå
éšçãªçç±ã«ããïŒã¯å®çŸãããŸããã
0.æœè±¡ã¯ã©ã¹TUEntity-ãã¹ãŠã®ãšã³ãã£ãã£ã®èŠª
TPersistentãç¶æ¿ããå¿
èŠããããŸããç¶æ¿ããªããšãRTTIãå®å
šã«é©çšã§ããŸããã ãã®äžã§ããšã³ãã£ãã£ã®ã€ã³ã¿ãŒãã§ãŒã¹ã調æŽããŸãã ã¢ããã¿ã¯ãäœæ¥äžã«ãšã³ãã£ãã£ã«å¯Ÿå¿ããããŒãã«ã®ååãèŠæ±ããæ€çŽ¢ãè¡ãããããŒãã£ãŒã«ãã®ååããã®ãã£ãŒã«ãã®å€ãããã³ãšã³ãã£ãã£ã®æååè¡šçŸã®ã¡ãœããïŒããšãã°ããã°ïŒãæäŸããŸãã
ã³ãŒãã TuentityTUEntity = class (TPersistent) function getKey():integer; virtual; abstract; function getKeyName() : AnsiString; virtual; abstract; function toString(): AnsiString; virtual; abstract; function getTableName(): AnsiString; virtual; abstract; function getKeyGenerator():AnsiString; virtual; abstract; end;
1.ååã§ãªããžã§ã¯ããäœæãã
ãšã³ãã£ãã£ã¯TPersistentã¯ã©ã¹ããç¶æ¿ãããããšã¯æ¢ã«ç€ºããŸãããããšã³ãã£ãã£ãååã§äœæããã«ã¯ãå¿
èŠãªãã¹ãŠã®ãšã³ãã£ãã£ã®ã¯ã©ã¹ãç»é²ããããã«æ³šæããå¿
èŠããããŸãã ããã¯ãæåã®è¡ã®TUAdapter.CreateïŒïŒã³ã³ã¹ãã©ã¯ã¿ãŒã§è¡ããŸãã
ã³ãŒãã TUAdapter.Create constructor TUAdapter.Create(db : TDBase; entityName : AnsiString); begin RegisterClasses([TUObject, TUGroup, TUSource, TUFile]); self.db := db; self.entityName := 'TU' + entityName; uEntityObj := CreateEntity(); self.tblName := uEntityObj.getTableName; self.fieldsSql := getFields(); end;
äœææ¹æ³èªäœã¯æ¬¡ã®ããã«ãªããŸãã ãšã³ãã£ãã£åã«åŒæ°ãæž¡ããªãã®ã¯ãªãã§ããïŒ ã¿ã¹ã¯ã®ã³ã³ããã¹ãã«ãããããäœæ¥ã®éçšã§ãªããžã§ã¯ããè¿œå ã§äœæããããšã³ãã£ãã£ã®ååã¯åžžã«åããŸãŸã§ããããããããè¡ãæå³ãããããŸãããã¢ããã¿ã®äœææã«éä¿¡ãããŸã
ã³ãŒãã ååã§ãšã³ãã£ãã£ãäœæãã function TUAdapter.CreateEntity(): TUEntity; begin result := TUEntity(GetClass(self.entityName).Create); end;
2.ã¯ã©ã¹ãã£ãŒã«ãã®ååŸ
ããã¯ãDelphiã®éçºè
ããããèããã質åã ãšæããŸãã äž»ãªãæ©èœãã¯ãå¿
èŠãªãã¹ãŠã®ãã£ãŒã«ããååŸããããšã¯ã§ãããå
¬éãããã»ã¯ã·ã§ã³ã®ããããã£ãã£ãŒã«ãã®ã¿ãååŸããããšã§ãã å®éãããã¯éåžžã«åªããŠããŸããã¿ã¹ã¯ã§ããããã£ã䜿çšãããšéåžžã«äŸ¿å©ã ããã§ãã
ã³ãŒãã ã¯ã©ã¹ãã£ãŒã«ãã®ååŸ procedure TUAdapter.getProps(var list: TStringList); var props : PPropList; i: integer; propCount : integer; begin if (uEntityObj.ClassInfo = nil) then begin raise Exception.Create('Not able to get properties!'); end; try propCount := GetPropList(uEntityObj.ClassInfo, props); for i:=0 to propCount-1 do begin list.Add(props[i].Name); end; finally FreeMem(props); end; end;
3.ãã£ãŒã«ãåã«ãããªããžã§ã¯ããã£ãŒã«ãã®å€ã®ååŸ
ãããè¡ãã«ã¯ãGetPropValueã¡ãœããã䜿çšã§ããŸãã PreferStringsãã©ã¡ãŒã¿ãŒã«ã€ããŠèª¬æããŸã-tkEnumerationããã³tkSetã¿ã€ãã®ãã£ãŒã«ãã®çµæãã©ã®ããã«è¿ããããã«åœ±é¿ããŸãã Trueã®å Žåãenumã¯tkEnumerationããè¿ãããSetPropã¯tkSetããè¿ãããŸãã
(Instance: TObject; const PropName: string; PreferStrings: Boolean): Variant;.
ã³ãŒãã GetPropValueã䜿çšãã VarToStr(GetPropValue(uEntityObj, props.Strings[i], propName, true)
4,5,6 ...ããŒã¿ããŒã¹ã®æäœ
ç§ã¯ãã³ãŒãå
šäœãåŒçšããã®ã¯æªã圢ã ãšæããŸãïŒãããŠèšäºã®æåŸã®äœçœ®ïŒã ãããŠãããã§ã¯ããã¹ãŠã®ããŒã¿ãéžæããããã®èŠæ±ã®åœ¢æã®äŸã«ã€ããŠãäžéšã®ã¿ã瀺ããŸãã
ããŒã¿ãµã³ããªã³ã°ã®å Žåãèªã¿åããã©ã³ã¶ã¯ã·ã§ã³ãçæãããèŠæ±ãäœæãããŸãã ã¯ãšãªãšãã©ã³ã¶ã¯ã·ã§ã³ããã€ã³ãããããããå®è¡ããŠTIbSQLã®ãã¹ãŠã®å€ãååŸããŸãã TIbSQL.EoFãšTIbSQLã䜿çšããŠã次ã«ãã¹ãŠã®ã¬ã³ãŒããå埩åŠçã§ããŸããæ°ãããšã³ãã£ãã£ã®äœæãé
åãžã®é
眮ããã£ãŒã«ããžã®å
¥åã亀äºã«è¡ããŸãã
ã³ãŒãã TUAdapter.FindAllã¡ãœãã function TUAdapter.FindAll(): TEntityArray; var rTr : TIBTransaction; rSQL : TIbSQL; props: TStringList; i, k: integer; rowsCount : integer; begin db.CreateReadTransaction(rTr); rSql := TIbSQL.Create(nil); props := TStringList.Create(); try rSql.Transaction := rTr; rSQL.SQL.Add('SELECT ' + fieldsSql + ' FROM '+ tblName); if not rSql.Transaction.Active then rSQL.Transaction.StartTransaction; rSQL.Prepare; rSQl.ExecQuery; rowsCount := getRowsCount(); SetLength(result, rowsCount); getProps(props); i := 0; while not rSQl.Eof do begin result[i] := CreateEntity(); for k:=0 to props.Count-1 do begin if (not VarIsNull(rSql.FieldByName(props.Strings[k]).AsVariant)) then SetPropValue(result[i], props.Strings[k], rSql.FieldByName(props.Strings[k]).AsVariant); end; inc(i); rSql.Next; end; finally props.Destroy; rTr.Destroy; rSQL.Destroy; end; end;
ä»ã®åé¡ã§ã¯ãããã€ãã®å°é£ã«èšåããããšãå¿ããªãã§ãããã ãŸãããšã³ã³ãŒãã£ã³ã°ã ããŒã¿ããŒã¹ãWIN1251ãšã³ã³ãŒãã£ã³ã°ã§äœæãããç
§åãã€ã³ã¹ããŒã«ãããwin1251ã䜿çšããŠãããDelphiãããã®ããŒã¿ããŒã¹ãæäœããå¿
èŠãããå Žåãããªã«æåãå«ããšã³ããªãååŸããŠè¿œå ããããšã¯ã§ããŸããã ãã®å Žåããªã³ã¯
IBase.ru Rus FAQã®æ
å ±ããèªã¿
ãã ãã ã ãã®åŸã圌ãã¯ããªãã«æãããã¹ãŠã®èœãšãç©Žã«æãçªãã§ãããã
ç§ãèªãã ãã®ã®ç§ã®éèšã¯ã次ã®äžé£ã®ã¢ã¯ã·ã§ã³ã®ããã«èŠããŸãã
- Borland Shared \ BDE \ãã©ã«ãããbdeAdmin.exeãå®è¡ããŸã
- [æ§æ]-> [ã·ã¹ãã ]-> [åæå]ã§ããã©ã«ãã®ãã©ã€ããŒParadoxãéžæããLangdriver = Pdox Ansi Cyrrilic
- [æ§æ]-> [ãã©ã€ããŒ]-> [ãã€ãã£ã]ã§ãLangdriver = Pdox Ansi Cyrrilicããã©ã€ããŒã«è¿œå ããŸããMicrosfotParadoxãã©ã€ããŒãInterbaseãžã®Data Direct ODBCãMicrosoft dBaseãã©ã€ããŒã
- [é©çš]ãã¯ãªãã¯ããŠããªããžã§ã¯ãã®ã¡ã€ã³ã¡ãã¥ãŒã®å€æŽãããèŠçŽ ã«æ®ããå€æŽãä¿åããŸãã
ãã®äžé£ã®ã¢ã¯ã·ã§ã³ã¯ãæŽæ°ãŸãã¯æ¿å
¥ã®ãªã¯ãšã¹ãã«åé¡ããªãããã«ããã®ã«åœ¹ç«ã¡ãŸãã ïŒããã³Selectã§ã¯ãããªã«æåã«åé¡ã¯ãããŸããïŒã
å Žåã«ãã£ãŠã¯ã代ããã«æ¬¡ã®ããšã圹ç«ã¡ãŸãã
UPDATE tablename SET field = '';
æžãïŒ
UPDATE tablename SET field = _win1251'';
ãã ããTIbSQLã¯_win1251é¢æ°ã«ç²ŸéããŠããªãããããã©ã¡ãŒã¿ãŒä»ãã®ã¯ãšãªã䜿çšããå Žåãããã¯æ©èœããŸããã
ããšãã°ããã®ãããªã³ãŒãã¯æ©èœãããäŸå€ãã¹ããŒããŸãã
IbSQL.SQL.Add("UPDATE tablename SET field = _win1251 :field"); IbSQL.Prepare();
ãŸããäžèšã®4ã€ã®ã¹ããããå®äºããåŸã_win1251ã䜿çšããå¿
èŠã¯ãªãããªã¯ãšã¹ããèªç±ã«è¡ãããšãã§ããŸãã ç§ã¯æ°ã¥ããã«ãé£ããéãéžã³ãç¬ç«ããŠãªã¯ãšã¹ããäœæããããšã«ããŸããã ãã©ã¡ãŒã¿åãéä¿¡ããããã©ã¡ãŒã¿ã®ãã£ã«ã¿ãªã³ã°ã®è² æ
ã®äžéšãåŒãåããããšãèæ
®ããŸããã§ããã ã©ãããæå³ãåãããŸãããïŒ
ãã£ãŒã«ãã®ããã¹ãå€ã«åŒçšç¬ŠãŸãã¯æ¹è¡ããããšãåé¡ãçºçããŸããã ãããŠããããã®æåãæå¹ãªæåã«çœ®ãæããã¡ãœãããäœæããå¿
èŠããããŸããã
ã³ãŒãã TUAdapter.EscapeïŒïŒ function TUAdapter.StringReplaceExt(const S : string; OldPattern, NewPattern: array of string; Flags: TReplaceFlags):string; var i : integer; begin Assert(Length(OldPattern)=(Length(NewPattern))); Result:=S; for i:= Low(OldPattern) to High(OldPattern) do Result:=StringReplace(Result,OldPattern[i], NewPattern[i], Flags); end; function TUAdapter.escape(const unescaped_string : string ) : string; begin Result:=StringReplaceExt(unescaped_string, [ #39, #34, #0, #10, #13, #26], ['`','`','\0','\n','\r','\Z'] , [rfReplaceAll] ); end;
çµæ
äžè¬ã«ãEnitityã¯ã©ã¹ã®èŠä»¶ãéçºããŸããã
- ãã©ã€ããŒããã£ãŒã«ããèšè¿°ãã
- å
¬éãããã»ã¯ã·ã§ã³ã®ããããã£ãšããŠãããŒãã«ã®åã«å¯Ÿå¿ãããã£ãŒã«ããèšè¿°ããŸã
- ããããã£ã®ååã¯ã察å¿ããåã®ååãšäžèŽããå¿
èŠããããŸã
- å¿
èŠã«å¿ããŠããã£ãŒã«ãã®Get / Setã¡ãœãããå®è£
ããŸãïŒããŒã«å€ãTDateTimeãBlobãã£ãŒã«ãã®å ŽåïŒ
次ã®ããŒã¿ããŒã¹ããããšããŸããã

2ã€ã®Entityã¯ã©ã¹TUserãšTPostãäœæããŸãã
ã³ãŒãã TUserã¢ããŠã³ã¹ TUsersArray = Array of TUser; TUser = class(TUEntity) private f_id: longint; f_name : longint; f_password : AnsiString; f_email : AnsiString; f_last_login : TDateTime; f_rate: integer; published property id: integer read f_id write f_id; property name : AnsiString read f_name write f_name ; property password : AnsiString read f_password write f_password ; property email : AnsiString read f_email write f_email ; property last_login: AnsiString read getLastLogin write setLastLogin; property rate: integer read f_rate write f_rate; public constructor Create(); procedure setParams(id, rate: longint; name, password, email: AnsiString); procedure setLastLogin(datetime: AnsiString); function getLastLogin(): AnsiString; function getKey(): integer; override; function getKeyName(): AnsiString; override; function toString(): AnsiString; override; function getTableName(): AnsiString; override; function getKeyGenerator():AnsiString; override; end;
TPostãåãæ¹æ³ã§å®£èšãããŸãã
ãããŠãã¢ããã¿ãŒãšäžç·ã«ã³ãŒãã§äœ¿çšãããšã次ã®ããã«ãªããŸãã
var Adapter : TUAdapter; users: TUsersArray; i: integer; begin Adapter := TUAdapter.Create(db, 'User'); try users:= TUsersArray(Adapter.FindAll()); for i:=0 to Length(users) -1 do begin Grid.Cells[0, i+1] := VarToStr(users[i].id); Grid.Cells[1, i+1] := VarToStr(users[i].name); Grid.Cells[2, i+1] := VarToStr(users[i].email); Grid.Cells[3, i+1] := VarToStr(users[i].password); SetRateStars(i, VarToStr(users[i].rate)); Grid.Cells[5, i+1] := VarToStr(users[i].last_login); end; finally Adapter.Destroy; end; end;
çµè«
RTTIã䜿çšããŠã³ãŒãã®é床ã«çŠç¹ãåœãŠãããšæããŸãã RTTIã¡ãœãããé »ç¹ã«äœ¿çšãããšã¢ããªã±ãŒã·ã§ã³ã®é床ãäœäžããããšãçµéšäžç€ºåãããŠããŸãããå®éã«ã¯ãéçºãããã¯ã©ã¹ã®é床ã§ååã§ãã ç®æšã¯éæããããããæ©èœãã»ãšãã©ãªãORMããããŸãããããã«å²ãåœãŠãããã¿ã¹ã¯ã¯æ£çŽã«è§£æ±ºããŠããŸãã
BitBucketã®ãããžã§ã¯ãã
PS
ãã«ãã¡ã€ã«å¯ŸããåŠå®çãªèããåŒãèµ·ããåŸåãããèªè
ã¯ããã®ããšãå
šå¡ã«äŒããå¿
èŠã¯ãªãããšãæãåºãããŠãã ããã çãããã³ã³ãããŒã«ããŠãã ããã
ç³ãèš³ãããŸããããå®éã«ã¯äŸå€ãã¹ããŒããã®ã§ã¯ãªãããšã©ãŒæã«MessageBoxãåŒã³åºããŠããŸãã ããããç§ã¯èªåèªèº«ãä¿®æ£ããŸããç§ã¯çŽæããŸãã
UPDïŒ
ã³ãŒãå
ã«MessageBoxã¯ãããããŸããã