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来说

image     image

UseUniCode选择选择True。还有里面涉及到字段操作的最后都用WideString类型的,不然还是会乱码。来个运行的图

image

对于FireDac来说设置StringFormat这个属性设置成UniCode,这个属性花了点时间去查找。然后就是字段的操作还是跟之前一样,要用widestring类型。

imageimage

就里面添加按钮的代码是:

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类型问题就不是问题了。

posted @ 2013-05-13 17:12  CookBlack  阅读(1486)  评论(5编辑  收藏  举报


作者:CookBlack
出处:http://www.cnblogs.com/CookBlack/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。