Delphi XE4 For IOS 之SQLite初试
关于SQLite的开发官方有给出一个简单的例子,该例子的地址是http://docwiki.embarcadero.com/RADStudio/XE4/en/IOS_Tutorial:_Using_SQLite_in_an_iOS_Application.
这个例子使用的dbExpress控件做数据库连接的。dbExpress这个说实在的不是很好用,本人也不太喜欢用这个。
于是乎本人改用了UniDac和FireDac重做了这个demo,其中FireDac下载地址是http://altd.embarcadero.com/download/radstudio/xe4/FireDAC_8.0.1.3279.exe ,UniDac可以在盒子里面找,这里就不提供了。
代码的话其实都是类似的,基本不用怎么去修改。换成这个两个控件遇到的问题是中文显示乱码的问题,要花费了不少时间,跟大家分享下经验,和交流下。还有就是现阶段的Sqlite文件都没有加密,加了密码这个两个数据控件是死活都连接不上。其中加密码FireDac其实有个办法能解决,这个控件自带加密的函数功能。但是,如果用它提供的函数加密的话,用的第三方管理工具是连接不上的,要连接上每次都要去掉密码的,很是麻烦,我用的第三方管理工具是SQLite Expert Professional 3和Navicat For Sqlite。建议建库还是用SQLite Expert Professional ,不然编码问题会莫名其妙的出来的。
按照官方那个demo创建好相应的数据库文件,建库的时候记住编码要选择UniCode,不然中文会显示成乱码的。就UniDac来说
UseUniCode选择选择True。还有里面涉及到字段操作的最后都用WideString类型的,不然还是会乱码。来个运行的图
对于FireDac来说设置StringFormat这个属性设置成UniCode,这个属性花了点时间去查找。然后就是字段的操作还是跟之前一样,要用widestring类型。
就里面添加按钮的代码是:
procedure TForm2.btnInsertClick(Sender: TObject); var ShopItem: String; begin try if InputQuery('Enter New ShopItem', 'ShopItem', ShopItem) and not (ShopItem.Trim = '') then begin ADQueryInsert.ParamByName('ShopItem').AsWideString := ShopItem; ADQueryInsert.ExecSQL(); ADTable1.Refresh; LinkFillControlToField1.BindList.FillList; end; except on e: Exception do begin SHowMessage(e.Message); end; end; end;
都用WideString类型问题就不是问题了。