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)