(已解决)sqlite数据库插入文件问题
本帖最后由 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 <> '' Then
$hFileSaveAs = FileOpen($FileSaveAs, 18)
FileWrite($hFileSaveAs, Binary($aRow))
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
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
Else
$sFileName = $sFileFullName
EndIf
Return $sFileName
EndFunc ;==>FileGetName如果删除掉存储于数据库中的不再需要的文件以压缩数据库的体积呢?希望能提供删除文件的方法,感谢了!
请问大家有没更加好的办法让文件存放在数据库里面,然后读取出来。谢谢!
先用二进制打开文件,然后用自带的sqlite数据库管理工具编辑数据库。问题解决了。 删除数据后 压缩数据库? 回复 1# xiezhang6263
你的代码是抄别人的吗?
怎么添加的就怎么删除就是了,数据库语法都差不多,跟添加差不多,先判断有没有这个文件,再删除掉!
另外储存文件的话,建议用二进制来读取,否则有些文件是读取不全的! 回复 3# love5173
是学习别人的。呵呵。麻烦给条代码,如何用二进制来读取文件呢? 回复 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' - 见注释). 回复 2# wjc826194
是的,不知道这个该如何实现。 删除数据后 压缩数据库? 回复 5# love5173
你好,请问love5173 你那边有没有关于sqlit的实例,我现在只知道在数据库里增删插入读取修改这些简单的操作。
关于文件的操作还真的不会。麻烦love5173 帮帮忙。谢谢,给些实例就好。 回复 3# love5173
我就是想在FileSaveToDataBase,excel文件,doc文件保存在数据库里,这样我就不需要把excel文件,doc文件放到外面,别人也不容易修改了。然后从数据库里读取excel文件,doc文件。 怎么有点看不明白呢 没发现有压缩函数... 在搜索栏输入sqlite 就可以看到别人的例子了
给你发一个吧http://www.autoitx.com/forum.php?mod=viewthread&tid=1965&highlight=sqlite
页:
[1]