全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2110
推到 Plurk!
推到 Facebook!

xe10的第四個問題

缺席
P.D.
版主


發表:571
回覆:3884
積分:3672
註冊:2006-10-31

發送簡訊給我
#1 引用回覆 回覆 發表時間:2015-09-20 12:35:29 IP:118.160.xxx.xxx 未訂閱
前三個已在網友互動區發過, 這個問題比較大
以下是我查到問題點的地方,
這段程式作用是由手機向後端datasnap 探尋主機的存在 (indytime),
如果存在則建立 ClientModule, 同時進行SQLconnect, 讀取後端資料庫並拉回放置在手機的 SQLite上
以下程式在 XE8 下完全執行沒有問題
但我移到 XE10下, 一個byte也不改, 我發現 SQLconnect 會不斷的重覆連線
(因為我加了一個 showmessage 在 if wifi=true來判斷, 會一直秀 MessageDialog, 代表它是不斷重覆在執行)
先不說程式是否有瑕疵, 否則在XE8下也應該要有問題才是, 不知道 XE10改了什麼,
這問題實在很大, 如此幾乎APP就不用玩了

PS. 我碓認XE8是OK的, 因為先XE10丟手機會如此, 我移除APP, 再以 XE8 重丟一次, 是好的,
所以代表 XE8寫出來的後端 DATASNAP SERVER 沒有問題(我是使用DATA SNAP 最初級的 SERVER 做法, 不是RESTFUL 或 WEBBORKER)
[code delphi]
function TForm_Main.ConnectMsg : string;
var conninfo : string;
i, j : integer;
fdname : string;
begin
fimg := TPath.GetTemppath PathDelim 'tmp.jpg';
// 停止訊息輸播
Timer_MsgShow.Enabled := False;
DM_CameraPart.ActiveDialogShow(Title_3ipdMsgHeader, Title_MsgGet);
conninfo := '';

with ClientModule_3ipd, DM_Camerapart do
try
try
U_Util.WiFiDate := IdTime1.DateTime;
Wifiyes := True;
except
Wifiyes := False;
end;

if Wifiyes then
begin
FDT_Msg.Close;
// 決定是否進行偵測連線
if (ClientModule_3ipd <> nil) then ClientModule_3ipd.DisposeOf;
ClientModule_3ipd := TClientModule_3ipd.Create(nil);
try
SQLConnection2.Connected := False;
SQLconnection2.Params.Values['HostName'] := U_Util.AppDef.msg3ipdhost;
SQLconnection2.Params.Values['Port'] := U_Util.AppDef.msg3ipdport;
SQLConnection2.Connected := True;
ServerMethods_3ipdClient.EchoString('MESSAGE_' U_Util.AppDef.PhoneName
U_CommVar.Server_3ipdMsgStart);

except
conninfo := U_CommVar.ErrMsg_3ipdMsgDBConnectFail;
ServerMethods_3ipdClient.EchoString('MESSAGE_' U_Util.AppDef.PhoneName
U_CommVar.ErrMsg_3ipdMsgConnectFail);
end;

FDT_Msg.Open;
if Wifiyes = True then
try
j := 0;
CDS_Msg3ipd.Close;
CDS_Msg3ipd.Params.ParamByName('iFROM0').Value := 0;
CDS_Msg3ipd.Params.ParamByName('iDATE0').Value := DatetoStr(Date);
CDS_Msg3ipd.Open;
CDS_Msg3ipd.First;
if (CDS_Msg3ipd.Eof and CDS_Msg3ipd.Bof) then
begin
conninfo := U_CommVar.Info_3ipdMsgNoNewMessage;
ServerMethods_3ipdClient.EchoString('MESSAGE_' conninfo);
end
else
begin
while not CDS_Msg3ipd.Eof do
begin
Application.ProcessMessages;
if not FDT_Msg.Locate('IBCODE',CDS_Msg3ipdIBCODE.Value,[])
then FDT_Msg.Append
else FDT_Msg.Edit;
inc(j);
FDT_MsgISREAD.Value := 'N';
FDT_MsgPUTDEPT.Value := CDS_Msg3ipdPUTDEPT.AsString;
FDT_MsgPUTDATE.Value := CDS_Msg3ipdPUTDATE.AsString;
FDT_MsgPUTTIME.Value := CDS_Msg3ipdPUTTIME.AsString;
FDT_MsgCONTENT1.Value := CDS_Msg3ipdCONTENT1.AsString;
FDT_MsgCONTENT2.Value := CDS_Msg3ipdCONTENT2.AsString;
FDT_MsgWEBSITE.Value := CDS_Msg3ipdWEBSITE.AsString;
if CDS_Msg3ipdPICTSMALL.BlobSize > 0 then
begin
FDT_MsgPICTSMALL.Assign(CDS_Msg3ipdPICTSMALL);
end;
FDT_Msg.Post;
// 下一則
CDS_Msg3ipd.Next;
end;
ServerMethods_3ipdClient.EchoString('MESSAGE_' U_CommVar.Server_Received1
InttoStr(j) U_CommVar.Server_Received2);
end;
except
conninfo := U_CommVar.ErrMsg_3ipdMsgGetMessageError;
ServerMethods_3ipdClient.EchoString('MESSAGE_' U_Util.AppDef.PhoneName ' ' conninfo);
end;
CDS_Msg3ipd.Close;
SQLConnection2.Connected := False;
if (ClientModule_3ipd <> nil) then ClientModule_3ipd.DisposeOf;

// 填入固定訊息
FDT_Msg.Append;
FDT_MsgISCLOSE.Value := 'N';
FDT_MsgISREAD.Value := 'N';
FDT_MsgPUTDEPT.Value := U_CommVar._3ipd_ShortHeader;
FDT_MsgPUTDATE.Value := DatetoStr(Date);
FDT_MsgPUTTIME.Value := TimetoStr(Time);
FDT_MsgCONTENT1.Value := U_CommVar._3ipd_MsgADHeader;
FDT_MsgCONTENT2.Value := U_CommVar._3ipd_MsgADServiceTime;
FDT_MsgGETDEPT.Value := U_CommVar._3ipd_MsgADAll; // 'ALL';
FDT_MsgENDDATE.Value := '2999/12/31';
FDT_Msg.Post;

FDT_Msg.First;
if FDT_MsgPICTSMALL.BlobSize = 0 then
begin
img_Msg.Visible := False;
memo_Msg.Visible := True;
memo_Msg.Lines.Clear;
memo_Msg.Lines.Add(FDT_MsgCONTENT1.AsString);
memo_Msg.Lines.Add(FDT_MsgCONTENT2.AsString);
end
else
begin
img_Msg.Visible := True;
memo_Msg.Visible := False;
img_Msg.Bitmap.Assign(FDT_MsgPICTSMALL);
end;
end
else memo_Msg.Lines.Text := U_CommVar.ErrMsg_3ipdMsgNoConnect #13
U_CommVar.Info_3ipdMsgServiceTime;
finally
DM_CameraPart.ActiveDialogShow('' ,'');
// 判斷是否啟動輸播功能
Timer_MsgShow.Enabled := FDT_Msg.RecordCount > 1;
end;
result := conninfo;
end;

[/code]
P.D.
版主


發表:571
回覆:3884
積分:3672
註冊:2006-10-31

發送簡訊給我
#2 引用回覆 回覆 發表時間:2015-09-21 01:11:43 IP:118.160.xxx.xxx 未訂閱
剛剛又測試了好幾次,
XE8 編譯出來的APP, 連接DATASNAP(也是XE8編出來的), 都沒有問題
而 XE10編出來的APP, 時可時不可(不可連的情況約8成), DATASNAP 還是原來的XE8
這真的是大問題!!
P.D.
版主


發表:571
回覆:3884
積分:3672
註冊:2006-10-31

發送簡訊給我
#3 引用回覆 回覆 發表時間:2015-09-22 23:37:35 IP:59.120.xxx.xxx 未訂閱
已另找出路處理掉了
pcplayer99
尊榮會員


發表:142
回覆:740
積分:591
註冊:2003-01-21

發送簡訊給我
#4 引用回覆 回覆 發表時間:2015-09-29 10:29:57 IP:120.236.xxx.xxx 訂閱
DataSnap 看起来不稳定啊。

其实 DataSnap 和以前的 WebService 唯一的区别,就是把 XML 改成了 JSON。不知道为什么不沿用 WebService 的架构,而是完全另搞一套。

反之,WebService 很稳定。不管 DELPHI 版本怎么改,都能好好地运行。我还曾经把 WebService 的 HTTP SOAP 改成 UDP SOAP 也一直工作正常。
系統時間:2017-11-18 19:50:31
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!