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

firedac sqlite在Android發佈發生 no such table:

答題得分者是:aftcast
pcernet
初階會員


發表:69
回覆:113
積分:41
註冊:2002-11-29

發送簡訊給我
#1 引用回覆 回覆 發表時間:2014-09-22 10:08:27 IP:59.120.xxx.xxx 未訂閱
 Remote Path [SQLite]no such table:datas
....
[/code]

在 windows OS 下可正常運作,但在 Android OS 下會出現 FireDAC][Phys][ERROR:no such table:datas

請先進們不吝賜教,謝謝!



pcernet
初階會員


發表:69
回覆:113
積分:41
註冊:2002-11-29

發送簡訊給我
#2 引用回覆 回覆 發表時間:2014-09-22 10:15:08 IP:59.120.xxx.xxx 未訂閱
抱歉, delphi格式編排有問題又無法修改,重貼如下,謝謝!

Deployment Manager
add file mydata.db3 Remote Path assets\internal\
FDConnection1.Params.Clear;
FDConnection1.Params.Add('DriverID=SQLite');
FDQuery1.Connection := FDConnection1;
{$IFDEF MSWINDOWS}
ss:=ExtractFilePath(ParamStr(0));
FDConnection1.Params.Add('Database=' ss 'mydata.db3');
{$ELSE}
ss:=TPath.GetDocumentsPath; //TPath.GetSharedDocumentsPath;TPath.GetHomePath;
FDConnection1.Params.Add('Database=' ss 'mydata.db3');
// FDConnection1.Params.Values['Database'] := TPath.Combine(TPath.GetDocumentsPath, 'mydata.db3');
{$ENDIF}
FDConnection1.Connected := True;
FDQuery1.Open('SELECT * FROM datas'); //發生錯誤 [FireDAC][Phys][SQLite]ERROR:no such table:datas
....
在 windows OS 下可正常運作,但在 Android OS 下會出現 [FireDAC][Phys][SQLite]ERROR:no such table:datas
請先進們不吝賜教,謝謝!
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#3 引用回覆 回覆 發表時間:2014-09-22 18:30:59 IP:114.32.xxx.xxx 訂閱


ss:=TPath.GetDocumentsPath PathDelim;


===================引 用 pcernet 文 章===================
ss:=TPath.GetDocumentsPath;
FDConnection1.Params.Add('Database=' ss 'mydata.db3');
------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
pcernet
初階會員


發表:69
回覆:113
積分:41
註冊:2002-11-29

發送簡訊給我
#4 引用回覆 回覆 發表時間:2014-09-23 12:34:09 IP:59.120.xxx.xxx 未訂閱
 感謝aftcast的熱心答覆,多加個路徑字元結果還是不行!

將資料檔(datas.db3)發佈到 assets\ ,也就是 \mnt\sdcard\Android\data\com.xxx.xxx\files 資料夾內
可以看見該資料檔,發佈沒有問題!

ss:=TPath.GetSharedDocumentsPath PathDelim;
FDConnection1.Params.Values['Database'] := TPath.Combine(ss, 'mybus.db3');

操作時仍會發生[FireDAC][Phys][SQLite]ERROR:no such table:datas

在本地以sqlitestudio開啟datas.db3時,程式會顯示是Sqlite 3,並且Table會顯示1,
但以FTP直接開啟Android遠端(\mnt\sdcard\Android\data\com.xxx.xxx\files)的datas.db3,程式會顯示 Sqlite 2,並且Table沒有任何資料,不知道是不是這個問題,請先進們不吝指教,謝謝。
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#5 引用回覆 回覆 發表時間:2014-09-24 02:23:54 IP:114.32.xxx.xxx 訂閱
hello 你的程式碼不要再動了,不然會很亂…怎麼說呢?

如果你要用 TPath.Combines(......) 那就不能有 ss 就不能含有 PathDelim
如果你要用 prarams.add(........) 那 ss 就有要PathDelim

還有,你應該是發到 assets\internal\ 可是我又看你這次寫 assets\ 這樣而已…

總的講,

發到 assests\internal\

然後

FDConnection1.Params.Values['Database'] := TPath.Combine(ssTPath.GetSharedDocumentsPath, 'mybus.db3');

還有,mybus.db3 最好是大小寫有分,儘量不要寫 mybus.db3然後上傳的又是 MYbus.db3之類的。

請用以上的程式與動作試看看再說。不要再動程式碼。 good luck 。

===================引 用 pcernet 文 章===================
感謝aftcast的熱心答覆,多加個路徑字元結果還是不行!

將資料檔(datas.db3)發佈到 assets\ ,也就是 \mnt\sdcard\Android\data\com.xxx.xxx\files 資料夾內
可以看見該資料檔,發佈沒有問題!

ss:=TPath.GetSharedDocumentsPath PathDelim;
FDConnection1.Params.Values['Database'] := TPath.Combine(ss, 'mybus.db3');

操作時仍會發生[FireDAC][Phys][SQLite]ERROR:no such table:datas

在本地以sqlitestudio開啟datas.db3時,程式會顯示是Sqlite 3,並且Table會顯示1,
但以FTP直接開啟Android遠端(\mnt\sdcard\Android\data\com.xxx.xxx\files)的datas.db3,程式會顯示 Sqlite 2,並且Table沒有任何資料,不知道是不是這個問題,請先進們不吝指教,謝謝。
------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#6 引用回覆 回覆 發表時間:2014-09-24 02:28:47 IP:114.32.xxx.xxx 訂閱

還有,重新run到手機前,請手動先在手機上把app給uninstall了! 以免因之前錯的db而不再更新。

------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#7 引用回覆 回覆 發表時間:2014-09-24 02:33:05 IP:114.32.xxx.xxx 訂閱
因系統好像無法讓我做 修改。我只好重po

總的講,

發到 assests\internal\

然後

FDConnection1.Params.Values['Database'] := TPath.Combine(TPath.GetSharedDocumentsPath, 'mybus.db3');

若真的還有問題, 有人說把它發到

.\assests\internal\
一點,反斜線在 assests前面。

先試再回報吧。


------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
pcernet
初階會員


發表:69
回覆:113
積分:41
註冊:2002-11-29

發送簡訊給我
#8 引用回覆 回覆 發表時間:2014-09-24 09:00:43 IP:59.120.xxx.xxx 未訂閱
 感謝您的熱心引導,問題已經解決!

在Deployment 的 Release項目中也加入資料檔,然後移除後重新安裝即可。

最終的程式碼如下: (選擇將資料檔發佈到發佈到assets\)

FDConnection1.Params.Add('DriverID=SQLite');
FDQuery1.Connection := FDConnection1;
{$IFDEF MSWINDOWS}
ss:=ExtractFilePath(ParamStr(0));
{$ELSE}
ss:=TPath.GetSharedDocumentsPath PathDelim;
{$ENDIF}
FDConnection1.Params.Add('Database=' ss 'mybus.db3');

再次感謝!
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#9 引用回覆 回覆 發表時間:2014-09-24 11:34:30 IP:114.32.xxx.xxx 訂閱
謝謝你把最終的結果與大家分享。

不過,我因此而重新省思發佈到 assets\ 下會對應到 TPath.GetSharedDocumentsPath 的結果。
這與多數人的結果不太一樣,也與官方的說法不一樣,但有一些人照官方的做也遇到你的情形…

怪怪的。可能有什麼我沒有真的深入的理解。 :p

------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#10 引用回覆 回覆 發表時間:2014-09-24 12:00:32 IP:114.32.xxx.xxx 訂閱
我了解問題所在了,一定是我沒睡飽…  XXXXXXXXXPath

在此,順便做個筆記,未來有查到此篇的人可以參考一下。

assets 到外部(sdcard)的目錄
TPath.Combine(TPath.GetSharedDocumentsPath, 'filename') { External }



===================引 用 aftcast 文 章===================
謝謝你把最終的結果與大家分享。

不過,我因此而重新省思發佈到 assets\ 下會對應到 TPath.GetSharedDocumentsPath 的結果。
這與多數人的結果不太一樣,也與官方的說法不一樣,但有一些人照官方的做也遇到你的情形…

怪怪的。可能有什麼我沒有真的深入的理解。 :p


------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
系統時間:2024-03-29 19:57:49
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!