有關資料庫記錄保存的問題 |
缺席
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
請問各位,
先前我按上課廖老師的案例, 在 DataModule 中設置好 FireDAC 的 TFDConnection 及一組 TFDTable, 在 DM 的 O n create 寫以下的 code sFileName := TPath.GetTempPath PathDelim 'test.sdb'; FDC_LocalSet.Params.Values['Database'] := sFileName; FDC_LocalSet.Params.Values['User_Name'] := 'xxxx'; FDC_LocalSet.Params.Values['Password'] := 1234567; if FileExists(sFileName) = False then begin sql := 'CREATE TABLE IF NOT EXISTS [LOCALSET] (' '[DEFSIZES] TEXT, ' '[DEFRATIO] TEXT, ' '[DEFPIXEL] TEXT, ' '[IPFROM] TEXT, ' '[DATAFROM] TEXT, ' '[MD5] TEXT, ' '[PROVIDER] TEXT) ' ; FDC_LocalSet.Connected := True; FDC_LocalSet.ExecSQL(sql); FDC_LocalSet.Connected := False; end; FDC_LocalSet.Connected := True; FDT_LocalSet.Open(); FDT_LocalSet.First; if FDT_LocalSet.IsEmpty then begin FDT_LocalSet.Append; FDT_LocalSet.FieldByName('DEFSIZES').Value := '320'; FDT_LocalSet.FieldByName('DEFRATIO').Value := '4'; FDT_LocalSet.FieldByName('DEFPIXEL').Value := '80'; FDT_LocalSet.FieldByName('IPFROM').Value := '127.0.0.1'; FDT_LocalSet.Post; end; FDC_LocalSet.Connected := False; except on E:Exception do begin ShowMessage(pChar(E.Message)); end; end; 程式細節與廖老師有些差異, 不過大致差不多, 使用 SQlite 因為不知為什麼無法存入到 TGetDocumentPath 的路徑, 只好放在 TGetTempPath, 按廖老師的解法, 由系統自動產生SQlite 的資料庫, 就可以不用管分發 sdb 的問題, 這段程式的執行是沒有問題的, 如果 test.sdb 不存在, 則建立一個檔案, 如果 LocalSet Table 不存在, 則產生一個 Table , 再者如果記錄為空, 則自動填入一筆記錄 在首次丟到手機測試, 一切正常, 各欄位也就按既定的程式走, 但如果我重新編譯再次丟到手機(丟手機前, 我有在手機上改變各欄的資料值) 當程式第二次啟動, 我發現 test.sdb 的內容全部又回到預設值 (這裡指的是丟第二次的結果, 如果是第一次丟進來, 關閉手機程式再次啟動, 資料是會被保留的) 我不知道問題出在那裡? 這段程式如果放在 WINDOWS 上執行是不會有這樣的情況 |
aftcast
站務副站長 發表:81 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
蕭大俠, 好久不見了
你沒錯, 所以不會打你啦! 不過你可能誤會我發的意思, 我這篇所指的是 如果是第一次丟到手機, 會進行安裝, 此時手機內沒有 TEST.SDB檔, 所以會create 一佪 test.sdb, 理所當然這個 sdb 必然是空檔, 所以 if not exists localset 會成立, 所以自動執行這段 sql , 創建一個Localset 的 table 所以我在手機上執行n次, 都不會再觸發 if not exists 了 但問題是, 我實測的結果, 如果之前我已對 localset 進行記錄的異動也被保存下來了, 當我進行程式開發時, 二度丟到手機, 手機會進行重安裝, 當我回頭再去啟動app(二次安裝後), 我發現, 資料庫的內容都被還原了, 也就是說, 我先前所異動的記錄全部不見, 原本我以為重安裝會解除資料庫(因為我看手機的動作, 重安裝似乎是先解除再安裝), 可是我單獨測試解除, temp下的 test.sdb還是會被保留, 我也測試過, 把 sdb 拉回到電腦, 利用 xe5 的 firedac explorer 查看內容, 我先前異動的記錄都在, 但經過二度安裝, 就是會造成資料庫記錄全部消失, 這會讓程式無法操作下去, 所以我不清楚手機的運作模式, 也不知道問題發生在那, 是 xe5 的問題, 還是 android 的原則性問題? 那如果是系統的問題, 如果我app改版, 客戶要如何更新及保存先前的設定呢? TS [LOCALSET] (' 注意 if not exists這三個單子! 我吃飯拿手機看到此文,沒仔細看,若有錯,別打我:p |
Main Chen
高階會員 發表:29 回覆:135 積分:127 註冊:2002-10-07 發送簡訊給我 |
將資料存放在 GetDocumentsPath 目錄有以下特性:
1. 使用 XE5 IDE 去 Deploy 到實機上, 會將原先存在的 apk 及 GetDocumentsPath 目錄內的所有資料全部刪除. 2. 但透過 Play 商店更新版本, 則不會刪除 GetDocumentsPath 目錄內的資料, 因此這也延伸出一個問題, 就是放在此目錄下的檔案, 有必要更新時, 必需要自行寫程式去更新. 以上是實測的結果. ===================引 用 P.D. 文 章=================== 所以我不清楚手機的運作模式, 也不知道問題發生在那, 是 xe5 的問題, 還是 android 的原則性問題? 那如果是系統的問題, 如果我app改版, 客戶要如何更新及保存先前的設定呢? |
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
1. 我放的是在 GetTempPath, 而不是在 GetDocumentspath, 我實測在 TempPath下, 自行創建的檔案不會被刪除
2. 前一篇我曾有發過, 不知道為什麼, 發佈在 GetDocumentspath 下的檔案, 進入手機尋找, 都看不到任何放在deploy 發佈到這個位置的檔案 所以我根本無法把檔案發佈到 Documents ===================引 用 Main Chen 文 章=================== 將資料存放在 GetDocumentsPath 目錄有以下特性: 1. 使用 XE5 IDE 去 Deploy 到實機上, 會將原先存在的 apk 及 GetDocumentsPath 目錄內的所有資料全部刪除. 2. 但透過 Play 商店更新版本, 則不會刪除 GetDocumentsPath 目錄內的資料, 因此這也延伸出一個問題, 就是放在此目錄下的檔案, 有必要更新時, 必需要自行寫程式去更新. 以上是實測的結果. ===================引 用 P.D. 文 章=================== 所以我不清楚手機的運作模式, 也不知道問題發生在那, 是 xe5 的問題, 還是 android 的原則性問題? 那如果是系統的問題, 如果我app改版, 客戶要如何更新及保存先前的設定呢? |
Main Chen
高階會員 發表:29 回覆:135 積分:127 註冊:2002-10-07 發送簡訊給我 |
1. 不建議把檔案存在 GetTempPath, 因為一些清理工具會把它給清除.
2. 如果有 Root 可以用檔案瀏覽工具查看 GetDocumentspath 檔案, 放在 /data/data/com.xxxxx.xxxxx/files ===================引 用 P.D. 文 章=================== 1. 我放的是在 GetTempPath, 而不是在 GetDocumentspath, 我實測在 TempPath下, 自行創建的檔案不會被刪除 2. 前一篇我曾有發過, 不知道為什麼, 發佈在 GetDocumentspath 下的檔案, 進入手機尋找, 都看不到任何放在deploy 發佈到這個位置的檔案 所以我根本無法把檔案發佈到 Documents |
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
這個部份我有確認過, 我的手機是 HTC EVO (2年前手機, 版本4.0.3)
在/android/data/com.embarcadero.xxx/files 不是 /data/data/... 我也想放在 Documents 下, 只是放不進去啊! ===================引 用 Main Chen 文 章=================== 1. 不建議把檔案存在 GetTempPath, 因為一些清理工具會把它給清除. 2. 如果有 Root 可以用檔案瀏覽工具查看 GetDocumentspath 檔案, 放在 /data/data/com.xxxxx.xxxxx/files ===================引 用 P.D. 文 章=================== 1. 我放的是在 GetTempPath, 而不是在 GetDocumentspath, 我實測在 TempPath下, 自行創建的檔案不會被刪除 2. 前一篇我曾有發過, 不知道為什麼, 發佈在 GetDocumentspath 下的檔案, 進入手機尋找, 都看不到任何放在deploy 發佈到這個位置的檔案 所以我根本無法把檔案發佈到 Documents |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |