weeew 发表于 2013-5-22 08:33:19

在sqlite操作中遇到database is locked

在sql插入新表的时候提示

> Function: _SQLite_Exec
--> Query:    INSERT INTO temp select * from ch12 where id=5;
--> Error:    database is locked

以下是出错的函数部分func peizhi()
                _SQLite_Startup ()
                $hQuery=_SQLite_Open ($SQLite_Data_Path)
                _SQLite_Query(-1,"select * from peizhi where id='2';",$hQuery)
                if _SQLite_FetchData($hQuery, $peizhi) = $SQLITE_OK Then       
                                $zhangjie=StringSplit($peizhi,"|")
                                _SQLite_Close($hQuery)
                                _SQLite_Shutdown()
                                If @error=1 Then;判断是否读到间隔符,如果读不到安单章处理,读到进行选择试题
                                          Switch $peizhi
                                                        Case 0
                                                                GUICtrlSetState($all,$GUI_CHECKED)
                                                                GUICtrlSetState($all,$GUI_DISABLE)
                                                                GUICtrlSetState($now,$GUI_DISABLE)
                                                        case Else
                                                                GUICtrlSetState($now,$GUI_CHECKED)
                                                                GUICtrlSetState($now,$GUI_DISABLE)
                                                                GUICtrlSetState($all,$GUI_DISABLE)
                                                EndSwitch
                                Else
                                                GUICtrlSetState($now,$GUI_CHECKED)
                                                GUICtrlSetState($now,$GUI_DISABLE)
                                                GUICtrlSetState($all,$GUI_DISABLE)
                                                $zhangjietimu=StringSplit($peizhi,"|")
                                                If $zhangjie <>$zhangjietimu Then MsgBox(0,"提醒","查看配置文件,章节设置和题目设置不一致")
                                                Local $ii ;
                                                For $ii=1 To $zhangjie
                                                       Local $sql
                                                        _SQLite_Startup ()
                                                        $hQuery=_SQLite_Open ($SQLite_Data_Path)
                                                        $sql="select * from Testmod where IDs="&$peizhi&";"
                                                ;        MsgBox(0,"配置读取",$sql) ;测试是否正确读取到模块
                                                        _SQLite_Query(-1,$sql,$hQuery)
                                                        if _SQLite_FetchData($hQuery, $aRow) = $SQLITE_OK Then       
                                                                MsgBox(0,"总数2",$aRow&$aRow)
                                                                $zshu=$aRow
                                                                $mokuai=$aRow
                                                        EndIf;模块读取结束得到试题总数和模块名称 为后面选择提供方便
                                                        _SQLite_Close($hQuery)
                                                        _SQLite_Shutdown()
                                                        Local $iii,$jjj,$ti
                                                        for $iii=1 to $zshu ;初始化一个所有题目的数字,为生成试题数组做准备
                                                                ;MsgBox(0,"s",$i)
                                                                $ti[$iii]=$iii
                                                        Next ;$iii
                                                        for $jjj=0 to $zhangjietimu[$ii] ;开始生成试题数组,
                                                                        $tmp=Random(1,$zshu-$jjj,1); 得到数后将得到的下标的序号由ti数组末尾进行填充。
                                                                       
                                                                        $timu[$jjj]=$ti[$tmp]
                                                                        $ti[$tmp]=$ti[$zshu-$jjj]       
                                                                        $sql="select * from "&$mokuai&" where id="&$timu&";"
                                                                        _SQLite_Startup ()
                                                                        $hQuery=_SQLite_Open ($SQLite_Data_Path)
                                                                        _SQLite_Query(-1,$sql,$hQuery)
                                                                        if _SQLite_FetchData($hQuery, $aRow) = $SQLITE_OK Then
                                                                                Local $tmpsql
                                                                                        $tmpsql="INSERT INTO temp VALUES ("&$aRow&","&$aRow&","&$aRow&","&$aRow&","&$aRow&","&""&","&$aRow&")"
                                                                                _SQLite_Exec (-1, $tmpsql)        
                                                                        EndIf
                                                        Next ;$jjj
                                                Next ;$ii
                                EndIf                                ;判断结束
                Else
                        MsgBox(0,"读数据库错!","程序即将退出!")
                        exit
                EndIf
       
EndFunc       

weeew 发表于 2013-5-22 08:34:10

本帖最后由 weeew 于 2013-5-22 08:57 编辑

我要实现的是,在多个表里面读取记录并写到temp表里面的,这些表结构相同
在这个之前数据库没打开过

hzxymkb 发表于 2013-5-22 23:22:55

先打开数据库先!

weeew 发表于 2013-5-23 14:01:43

回复 3# hzxymkb
在 52 53 行有打开数据库啊

tsui 发表于 2013-5-24 13:21:36

5253行放到for循環外,然後_SQLite_FetchData用_SQLite_QueryFinalize結束。

weeew 发表于 2013-5-24 15:02:27

回复 5# tsui

能不能改下我的代码 我不知道加哪里,放到哪个循环外面
我里面有3个循环
一个大的是控制生成哪个新表的
2个小的是为了生成几组不重复的数

tsui 发表于 2013-5-24 16:07:44

_SQLite_Exec前增加一行試試
_SQLite_QueryFinalize($hQuery)

weeew 发表于 2013-5-28 07:44:14

回复 7# tsui


    不行和之前没区别
页: [1]
查看完整版本: 在sqlite操作中遇到database is locked