找回密码
 加入
搜索
查看: 4672|回复: 11

[系统综合] (已解决)sqlite数据库插入文件问题

  [复制链接]
发表于 2011-5-26 22:10:19 | 显示全部楼层 |阅读模式
本帖最后由 xiezhang6263 于 2011-6-4 21:14 编辑
#include <SQLite.au3>
#include <SQLite.dll.au3>
$FileTABLE = "FileDATA"
_SQLite_Startup()
FileSaveToDataBase(@ScriptDir & "\值班表.xls", "database.db")
FileLoadFromDataBase(@ScriptDir & "\值班表.xls", "database.db", "值班表.xls")
_SQLite_Shutdown()
Func FileLoadFromDataBase($FileSaveAs, $DB_Filename, $FileNameINDB)
        Local $aRow
        _SQLite_Open($DB_Filename)
        _SQLite_QuerySingleRow(-1, "SELECT * FROM " & $FileTABLE & " WHERE FileName = '" & $FileNameINDB & "';", $aRow)
        If $aRow[0] <> '' Then

                $hFileSaveAs = FileOpen($FileSaveAs, 18)
                FileWrite($hFileSaveAs, Binary($aRow[1]))

        EndIf
        _SQLite_Close()
EndFunc   ;==>FileLoadFromDataBase

Func FileSaveToDataBase($File_Filename, $DB_Filename)
        Local $hFile = FileOpen($File_Filename, 16), $aRow
        $Binary = FileRead($hFile)
        _SQLite_Open($DB_Filename)
        _SQLite_Exec(-1, "CREATE TABLE IF NOT Exists " & $FileTABLE & " (FileName TEXT,DATE Binary);")
        _SQLite_QuerySingleRow(-1, "SELECT FileName FROM " & $FileTABLE & " WHERE FileName = '" & FileGetName($File_Filename) & "';", $aRow)
        $temp = $aRow[0]
        If $temp = "" Then
                $n = 1
                While $n <= 100
                        $RT = _SQLite_Exec(-1, "Insert into " & $FileTABLE & " (FileName) values ('" & FileGetName($File_Filename) & "');")
                        If $RT = $SQLITE_OK Then
                                ExitLoop
                        Else
                                Sleep(300)
                                $n = $n + 1
                        EndIf
                WEnd
                If $RT <> $SQLITE_OK Then Return False
        EndIf
        _SQLite_Exec(-1, "UPDATE " & $FileTABLE & " SET FileName = '" & FileGetName($File_Filename) & "' , DATE = '" & $Binary & "';")

        _SQLite_Close()
EndFunc   ;==>FileSaveToDataBase



Func FileGetName($sFileFullName)
        $sFileName = StringSplit($sFileFullName, '\', 2)
        If IsArray($sFileName) Then
                $sFileName = $sFileName[UBound($sFileName) - 1]
        Else
                $sFileName = $sFileFullName
        EndIf
        Return $sFileName
EndFunc   ;==>FileGetName
如果删除掉存储于数据库中的不再需要的文件以压缩数据库的体积呢?希望能提供删除文件的方法,感谢了!

请问大家有没更加好的办法让文件存放在数据库里面,然后读取出来。谢谢!

先用二进制打开文件,然后用自带的sqlite数据库管理工具编辑数据库。问题解决了。
发表于 2011-5-26 23:09:49 | 显示全部楼层
删除数据后 压缩数据库?
发表于 2011-5-26 23:45:03 | 显示全部楼层
回复 1# xiezhang6263
你的代码是抄别人的吗?
怎么添加的就怎么删除就是了,数据库语法都差不多,跟添加差不多,先判断有没有这个文件,再删除掉!
另外储存文件的话,建议用二进制来读取,否则有些文件是读取不全的!
 楼主| 发表于 2011-5-27 00:19:44 | 显示全部楼层
回复 3# love5173
是学习别人的。呵呵。麻烦给条代码,如何用二进制来读取文件呢?
发表于 2011-5-27 00:24:48 | 显示全部楼层
回复 4# xiezhang6263
FileOpen ( "文件名" [, 模式 ] )




参数

文件名  要打开的文件名.
模式 [可选参数] 指定以何种模式(读或写)打开文件:
可以是下列几种:
  0 = 只读模式(默认)
  1 = 写入模式(附加数据到文件尾部)
  2 = 写入模式(先删除之前的内容)
  8 = 如果目标目录不存在就创建(参考注意).
  16 = 强制使用二进制(字节)模式(参考注意)
  32 = 使用 Unicode UTF16 小编码读写模式,读取不会覆盖存在的BOM.(见下面 thesnow 关于 BOM 的注释)
  64 = 使用 Unicode UTF16 大编码读写模式,读取不会覆盖存在的BOM.
  128 = 使用 Unicode UTF8 (带BOM)读写模式,读取不会覆盖存在的BOM.
  256 = 使用 Unicode UTF8 (无BOM)读写模式.
  16384 = 当打开一个文件读取时(文件没有BOM), 使用完整文件 UTF8 检测. 如果没有使用这一模式,则只会检测文件最前端的 UTF8 标志.
文件夹路径必须存在(如果没有指定模式 '8' - 见注释).
 楼主| 发表于 2011-5-31 20:41:13 | 显示全部楼层
回复 2# wjc826194

是的,不知道这个该如何实现。
发表于 2011-6-1 16:42:17 | 显示全部楼层
删除数据后 压缩数据库?
 楼主| 发表于 2011-6-1 18:34:19 | 显示全部楼层
回复 5# love5173


你好,请问love5173 你那边有没有关于sqlit的实例,我现在只知道在数据库里增删插入读取修改这些简单的操作。
关于文件的操作还真的不会。麻烦love5173 帮帮忙。谢谢,给些实例就好。
 楼主| 发表于 2011-6-1 18:38:23 | 显示全部楼层
回复 3# love5173

我就是想在FileSaveToDataBase,excel文件,doc文件保存在数据库里,这样我就不需要把excel文件,doc文件放到外面,别人也不容易修改了。然后从数据库里读取excel文件,doc文件。
发表于 2011-6-2 08:29:10 | 显示全部楼层
怎么有点看不明白呢
发表于 2011-6-2 10:28:41 | 显示全部楼层
没发现有压缩函数...
发表于 2011-6-2 11:25:47 | 显示全部楼层
在搜索栏输入sqlite 就可以看到别人的例子了
给你发一个吧http://www.autoitx.com/forum.php ... mp;highlight=sqlite
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-10-2 01:26 , Processed in 0.078915 second(s), 22 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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