中文偽春菜後援會論壇  

打印

[分享] 簡易資料庫SAORI - sqlori

嗯嗯...忘記%()的原意也只是變數取代
不能把它當eval用...XD

SQLori裡面的資料一旦再次呼叫後就會被重設
這確實是個盲點...
至於分頁的問題的話
其實也只是把迴圈的起始跟終止範圍再做一層變數而已
這部份倒是可以參考野菜園的語法查詢部份

總之請加油XD
末月返想 - 創意的存放處
二次元斷層 - 成果展現之所在

惰性是大敵。

TOP

經過不懈的努力,
基本上寫入、讀取、刪除都做好了QWQ

不過有一個疑問,我是按瑪琳的大體結構寫的,
在編輯資料的時候,會遇到按數據庫第N行的方式來讀取,
我現在是以_i來排列,可以正確的讀取到資料;
但是在刪除的時候,以_i為基準來刪的話會遇到行數與資料庫內ID不符的情況。

因此我現在是在編輯時使用_i,
但刪除時使用ID來刪除。

雖然能夠正確使用,但總覺得哪里怪怪的……
是否編輯時也用ID來判斷會比較好呢?
(但那樣要如何寫我不知道@@)

編輯的部分我還沒完全寫完(目前只做到能夠正確讀取即將編輯的資料),
想問問比較妥當的寫法@w@
主頁更新啦:cat-fish.net

TOP

基本上還是得養成全部用ID來處理的習慣
進行刪修時第一個動作就是取得那筆資料的ID並記下它
這樣才能保證唯一性
要指定時也只要加個 WHERE ID == %(_id) 就ok了
否則等資料的處理量變大之後
出了問題就很難找bug了
末月返想 - 創意的存放處
二次元斷層 - 成果展現之所在

惰性是大敵。

TOP

唔唔,我是這樣想的,
但在讀取需要編輯的資料時,由于是按照“資料庫的行數”來進行_i的讀取,
而不是按照“資料庫的ID”來讀取的。
(就和普通讀取列表一樣)

我是先以_i來正確讀取到即將編輯的資料,
然后再賦予SQLori.value(_i, 0)一個新的變數,使這個變數符合資料庫的ID,
然后再根據這個ID去進行修改~

不過這樣會被迫用到2個全局變數TwT
刪除則不需要用到全局變數。

不過我現在遇到一個問題:
在編輯時,只有最后一欄的資料會編輯無效。
(我這邊的最后一欄欄位是9)
我查了很久,寫法和其他欄位都沒有任何區別,ID也和資料庫是一致的。
其他欄位也都有正常更新,為何只有欄位9會無效呢?@@
PS:寫入資料時,欄位9是可以正常寫入的。


哈哈哈抱歉,知道原因了,欄位字寫錯,
備註寫成了備注……

PS:STARRING目前是無效的嗎?

[ 本帖最後由 貓魚 於 2009-7-26 14:29 編輯 ]
主頁更新啦:cat-fish.net

TOP

我的意思應該跟你的意思是一樣的啊...XD
寫成程式碼就是
_id = SQLori.value(_selected, 0);

另外STARRING是什麼東西?
末月返想 - 創意的存放處
二次元斷層 - 成果展現之所在

惰性是大敵。

TOP

唔,看來是我理解還不夠XD
STARRING是……我是想修改欄位名稱(備註寫了錯字XD|||),
查SQLite手冊得到:
引用:
update film set starring='Jodie Foster' where starring='Jodee Foster';
就会把主角字段里,被打成'Jodee Foster'的那笔(或多笔)资料,改回成Jodie Foster。
我照著寫,但沒有效果……
難道不是這個命令?@@
主頁更新啦:cat-fish.net

TOP

引用:
原帖由 貓魚 於 2009-7-26 16:48 發表
唔,看來是我理解還不夠XD
STARRING是……我是想修改欄位名稱(備註寫了錯字XD|||),
查SQLite手冊得到:

我照著寫,但沒有效果……
難道不是這個命令?@@ ...
這個是改內容。
要改table結構請用ALTER TABLE。
http://www.sqlite.org/lang_altertable.html


正在聽着:
水人的格言:
有仇不報非君子!
有水不灌非魔人!

萬事皆可萌,唯有情無價

TOP

原來是ALTER TABLE @w@ 感謝感謝~

另,
我對照著瑪琳和野菜園參考,還是沒看懂分頁的模式;w;
應該說是一頭霧水吧……
可否更面向初心者的說明一下呢?QWQ
主頁更新啦:cat-fish.net

TOP

我現在遇到了真正的問題(原來編碼問題只是幌子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 編輯 ]
主頁更新啦:cat-fish.net

TOP

引用:
原帖由 貓魚 於 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


正在聽着:
水人的格言:
有仇不報非君子!
有水不灌非魔人!

萬事皆可萌,唯有情無價

TOP

最近電腦爆掉加上回老家搞得忙不過來
暫時可能不會更新了...(汗)

另外關於分頁及SQLori腳本部份
我寫了很久都覺得很不順心
龜毛的毛病一發作
又開始好高騖遠(Lua、Javascript V8)起來
結果目前仍一事無成...orz
末月返想 - 創意的存放處
二次元斷層 - 成果展現之所在

惰性是大敵。

TOP

裝了新版依然測試不通過@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(毆)
    主頁更新啦:cat-fish.net

    TOP

    引用:
    原帖由 貓魚 於 2009-8-10 01:00 發表
    裝了新版依然測試不通過@w@;;

    這次則是直接在臺式機上返回:


    筆記本上還未測試,估計是一樣的錯誤@@

    我我我覺得SQLori腳本不必想太多,
    不管東西好不好,生出來再說……XD(毆) ...
    忘了改位置?

    #define SQLORI_PATH 'saori\sqlori.dll'


    正在聽着:
    水人的格言:
    有仇不報非君子!
    有水不灌非魔人!

    萬事皆可萌,唯有情無價

    TOP

    呃,雖然我的確是忘了改位置,但修正之後還是無法顯示出來。
    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 編輯 ]
    主頁更新啦:cat-fish.net

    TOP

    引用:
    原帖由 貓魚 於 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


    正在聽着:
    水人的格言:
    有仇不報非君子!
    有水不灌非魔人!

    萬事皆可萌,唯有情無價

    TOP

    複製內容到剪貼板
    代碼:
    // 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 編輯 ]
    主頁更新啦:cat-fish.net

    TOP

    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;
            }
        }
    }


    正在聽着:
    水人的格言:
    有仇不報非君子!
    有水不灌非魔人!

    萬事皆可萌,唯有情無價

    TOP

    出來了啊啊啊啊啊啊~~~~~
    感謝!!
    主頁更新啦:cat-fish.net

    TOP

    引用:
    原帖由 貓魚 於 2009-8-10 16:23 發表
    出來了啊啊啊啊啊啊~~~~~
    感謝!!
    下一版sqlori的回傳格式會改為「回傳嗎(0x2)[欄位名稱[(0x3)欄位名稱...]](0x2)[數值[(0x3)數值...]]」以避免 (0x1) 轉碼問題,所以以上方法不久後就失效了。


    正在聽着:
    水人的格言:
    有仇不報非君子!
    有水不灌非魔人!

    萬事皆可萌,唯有情無價

    TOP



    正在聽着:
    水人的格言:
    有仇不報非君子!
    有水不灌非魔人!

    萬事皆可萌,唯有情無價

    TOP



    當前時區 GMT+8, 現在時間是 2018-11-18 15:44

    Processed in 0.025171 second(s), 8 queries, Gzip enabled.

    清除 Cookies - 聯繫我們 - 中文偽春菜後援會 - Archiver - WAP - TOP - 界面風格