找回密码
 加入
搜索
查看: 6343|回复: 7

[系统综合] 在sqlite操作中遇到database is locked

  [复制链接]
发表于 2013-5-22 08:33:19 | 显示全部楼层 |阅读模式
在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[1],"|")
                                _SQLite_Close($hQuery)
                                _SQLite_Shutdown()
                                If @error=1 Then  ;判断是否读到间隔符,如果读不到安单章处理,读到进行选择试题
                                          Switch $peizhi[1]
                                                        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[3],"|")
                                                If $zhangjie[0] <>$zhangjietimu[0] Then MsgBox(0,"提醒","查看配置文件,章节设置和题目设置不一致")
                                                Local $ii ;
                                                For $ii=1 To $zhangjie[0] 
                                                         Local $sql
                                                        _SQLite_Startup () 
                                                        $hQuery=_SQLite_Open ($SQLite_Data_Path)
                                                        $sql="select * from Testmod where IDs="&$peizhi[1]&";"
                                                ;        MsgBox(0,"配置读取",$sql) ;测试是否正确读取到模块
                                                        _SQLite_Query(-1,$sql,$hQuery)
                                                        if _SQLite_FetchData($hQuery, $aRow) = $SQLITE_OK Then         
                                                                MsgBox(0,"总数2",$aRow[1]&$aRow[2])
                                                                $zshu=$aRow[2]
                                                                $mokuai=$aRow[1]
                                                        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[0]&";"
                                                                        _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[0]&","&$aRow[1]&","&$aRow[2]&","&$aRow[3]&","&$aRow[4]&","&""&","&$aRow[6]&")"
                                                                                _SQLite_Exec (-1, $tmpsql)         
                                                                        EndIf
                                                        Next ;$jjj
                                                Next ;$ii
                                EndIf                                ;判断结束
                Else
                        MsgBox(0,"读数据库错!","程序即将退出!")
                        exit
                EndIf
        
EndFunc        
 楼主| 发表于 2013-5-22 08:34:10 | 显示全部楼层
本帖最后由 weeew 于 2013-5-22 08:57 编辑

我要实现的是,在多个表里面读取记录并写到temp表里面的,这些表结构相同
在这个之前数据库没打开过
发表于 2013-5-22 23:22:55 | 显示全部楼层
先打开数据库先!
 楼主| 发表于 2013-5-23 14:01:43 | 显示全部楼层
回复 3# hzxymkb
在 52 53 行有打开数据库啊
发表于 2013-5-24 13:21:36 | 显示全部楼层
5253行放到for循環外,然後_SQLite_FetchData用_SQLite_QueryFinalize結束。
 楼主| 发表于 2013-5-24 15:02:27 | 显示全部楼层
回复 5# tsui

能不能改下我的代码 我不知道加哪里,放到哪个循环外面
我里面有3个循环
一个大的是控制生成哪个新表的
2个小的是为了生成几组不重复的数
发表于 2013-5-24 16:07:44 | 显示全部楼层
_SQLite_Exec前增加一行試試
_SQLite_QueryFinalize($hQuery)
 楼主| 发表于 2013-5-28 07:44:14 | 显示全部楼层
回复 7# tsui


    不行和之前没区别
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-16 08:53 , Processed in 0.079733 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表