
標題: [分享] 簡易資料庫SAORI - sqlori [打印本頁]
作者: 時原砂 時間: 2009-7-20 22:08 標題: 簡易資料庫SAORI - sqlori
SQLori v1.1.10
作者:時原砂
授權:這個SAORI純為測試與教學之用,其他人可隨意使用或修改此原始碼
1. 更新複製內容到剪貼板
代碼:
Date Version Log
20090723 1.1.10 ! 刪除GET_TABLE指令,其功能整合至EXEC之中
! 追加OPEN、CLOSE指令,允許讀取指定的資料庫檔案
* 修正範例程式碼
* 支援UTF-8
20090720 1.0.0 # 初版發佈
2. 說明
簡單的說就是sqlite + csaori = sqlori (炸)
SQLori在功能上極為陽春
不過絕對比debeso.dll這個N年前的SAORI好的多...XD
使用sqlite版本為3.6.16
為求簡便,只返回單一返值而不使用Value[n]格式
3. 指令
(1) OPEN
argument[0]: OPEN
argument[1]: [%(filepath)]
開啟資料庫的連線。若不指定filepath時,預設資料庫檔名為sqlori.db。
(2) EXEC
argument[0]: EXEC
argument[1]: %(SQL_request)
執行資料庫指令的核心函式。
(3) CLOSE
argument[0]: CLOSE
關閉資料庫連線。
3. 應用
由於格式較為複雜,需要在人格端進行一些處理
這裡提供一個AYA版的處理函式及基本的單元測試範例複製內容到剪貼板
代碼:
// sqlori.dll的位置若有不同的話請另行更改
#define SQLORI_PATH 'saori\sqlori.dll'
#define SQLITE_OK 0
#define SQLITE_ERROR 1
SQLori
{
SQLori_result = SQLITE_OK;
SQLori_fields = IARRAY;
SQLori_values = IARRAY;
SQLori_col = 0;
SQLori_row = 0;
_ret = FUNCTIONEX(SQLORI_PATH, _argv[0], _argv[1]);
_data = SPLIT(_ret[0], CHR(0x1));
SQLori_result = TOINT(_data[0]);
if SQLori_result != SQLITE_OK {
SQLori_fields[0] = 'Error';
SQLori_values[0] = _data[1];
SQLori_col = 1;
SQLori_row = 1;
}
else {
if (ARRAYSIZE(_data) >= 3) {
SQLori_fields = SPLIT(_data[1], CHR(0x2));
SQLori_values = SPLIT(_data[2], CHR(0x2));
SQLori_col = ARRAYSIZE(SQLori_fields);
if SQLori_col != 0
SQLori_row = ARRAYSIZE(SQLori_values) / SQLori_col;
}
}
}
SQLori.value
{
_ret = '';
if SQLori_col < 1 {
return;
}
elseif SQLori_col == 1 {
_ret = SQLori_values[_argv[0]];
}
else {
_ret = SQLori_values[_argv[0] * SQLori_col + _argv[1]];
}
_ret;
}
// 單元測試
UnitTest
{
_res = '';
SQLori('OPEN', 'sqliori.db');
SQLori('EXEC', "CREATE TABLE data (ID integer primary key, 姓名, 年齡);");
_res += SQLori_result + '\n';
SQLori('EXEC', "INSERT INTO data VALUES(null, '張三', '20');");
_res += SQLori_result + '\n';
SQLori('EXEC', "INSERT INTO data VALUES(null, '李四', '18'); INSERT INTO data VALUES(null, '王五', '25'); INSERT INTO data VALUES(null, '許功蓋', '90');");
_res += SQLori_result + '\n';
SQLori('EXEC', "UPDATE data SET 年齡 = '23' WHERE 姓名 == '張三';");
_res += SQLori_result + '\n';
SQLori('EXEC', "SELECT * FROM data;");
_res += SQLori_result + '\n';
for _i = 0; _i < SQLori_col; _i++ {
_res += SQLori_fields[_i] + ' ';
}
_res += '\n';
for _i = 0; _i < SQLori_row; _i++ {
for _j = 0; _j < SQLori_col; _j++ {
_res += SQLori.value(_i, _j) + ' ';
}
_res += '\n';
}
SQLori('EXEC', "DELETE FROM data WHERE ID < 3;");
_res += SQLori_result + '\n';
SQLori('EXEC', "SELECT count(*) FROM data;");
_res += SQLori_fields[0] + ' = ' + SQLori_values[0] + '\n';
SQLori('EXEC', "DROP TABLE data;");
_res += SQLori_result + '\n';
SQLori('CLOSE');
_res;
}
注意:
由於1.1.10有整體結構上的大改動
請更新範例程式碼部份
補注:請下載Royさん的版本
[ 本帖最後由 時原砂 於 2009-8-9 23:35 編輯 ]
附件: sqlori _v1.1.10_src.zip (2009-7-23 14:01, 6.98 KB) / 該附件被下載次數 2193
http://cuc.moe.hm/attachment.php?aid=1818&k=8bd58cf1450791b3707986db28d52313&t=1576184192
作者: KSL 時間: 2009-7-20 22:54
( ゚∀゚)o彡゜專業版!專業版!
作者: ~朔~ 時間: 2009-7-21 00:18
好东西,收回去研究一下
作者: 貓魚 時間: 2009-7-21 14:38
重寫キタ━━(゚∀゚)━━!!
作者: kurahika 時間: 2009-7-21 15:00
謝謝研發, 打包回家研究去QQ
作者: Roy 時間: 2009-7-21 18:03
Unicode build希望。
db名經SAORI API設定希望。
作者: 時原砂 時間: 2009-7-23 14:11
更新版本至1.1.10
(版本號無意義XD)
順便推薦一個免費的SQLite工具:
SQLiteSpy
http://www.wikitaxi.org/delphi/doku.php/products/sqlitespy/index
作者: Roy 時間: 2009-7-23 17:50
引用:
(1) OPEN
argument[0]: OPEN
argument[1]: [%(filepath)]
開啟資料庫的連線。若不指定filepath時,預設資料庫檔名為sqlori.db。
src中是"sqlori._db"啊?
不理了,我通通改了。
1.1.10+版更動:複製內容到剪貼板
代碼:
+ 補回SQLite 3.6.16的源碼,SQLite是Public Domain的關係一起包進來也沒關係。
! 修正:不指定filepath時,預設資料庫檔名為sqlori.db
! 修正沒有設定 SAORI return status的問題
! 有關 CSAORI 執行實體自csaori.cpp/caori.h中抽出成csaori_interface.cpp,使 CSAORI 可以獨立更新
! 更新 CSAORI 至 svn rev 88
下載:
源碼+SAORI本體程式:
sqlori v1.1.10+.7z (1.04 MB)
test suite(SAORI本體+yaya+tama程式):
sqloritest.7z (562.65 KB)
P.S.:對了,要推到 CSAORI svn中嗎? XD
附件: sqlori v1.1.10+.7z (2009-7-23 17:50, 1.04 MB) / 該附件被下載次數 2652
http://cuc.moe.hm/attachment.php?aid=1819&k=8bfa5bc9a96a638ac5deedac1a86d5f5&t=1576184192
附件: sqloritest.7z (2009-7-23 17:54, 562.65 KB) / 該附件被下載次數 2605
http://cuc.moe.hm/attachment.php?aid=1820&k=4b57ec63c95116b84abfc19a3eac80b5&t=1576184192
作者: 時原砂 時間: 2009-7-23 19:01
Orz...
要不要推進CSAORI svn這個我倒無所謂
如果Royさん覺得有價值的話就加吧w
至於sqlite源碼是因為太重了所以才刪掉的XD
作者: Roy 時間: 2009-7-23 19:24
引用:
原帖由 時原砂 於 2009-7-23 19:01 發表 
Orz...
要不要推進CSAORI svn這個我倒無所謂
如果Royさん覺得有價值的話就加吧w
至於sqlite源碼是因為太重了所以才刪掉的XD
svn rev 92 投入確定。w
P.S.: #1的文成了 readme.txt 的內容,r93英譯完成。
作者: 時原砂 時間: 2009-7-24 12:00
不過Royさん的dll是怎麼壓縮的啊?
我的VS release版都在400K以上
Compiler設置這邊我還是新手...(滾滾)
作者: Roy 時間: 2009-7-24 12:19
引用:
原帖由 時原砂 於 2009-7-24 12:00 發表 
不過Royさん的dll是怎麼壓縮的啊?
我的VS release版都在400K以上
Compiler設置這邊我還是新手...(滾滾)
複製內容到剪貼板
代碼:
UPX --best --lzama sqlori.dll
作者: 時原砂 時間: 2009-7-24 13:41
原來是加殼啊...(汗)
話說我要更新Sqlori的話要怎麼做呢?
現階段的Sqlori在OO上還不夠獨立
還有改進的空間...
(一開始寫得太隨便了...)
另外我也搞不懂為啥CSAORI要強制設定locale為Japaness
整個CSAORI專案似乎也沒有與之關聯的地方...
作者: Roy 時間: 2009-7-24 14:13
引用:
原帖由 時原砂 於 2009-7-24 13:41 發表 
原來是加殼啊...(汗)
話說我要更新Sqlori的話要怎麼做呢?
現階段的Sqlori在OO上還不夠獨立
還有改進的空間...
(一開始寫得太隨便了...)
另外我也搞不懂為啥CSAORI要強制設定locale為Japaness
整個CSAORI專案似乎也 ...
現時是這樣:
先把csaori checkout到本機
http://code.google.com/p/csaori/source/checkout
在本機改好後把sqlori目錄打包上傳上來吧。
但是Debug/Release目錄中就得把*.obj/*.lib/*.exp/*.pch/*.pdb等刪除,剩下sqlori.dll
然後我再推到svn中。
之後就可以svn update了。
聯絡ぽなさん或ukiyaさん加你帳號後你就可以直接svn commit了。
作者: yinkit 時間: 2009-7-25 13:06
謝~ 好東西收下
作者: 貓魚 時間: 2009-7-25 18:13
重寫敗了……複製內容到剪貼板
代碼:
OnRead
{
_res = '';
SQLori('OPEN', 'sqliori.db');
_res = SQLori('EXEC', "SELECT 本子名,性質,優先級,死線,官方網站,天窗ID,備注 FROM iCalendar;");
for _i = 0; _i < SQLori_row; _i++ {
for _j = 0; _j < SQLori_col; _j++ {
_res += SQLori.value(_i, _j) + ' ';
}
_res += '\n\n';
}
_res = SPLIT(_res,' ');
_txt += "\b[2]\_q\f[bold,true]行事歷 - 列表\f[default]\n\n[150]/
\f[bold,true]稿件名:%(_res[0])\f[default] (性質:%(_res[1])) 優先級:%(_res[2])\n/
死線:%(_res[3])\n/
備注:%(_res[6])\n/
\_q";
SQLori('CLOSE');
_txt;
}
這樣寫出來只能讀取到第一條信息,第二條就會消失。
這個寫法肯定是錯的,但我不知道正確的該怎麼寫@@
分頁和列表讀取我一直不明白要怎麼做@@;;;
(看了很久瑪琳的代碼依然不明白OTZ)
求教了>_<;;
作者: 時原砂 時間: 2009-7-25 21:42
呃...其實只要記住SQLori.value(_i, _j)就夠了
代表的意思是第_i + 1筆第_j欄的資料複製內容到剪貼板
代碼:
OnRead
{
_res = '';
SQLori('OPEN', 'sqliori.db');
SQLori('EXEC', "SELECT 本子名,性質,優先級,死線,官方網站,天窗ID,備注 FROM iCalendar;");
SQLori('CLOSE');
_txt += "\b[2]\_q\f[bold,true]行事歷 - 列表\f[default]\n\n[150]/
\f[bold,true]稿件名:%(SQLori.value(0, 0))\f[default] (性質:%(SQLori.value(0, 1)) 優先級:%(SQLori.value(0, 2))\n/
死線:%(SQLori.value(0, 3))\n/
備注:%(SQLori.value(0, 6))\n/
\_q";
_txt;
}
接下來只要把0的部份改用變數來實作即可
另外就是連線不必常常開開關關的
反正也只有你一個人在用...XD
[ 本帖最後由 時原砂 於 2009-7-25 21:46 編輯 ]
作者: 貓魚 時間: 2009-7-25 23:25
呃…照著做了,
但變成了這樣@@複製內容到剪貼板
代碼:
SSP script 記錄:
\b[2]\_q\f[bold,true]行事歷 - 列表\f[default]\n\n[150]\f[bold,true]稿件名:%(SQLori.value(0, 0))\f[default] 性質:%(SQLori.value(0, 1) 優先級:%(SQLori.value(0, 2))\n死線:%(SQLori.value(0, 3))\n備注:%(SQLori.value(0, 6))\n\_q
直接被顯示出來了|||
哪里寫的不對嗎?|||
另外“把0的部份改用變數來實作”也不太明白,
我知道_i是行數,但如何讓行數自動的列出來?@@
抱歉,這方面完全是外行,看得有點暈暈的OTZ|||
[ 本帖最後由 貓魚 於 2009-7-26 00:32 編輯 ]
作者: Roy 時間: 2009-7-26 00:24
複製內容到剪貼板
代碼:
OnRead
{
_res = '';
SQLori('OPEN', 'sqliori.db');
SQLori('EXEC', "SELECT 本子名,性質,優先級,死線,官方網站,天窗ID,備注 FROM iCalendar;");
SQLori('CLOSE');
_txt += "\b[2]\_q\f[bold,true]行事歷 - 列表\f[default]\n\n[150]"
for _i = 0; _i < SQLori_row; _i++ {
_txt += "\f[bold,true]稿件名:"+SQLori.value(_i, 0)+"\f[default] (性質:"+SQLori.value(_i, 1)+" 優先級:"+SQLori.value(_i, 2)+"\n/
死線:"+SQLori.value(_i, 3)+"\n/
備注:"+SQLori.value(_i, 6)+"\n";
}
_txt+= '\_q';
_txt;
}
作者: 貓魚 時間: 2009-7-26 00:39
喔喔!!感謝!成功了!
不過 SQLori('CLOSE'); 應該要放到后頭去XD;;;;
不然無論如何都讀不出資料XDD
[ 本帖最後由 貓魚 於 2009-7-26 00:50 編輯 ]
作者: 時原砂 時間: 2009-7-26 00:58
嗯嗯...忘記%()的原意也只是變數取代
不能把它當eval用...XD
SQLori裡面的資料一旦再次呼叫後就會被重設
這確實是個盲點...
至於分頁的問題的話
其實也只是把迴圈的起始跟終止範圍再做一層變數而已
這部份倒是可以參考野菜園的語法查詢部份
總之請加油XD
作者: 貓魚 時間: 2009-7-26 04:11
經過不懈的努力,
基本上寫入、讀取、刪除都做好了QWQ
不過有一個疑問,我是按瑪琳的大體結構寫的,
在編輯資料的時候,會遇到按數據庫第N行的方式來讀取,
我現在是以_i來排列,可以正確的讀取到資料;
但是在刪除的時候,以_i為基準來刪的話會遇到行數與資料庫內ID不符的情況。
因此我現在是在編輯時使用_i,
但刪除時使用ID來刪除。
雖然能夠正確使用,但總覺得哪里怪怪的……
是否編輯時也用ID來判斷會比較好呢?
(但那樣要如何寫我不知道@@)
編輯的部分我還沒完全寫完(目前只做到能夠正確讀取即將編輯的資料),
想問問比較妥當的寫法@w@
作者: 時原砂 時間: 2009-7-26 10:08
基本上還是得養成全部用ID來處理的習慣
進行刪修時第一個動作就是取得那筆資料的ID並記下它
這樣才能保證唯一性
要指定時也只要加個 WHERE ID == %(_id) 就ok了
否則等資料的處理量變大之後
出了問題就很難找bug了
作者: 貓魚 時間: 2009-7-26 14:06
唔唔,我是這樣想的,
但在讀取需要編輯的資料時,由于是按照“資料庫的行數”來進行_i的讀取,
而不是按照“資料庫的ID”來讀取的。
(就和普通讀取列表一樣)
我是先以_i來正確讀取到即將編輯的資料,
然后再賦予SQLori.value(_i, 0)一個新的變數,使這個變數符合資料庫的ID,
然后再根據這個ID去進行修改~
不過這樣會被迫用到2個全局變數TwT
刪除則不需要用到全局變數。
不過我現在遇到一個問題:
在編輯時,只有最后一欄的資料會編輯無效。
(我這邊的最后一欄欄位是9)
我查了很久,寫法和其他欄位都沒有任何區別,ID也和資料庫是一致的。
其他欄位也都有正常更新,為何只有欄位9會無效呢?@@
PS:寫入資料時,欄位9是可以正常寫入的。
哈哈哈抱歉,知道原因了,欄位字寫錯,
備註寫成了備注……
PS:STARRING目前是無效的嗎?
[ 本帖最後由 貓魚 於 2009-7-26 14:29 編輯 ]
作者: 時原砂 時間: 2009-7-26 15:45
我的意思應該跟你的意思是一樣的啊...XD
寫成程式碼就是
_id = SQLori.value(_selected, 0);
另外STARRING是什麼東西?
作者: 貓魚 時間: 2009-7-26 16:48
唔,看來是我理解還不夠XD
STARRING是……我是想修改欄位名稱(備註寫了錯字XD|||),
查SQLite手冊得到:引用:
update film set starring='Jodie Foster' where starring='Jodee Foster';
就会把主角字段里,被打成'Jodee Foster'的那笔(或多笔)资料,改回成Jodie Foster。
我照著寫,但沒有效果……
難道不是這個命令?@@
作者: Roy 時間: 2009-7-26 19:07
引用:
原帖由 貓魚 於 2009-7-26 16:48 發表 
唔,看來是我理解還不夠XD
STARRING是……我是想修改欄位名稱(備註寫了錯字XD|||),
查SQLite手冊得到:
我照著寫,但沒有效果……
難道不是這個命令?@@ ...
這個是改內容。
要改table結構請用ALTER TABLE。
http://www.sqlite.org/lang_altertable.html
作者: 貓魚 時間: 2009-7-26 21:19
原來是ALTER TABLE @w@ 感謝感謝~
另,
我對照著瑪琳和野菜園參考,還是沒看懂分頁的模式;w;
應該說是一頭霧水吧……
可否更面向初心者的說明一下呢?QWQ
作者: 貓魚 時間: 2009-8-9 13:29
我現在遇到了真正的問題(原來編碼問題只是幌子XD)
即我突然發現sqlori的db在我的小筆記本上無法被正確讀取。
TAMA返回:引用:
C:\tssp\ghost\TC_musume\ghost\master\system/yaya_shiori3.dic(870) : warning W0013 : 処理に失敗しました. : LOADLIB
C:\tssp\ghost\TC_musume\ghost\master\TCmusume_dic\database.dic(26) : warning W0009 : 引数の型が不正です. : SPLIT
C:\tssp\ghost\TC_musume\ghost\master\system/yaya_shiori3.dic(870) : warning W0013 : 処理に失敗しました. : LOADLIB
C:\tssp\ghost\TC_musume\ghost\master\TCmusume_dic\database.dic(26) : warning W0009 : 引数の型が不正です. : SPLIT
但在臺式機上,TAMA返回:引用:
// request to library
// name : E:\tssp\ghost\TC_musume\ghost\master\sqlori.dll
EXECUTE SAORI/1.0
Charset: UTF-8
Sender: AYA
SecurityLevel: Local
Argument0: OPEN
Argument1: sqliori.db
// response (Execution time : 0[ms])
SAORI/1.0 7667815 Unknown Error
Charset: UTF-8
Result: 0
// request to library
// name : E:\tssp\ghost\TC_musume\ghost\master\sqlori.dll
EXECUTE SAORI/1.0
Charset: UTF-8
Sender: AYA
SecurityLevel: Local
Argument0: EXEC
Argument1: CREATE TABLE data (ID integer primary key, 姓名, 年齡);
// response (Execution time : 0[ms])
SAORI/1.0 7667815 Unknown Error
Charset: UTF-8
Result: 0
// request to library
// name : E:\tssp\ghost\TC_musume\ghost\master\sqlori.dll
EXECUTE SAORI/1.0
Charset: UTF-8
Sender: AYA
SecurityLevel: Local
Argument0: EXEC
Argument1: INSERT INTO data VALUES(null, '張三', '20');
// response (Execution time : 0[ms])
SAORI/1.0 4522067 Unknown Error
Charset: UTF-8
Result: 0
// request to library
// name : E:\tssp\ghost\TC_musume\ghost\master\sqlori.dll
EXECUTE SAORI/1.0
Charset: UTF-8
Sender: AYA
SecurityLevel: Local
Argument0: EXEC
Argument1: INSERT INTO data VALUES(null, '李四', '18'); INSERT INTO data VALUES(null, '王五', '25'); INSERT INTO data VALUES(null, '許功蓋', '90');
// response (Execution time : 0[ms])
SAORI/1.0 4522067 Unknown Error
Charset: UTF-8
Result: 0
// request to library
// name : E:\tssp\ghost\TC_musume\ghost\master\sqlori.dll
EXECUTE SAORI/1.0
Charset: UTF-8
Sender: AYA
SecurityLevel: Local
Argument0: EXEC
Argument1: UPDATE data SET 年齡 = '23' WHERE 姓名 == '張三';
// response (Execution time : 15[ms])
SAORI/1.0 4259908 Unknown Error
Charset: UTF-8
Result: 0
// request to library
// name : E:\tssp\ghost\TC_musume\ghost\master\sqlori.dll
EXECUTE SAORI/1.0
Charset: UTF-8
Sender: AYA
SecurityLevel: Local
Argument0: EXEC
Argument1: SELECT * FROM data;
// response (Execution time : 0[ms])
SAORI/1.0 4259908 Unknown Error
Charset: UTF-8
Result: 0ID姓名年齡1張三232李四183王五254許功蓋90
// request to library
// name : E:\tssp\ghost\TC_musume\ghost\master\sqlori.dll
EXECUTE SAORI/1.0
Charset: UTF-8
Sender: AYA
SecurityLevel: Local
Argument0: EXEC
Argument1: DELETE FROM data WHERE ID < 3;
// response (Execution time : 16[ms])
SAORI/1.0 7667815 Unknown Error
Charset: UTF-8
Result: 0
// request to library
// name : E:\tssp\ghost\TC_musume\ghost\master\sqlori.dll
EXECUTE SAORI/1.0
Charset: UTF-8
Sender: AYA
SecurityLevel: Local
Argument0: EXEC
Argument1: SELECT count(*) FROM data;
// response (Execution time : 0[ms])
SAORI/1.0 7667815 Unknown Error
Charset: UTF-8
Result: 0count(*)2
// request to library
// name : E:\tssp\ghost\TC_musume\ghost\master\sqlori.dll
EXECUTE SAORI/1.0
Charset: UTF-8
Sender: AYA
SecurityLevel: Local
Argument0: EXEC
Argument1: DROP TABLE data;
// response (Execution time : 15[ms])
SAORI/1.0 7667815 Unknown Error
Charset: UTF-8
Result: 0
// request to library
// name : E:\tssp\ghost\TC_musume\ghost\master\sqlori.dll
EXECUTE SAORI/1.0
Charset: UTF-8
Sender: AYA
SecurityLevel: Local
Argument0: CLOSE
Argument1:
// response (Execution time : 0[ms])
SAORI/1.0 7667815 Unknown Error
Charset: UTF-8
Result: 0
// response (Execution time : 297[ms])
SHIORI/3.0 200 OK
Sender: AYA
Charset: UTF-8
Value: 0\n0\n0\n0\n0\n\n0\n = \n0\n
可以看到最終人格只說出了“0\n0\n0\n0\n0\n\n0\n = \n0\n”,且有一個錯誤:“SAORI/1.0 7667815 Unknown Error”
這個錯誤在臺式機上是更新了YAYA535-2,確切的說是535-2同捆的yaya_shiori3.dic、yaya_compatible.dic等文件才出現的;
而在筆記本上則一開始就報了LOADLIB和SPLIT錯誤。
不知要如何修改shiori3來解決?(這塊我真的是一竅不通啦囧;;;)
PS:兩臺機子上的都是TSSP (SSP/2.01.76 (20090425-2; Windows NT 5.1))
再PS:SPLIT錯誤那行的代碼是 _data = SPLIT(_ret[0], CHR(0x1));
[ 本帖最後由 貓魚 於 2009-8-9 13:41 編輯 ]
作者: Roy 時間: 2009-8-9 22:32
引用:
原帖由 貓魚 於 2009-8-9 13:29 發表 
我現在遇到了真正的問題(原來編碼問題只是幌子XD)
即我突然發現sqlori的db在我的小筆記本上無法被正確讀取。
TAMA返回:
但在臺式機上,TAMA返回:
可以看到最終人格只說出了“0\n0\n0\n0\n0\n\n0\n = \n0\n”,且有一個錯 ...
舊版。
最新版在Google Code發布中。
http://code.google.com/p/csaori/ ... qlori_1.1.10%2B.zip
作者: 時原砂 時間: 2009-8-10 00:04
最近電腦爆掉加上回老家搞得忙不過來
暫時可能不會更新了...(汗)
另外關於分頁及SQLori腳本部份
我寫了很久都覺得很不順心
龜毛的毛病一發作
又開始好高騖遠(Lua、Javascript V8)起來
結果目前仍一事無成...orz
作者: 貓魚 時間: 2009-8-10 01:00
裝了新版依然測試不通過@w@;;
這次則是直接在臺式機上返回:引用:
// request
GET SHIORI/3.0
Charset: UTF-8
Sender: SSP
SecurityLevel: local
ID: OniCalendar
Reference0:
Reference1: Open
E:\tssp\ghost\TC_musume\ghost\master\system/yaya_shiori3.dic(870) : warning W0013 : 処理に失敗しました. : LOADLIB
E:\tssp\ghost\TC_musume\ghost\master\TCmusume_dic\database.dic(26) : warning W0009 : 引数の型が不正です. : SPLIT
E:\tssp\ghost\TC_musume\ghost\master\system/yaya_shiori3.dic(870) : warning W0013 : 処理に失敗しました. : LOADLIB
E:\tssp\ghost\TC_musume\ghost\master\TCmusume_dic\database.dic(26) : warning W0009 : 引数の型が不正です. : SPLIT
// response (Execution time : 31[ms])
SHIORI/3.0 200 OK
Sender: AYA
Charset: UTF-8
Value: \_q\p[2]\s[-1]\b[2]\f[bold,true]■行事歷 - 列表■\f[default]\n\n[half]\!\q[新增資料,OniCalendar,New,Insert]\n[150]\_b[img/back.png,inline]\q[返回,OnOpenMenu,天窗娘的公文包,0,1] \_b[img/close.png,inline]\q[結束,OnCloseMenu]\_q\e
筆記本上還未測試,估計是一樣的錯誤@@
我我我覺得SQLori腳本不必想太多,
不管東西好不好,生出來再說……XD(毆)
作者: Roy 時間: 2009-8-10 10:48
引用:
原帖由 貓魚 於 2009-8-10 01:00 發表 
裝了新版依然測試不通過@w@;;
這次則是直接在臺式機上返回:
筆記本上還未測試,估計是一樣的錯誤@@
我我我覺得SQLori腳本不必想太多,
不管東西好不好,生出來再說……XD(毆) ...
忘了改位置?
#define SQLORI_PATH 'saori\sqlori.dll'
作者: 貓魚 時間: 2009-8-10 11:14
呃,雖然我的確是忘了改位置,但修正之後還是無法顯示出來。
TAMA顯示所有寫入行為都正常(利用SQLiteSpy也檢查過了,的確有正確寫入~),但人格的確說不出來:引用:
……太長了省略……
// request to library
// name : E:\tssp\ghost\TC_musume\ghost\master\saori\sqlori.dll
EXECUTE SAORI/1.0
Charset: UTF-8
Sender: AYA
SecurityLevel: Local
Argument0: EXEC
Argument1: INSERT INTO data VALUES(null, '李四', '18'); INSERT INTO data VALUES(null, '王五', '25'); INSERT INTO data VALUES(null, '許功蓋', '90');
// response (Execution time : 188[ms])
SAORI/1.0 200 OK
Charset: UTF-8
Result: 0
……太長了省略……
而人格只會返回:引用:
// response (Execution time : 1015[ms])
SHIORI/3.0 200 OK
Sender: AYA
Charset: UTF-8
Value: 0\n0\n0\n0\n0\n\n0\n = \n0\n
看來是輸出的時候有不正確的地方,但究竟是哪裡錯了呢?@w@;;
[ 本帖最後由 貓魚 於 2009-8-10 11:29 編輯 ]
作者: Roy 時間: 2009-8-10 12:05
引用:
原帖由 貓魚 於 2009-8-10 11:14 發表 
呃,雖然我的確是忘了改位置,但修正之後還是無法顯示出來。
TAMA顯示所有寫入行為都正常(利用SQLiteSpy也檢查過了,的確有正確寫入~),但人格的確說不出來:
而人格只會返回:
看來是輸出的時候有不正確的地方,但究竟是哪裡錯 ...
select沒返回的話就有問題了。複製內容到剪貼板
代碼:
// request to library
// name : C:\Documents and Settings\Roy\Desktop\sqloritest\sqlori.dll
EXECUTE SAORI/1.0
Charset: UTF-8
Sender: AYA
SecurityLevel: Local
Argument0: EXEC
Argument1: SELECT * FROM data;
// response (Execution time : 0[ms])
SAORI/1.0 200 OK
Charset: UTF-8
Result: 0ID姓名年齡1張三232李四183王五254許功蓋90
作者: 貓魚 時間: 2009-8-10 15:16
複製內容到剪貼板
代碼:
// request to library
// name : E:\tssp\ghost\TC_musume\ghost\master\saori\sqlori.dll
EXECUTE SAORI/1.0
Charset: UTF-8
Sender: AYA
SecurityLevel: Local
Argument0: EXEC
Argument1: SELECT * FROM data;
// response (Execution time : 0[ms])
SAORI/1.0 200 OK
Charset: UTF-8
Result: 0ID姓名年齡1張三232李四183王五254許功蓋90
……省略
// request to library
// name : E:\tssp\ghost\TC_musume\ghost\master\saori\sqlori.dll
EXECUTE SAORI/1.0
Charset: UTF-8
Sender: AYA
SecurityLevel: Local
Argument0: EXEC
Argument1: SELECT count(*) FROM data;
// response (Execution time : 0[ms])
SAORI/1.0 200 OK
Charset: UTF-8
Result: 0count(*)2
……省略
// request to library
// name : E:\tssp\ghost\TC_musume\ghost\master\saori\sqlori.dll
EXECUTE SAORI/1.0
Charset: UTF-8
Sender: AYA
SecurityLevel: Local
Argument0: CLOSE
Argument1:
// response (Execution time : 0[ms])
SAORI/1.0 200 OK
Charset: UTF-8
Result: 0
// response (Execution time : 797[ms])
SHIORI/3.0 200 OK
Sender: AYA
Charset: UTF-8
Value: 0\n0\n0\n0\n0\n\n0\n = \n0\n
// request
GET SHIORI/3.0
ID: OnTranslate
Charset: UTF-8
Sender: SSP
SecurityLevel: local
Reference0: 0\n0\n0\n0\n0\n\n0\n = \n0\n
// response (Execution time : 0[ms])
SHIORI/3.0 200 OK
Sender: AYA
Charset: UTF-8
Value: 0\n0\n0\n0\n0\n\n0\n = \n0\n
有正確返回沒錯啊。
但人格就是讀不到@@
[ 本帖最後由 貓魚 於 2009-8-10 15:18 編輯 ]
作者: Roy 時間: 2009-8-10 16:14
SQLori換這個看看吧,CHR(1)被轉成","了。複製內容到剪貼板
代碼:
SQLori
{
SQLori_result = SQLITE_OK;
SQLori_fields = IARRAY;
SQLori_values = IARRAY;
SQLori_col = 0;
SQLori_row = 0;
_ret = FUNCTIONEX(SQLORI_PATH, _argv[0], _argv[1]);
_data = SPLIT(_ret, ',');
SQLori_result = TOINT(_data[0]);
if SQLori_result != SQLITE_OK {
SQLori_fields[0] = 'Error';
SQLori_values[0] = _data[1];
SQLori_col = 1;
SQLori_row = 1;
}
else {
if (ARRAYSIZE(_data) >= 3) {
SQLori_fields = SPLIT(_data[1], CHR(0x2));
SQLori_values = SPLIT(_data[2], CHR(0x2));
SQLori_col = ARRAYSIZE(SQLori_fields);
if SQLori_col != 0
SQLori_row = ARRAYSIZE(SQLori_values) / SQLori_col;
}
}
}
作者: 貓魚 時間: 2009-8-10 16:23
出來了啊啊啊啊啊啊~~~~~
感謝!!
作者: Roy 時間: 2009-8-10 16:38
引用:
原帖由 貓魚 於 2009-8-10 16:23 發表 
出來了啊啊啊啊啊啊~~~~~
感謝!!
下一版sqlori的回傳格式會改為「回傳嗎(0x2)[欄位名稱[(0x3)欄位名稱...]](0x2)[數值[(0x3)數值...]]」以避免 (0x1) 轉碼問題,所以以上方法不久後就失效了。
作者: Roy 時間: 2009-8-10 16:46
乾脆發布新版好了。
http://code.google.com/p/csaori/ ... e=sqlori_1.2.13.zip
作者: 貓魚 時間: 2009-8-10 17:57
真快,立刻更新新版XD
----
已更新,沒任何問題。YEAH~
辛苦啦~❤
[ 本帖最後由 貓魚 於 2009-8-10 18:09 編輯 ]
作者: Roy 時間: 2009-8-16 20:59
port了一份用SQLite 2.8.17的sqlori-sqlite2.dll作為debeso.dll的drop-in replacement XD
但是 -r 還是沒有啦 XD
EDIT:有下載了 XD
http://code.google.com/p/csaori/ ... -sqlite2_1.2.13.zip
作者: 蔡孟哲 時間: 2009-9-21 20:08
我也要來研究看看=ˇ=
歡迎光臨 中文偽春菜後援會論壇 (http://cuc.moe.hm/) |
Powered by Discuz! 6.1.0 |