2014年6月26日星期四
2014年6月12日星期四
编译android的时候,出现E2606
写了程序,win32,ios都可以编译过了,编译android时,本来也是好好的,突然就出现了
[DCC Error] KmStatusCltMob.dpr(25): E2606 Duplicate resource: type VERSION ID 1
clean后再build仍然一样,打开res看看也没重复,奇怪了
[DCC Error] KmStatusCltMob.dpr(25): E2606 Duplicate resource: type VERSION ID 1
clean后再build仍然一样,打开res看看也没重复,奇怪了
2014年6月11日星期三
XE6的mobile开发到底走不走的通
进展的不顺,就回头看看到底走的方向是否正确。在开始选择方向时,就曾经反复查证,觉得是个好方向。现在想法有些变了。
一套代码,多个平台,多美好。为了实现这个,当时的比较过不少framework。基于html5的假跨平台的PhoneGap,改名后捐献给apache后叫Cordova或者Sencha,另外还有Kendo首先就排除了,嵌入浏览器形式的,还是少碰,速度应该是硬伤啊。titanium是基于js的,底层怎样走还不是很清楚,应该仍然是js的解析引擎解析后搞到本地api+本地封装的plugin api吧,也可以说是vm一种。xamarin是C#的,应该和FMX差不多了吧,可仔细看,好像也是基于vm的形式的运行的,也就是仍然call的是各自平台的api来做事,比如create a button。剩下的就FMX,真正的native,并且控件都是自己绘制,多牛。但这些想法,试着开发了这几天,才发现FMX的所谓native看起来是美妙的。
首先,速度真的那么重要吗,是否native是否真的重要吗,这有点像当年AMD说我才是真双核,Inter是假的。真假有那么重要吗,重要的是cpu真的比你快比你稳定。
第二,FMX的bug重重,用的人仍然非常少,我编译测试EMBT的自己的Sample,有些都过不去。
第三,FMX宣传的一个代码,多处使用,就连这个,也是个理想,各自平台的不同,仍然得让你准备不同的代码。
第四,EMBT的财力和人力,要死不活的状况仍然将持续很长时间,作为跟屁虫的Fans该怎么选择。EMBT目前还换汤不换药的推出了新产品AppMethod,唉,都学Adobe的CC思路了:只租不卖,穷疯了
的确是很泄气,不是Delphi的热爱者,我立刻就掉头xamarin了,因为抛出个人因素,xamarin我是更看好。如果我是一个编程初学者,xamarin应该是首选
迷茫ing...
看了这个,也得好好考虑到底“一套代码,多个平台”是否真的就是方向
最后,andorid的模拟器太慢了,可以加速的android的x86模拟器又不能用,调式iOS还得两台机器看来看去也麻烦,拜google,居然有提供租赁服务的
租赁Mac:http://www.macincloud.com
租赁Android:http://www.scirocco-cloud.com
一套代码,多个平台,多美好。为了实现这个,当时的比较过不少framework。基于html5的假跨平台的PhoneGap,改名后捐献给apache后叫Cordova或者Sencha,另外还有Kendo首先就排除了,嵌入浏览器形式的,还是少碰,速度应该是硬伤啊。titanium是基于js的,底层怎样走还不是很清楚,应该仍然是js的解析引擎解析后搞到本地api+本地封装的plugin api吧,也可以说是vm一种。xamarin是C#的,应该和FMX差不多了吧,可仔细看,好像也是基于vm的形式的运行的,也就是仍然call的是各自平台的api来做事,比如create a button。剩下的就FMX,真正的native,并且控件都是自己绘制,多牛。但这些想法,试着开发了这几天,才发现FMX的所谓native看起来是美妙的。
首先,速度真的那么重要吗,是否native是否真的重要吗,这有点像当年AMD说我才是真双核,Inter是假的。真假有那么重要吗,重要的是cpu真的比你快比你稳定。
第二,FMX的bug重重,用的人仍然非常少,我编译测试EMBT的自己的Sample,有些都过不去。
第三,FMX宣传的一个代码,多处使用,就连这个,也是个理想,各自平台的不同,仍然得让你准备不同的代码。
第四,EMBT的财力和人力,要死不活的状况仍然将持续很长时间,作为跟屁虫的Fans该怎么选择。EMBT目前还换汤不换药的推出了新产品AppMethod,唉,都学Adobe的CC思路了:只租不卖,穷疯了
的确是很泄气,不是Delphi的热爱者,我立刻就掉头xamarin了,因为抛出个人因素,xamarin我是更看好。如果我是一个编程初学者,xamarin应该是首选
迷茫ing...
看了这个,也得好好考虑到底“一套代码,多个平台”是否真的就是方向
最后,andorid的模拟器太慢了,可以加速的android的x86模拟器又不能用,调式iOS还得两台机器看来看去也麻烦,拜google,居然有提供租赁服务的
租赁Mac:http://www.macincloud.com
租赁Android:http://www.scirocco-cloud.com
2014年6月10日星期二
FireDac + DataSnap的mobile开发(二)
进展中,立刻又碰到另一个问题,SmartInspect是没法在iOS或者Android上面用的,那要怎样看debug log输出呢
翻来服务看帮助,可以用下面的方法来实现
翻来服务看帮助,可以用下面的方法来实现
procedure Log(format: String; params: array of const); var l: IFMXLoggingService; begin l := TPlatformServices.Current.GetPlatformService(IFMXLoggingService) as IFMXLoggingService; l.log(format, params); end; procedure TfrmLogin.btnOkClick(Sender: TObject); var UserName, Password: string; begin UserName := edtUserame.Text; Password := edtPassword.Text; if LogIn(UserName, Password) then //call ServerMethod begin Hide; frmMain.Show; end else begin Log('Wrong Password', []); ShowMessage('Wrong Password'); end; end;运行后,iOS上面,用 模拟器 的的查看系统system.log可以看到这个的输出。在Android上,用Android Debug Monitor的logcat可以看到输出。IFMXLoggingService接口目前就一个函数。背后实现估计仍然是call的NSLog和android.util.Log。UIKit的代码跟不进去,IDE上看不见是如何实现的。
FireDac + DataSnap的mobile开发(一)
扯了一些时间,应该进入正题了。一点也不顺利。
目标是,服务器用DataSnap Server来提供http的服务,客户端可以MsWin,可以iOS,可以Android(armv7)。写代码跑了,MsWin自然是没问题,Android的虚拟机太慢了,并且EMBT目前只支持arm架构的编译。iOS跑起来还行,但是问题 仍然多多。
首先遇到的问题就是FDConnection通过DataSnap Connector上服务器时,如果使用了Filter,根本上不来,直接报错【Loading SSL module faild】,原因是Indy使用的ssl库,IdSSLOpenSSLHeaders.pas在windows上面dll可以支持,到了iOS,沙盒里,没这个库,所以就挂了。
拜google,发现这个问题大家都遇到,后来看到了这个文章,才解决
目标是,服务器用DataSnap Server来提供http的服务,客户端可以MsWin,可以iOS,可以Android(armv7)。写代码跑了,MsWin自然是没问题,Android的虚拟机太慢了,并且EMBT目前只支持arm架构的编译。iOS跑起来还行,但是问题 仍然多多。
首先遇到的问题就是FDConnection通过DataSnap Connector上服务器时,如果使用了Filter,根本上不来,直接报错【Loading SSL module faild】,原因是Indy使用的ssl库,IdSSLOpenSSLHeaders.pas在windows上面dll可以支持,到了iOS,沙盒里,没这个库,所以就挂了。
拜google,发现这个问题大家都遇到,后来看到了这个文章,才解决
2014年6月6日星期五
在客戶端用FDConnection替代SQLConnection(二)
东摸西摸,算是搞出来了怎么使用,同时埋怨EMBT的文档质量。
在客户端用FDConnection替代SQLConnection后,用TFDStoredProc可以来访问服务器上返回DataSet的方法
服务端仍然是老代码
另外还发现的事情是,由于没走DBX,不设置DataSnapCompatibility=true,客户端也能正常显示数据,不会出现SBcdOverflow异常,FireDac的FireDAC.Comp.DataSet单元的TFDDataSet.AddFieldDesc函数里面,没有像TCustomSQLDataSet.AddFieldDesc去调整精度。另外虽然说没走dbExpress,但目前的DataSnap仍然大量用了dbx的很多unit。
在客户端用FDConnection替代SQLConnection后,用TFDStoredProc可以来访问服务器上返回DataSet的方法
服务端仍然是老代码
function TSmSample.GetTblImage: TDataSet; var Conn: TFDConnection; Query: TFDQuery; begin Conn := dmConn.AcquireConnection; Query := TFDQuery.Create(nil); try Query.Connection := Conn; Query.SQL.Text := 'SELECT * FROM tbl_image'; Query.Active := True; Query.FetchAll; Result := TFDMemTable.Create(nil); TFDMemTable(Result).Data := Query.Data; //will not trigger fetchall auto finally if Assigned(Query) then FreeAndNil(Query); dmConn.ReleaseConnection(Conn); end; end; procedure TSmSample2.Plus10(var I: Integer); begin log.TrackMethod('TSmSample2.Plus10'); I := I + 10; end;客户端,用FDConnection来搞就变成
procedure TForm1.Button5Click(Sender: TObject); begin FDStoredProc1.Close; FDStoredProc1.Unprepare; FDStoredProc1.StoredProcName := 'TSmSample.GetTblImage'; FDStoredProc1.Open; //ParamByName('ReturnValue') is ptResult, a DataSet with FDStoredProc1 do while not Eof do begin log.Debug('record:%s', [FieldByName('PId').AsString]); Next; end; FDStoredProc1.Close; FDStoredProc1.Close; FDStoredProc1.Unprepare; FDStoredProc1.StoredProcName := 'TSmSample2.Plus10'; FDStoredProc1.Prepare; FDStoredProc1.ParamByName('I').Value := 20; FDStoredProc1.ExecProc; ShowMessage(inttostr(FDStoredProc1.ParamByName('I').AsInteger)); //30 FDStoredProc1.Close; end;这个FDStoredProc有些像SQLConnection的SqlServerMethod,放到Form里后,点StoredProcName就访问服务器要meta信息建立下拉框了。
另外还发现的事情是,由于没走DBX,不设置DataSnapCompatibility=true,客户端也能正常显示数据,不会出现SBcdOverflow异常,FireDac的FireDAC.Comp.DataSet单元的TFDDataSet.AddFieldDesc函数里面,没有像TCustomSQLDataSet.AddFieldDesc去调整精度。另外虽然说没走dbExpress,但目前的DataSnap仍然大量用了dbx的很多unit。
在客戶端用FDConnection替代SQLConnection
今天突然留意到FireDac裡面有一個TFDPhysDSDriverLink,一查居然是DataSnap的缩写,莫非FireDac已经支持了DataSnap??莫非已经可以用FireDac的FDConnection来替代DBX的SQLConnection??是不是还是走Indy???? 有这个DataSnap的connector,但是我目前仍然没找到如何使用这个?莫非仍然开发中?如果已经可以替代SQLConnection了,那么就可以真的彻底抛弃DBX了
拜google,看到了這個,Dmitry Arefiev也明确表示了,FireDac的DataSnap Connector还是会用Indy。
拜google,看到了這個,Dmitry Arefiev也明确表示了,FireDac的DataSnap Connector还是会用Indy。
订阅:
博文 (Atom)