找回密码
 加入
搜索
楼主: heroxianf

[效率算法] 如何转为Sqlite进行储存和读取呢 请求帮助[已解决]

 火.. [复制链接]
发表于 2016-10-26 11:41:18 | 显示全部楼层
回复  chzj589

    你運行的是哪個例子
kk_lee69 发表于 2016-10-26 11:28


MSSQL - 数据库操作例子
http://www.autoitx.com/forum.php ... B%CA%FD%BE%DD%BF%E2
发表于 2016-10-26 13:41:37 | 显示全部楼层
回复 30# heroxianf

你原本的  _SQLite_Exec(-1, '"Create table tblTest (' & $var & ')"')
送出去的SQL是  " Create table tblTest (TEST)"


而 下面的  _SQLite_Exec(-1, "Create table tblTest (test)")
送出去的SQL是   Create table tblTest (TEST)

這兩個SQL  是不一樣的

另外  試看看
For $i = 1 to 100
_SQLite_Exec($path, "Create table tblTest (" & $i & ")")
SLEEP(1000)
Next

給程式一點反應時間
发表于 2016-10-26 13:44:28 | 显示全部楼层
回复 31# chzj589

這個是 操作MSSQL 的範例  你有MSSQL 的軟體嗎???

你沒主機的話 當然無法建立.....
 楼主| 发表于 2016-10-26 13:49:32 | 显示全部楼层
本帖最后由 heroxianf 于 2016-10-26 13:51 编辑

回复 32# kk_lee69

没有成功,我加载的是外部sqlit3.dll。创建的TEST.DB 是0字节的

   
#AutoIt3Wrapper_UseX64=n
#include <MsgBoxConstants.au3>
#include <SQLite.au3>
#include <Array.au3>
;~ #include <SQLite.dll.au3>


Local $path = 'test.db'
Local $hQuery, $aRow

_SQLite_Startup()
ConsoleWrite("SQLite 库版本 = " & _SQLite_LibVersion() & @CRLF)
_SQLite_Open($path)

For $i = 1 to 5
_SQLite_Exec($path, "Create table tblTest (" & $i & ")")
SLEEP(1000)
Next

_SQLite_Close()
_SQLite_Shutdown()
发表于 2016-10-26 13:52:04 | 显示全部楼层
回复 34# heroxianf

_SQLite_Exec($path, "Create table tblTest (" &"A" &$i & ")")

試看看  不確定 允不允許 開頭為數字
 楼主| 发表于 2016-10-26 13:59:18 | 显示全部楼层
本帖最后由 heroxianf 于 2016-10-26 14:00 编辑

回复 35# kk_lee69

_SQLite_Exec($path, "Create table tblTest (" &"A" &$i & ")")
这句还是不行,依然是0字节的test.db   不过把$path改成 -1 可以创建一个,只能是 A1

_SQLite_Exec(-1, "Create table tblTest (" &"A" &$i & ")")




下面是错误提示

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
 楼主| 发表于 2016-10-26 14:08:11 | 显示全部楼层
本帖最后由 heroxianf 于 2016-10-26 14:09 编辑

回复 35# kk_lee69

似乎我理解错了,这样就正确了,创建了表单,   那表单创建好了剩下就是往表单下添加数据,和去重处理了。似乎有成功了一点点。

_SQLite_Exec(-1, "Create table " & "TEST" & $i & " (test)")


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2016-10-26 14:10:16 | 显示全部楼层
回复 36# heroxianf


    上面的錯誤訊息  很明顯地告訴你.....

你的語法根本整個錯誤

首先 你要理解  甚麼叫做 資料庫  甚麼叫做 資料表   甚麼叫做欄位

換成 EXCEL 邏輯是  資料庫  等同 EXCEL檔案  資料表 等同活頁    欄位 就是 A1 B1 C1 的格子

你的語法 Create table tblTest (A1)   這裡的 語法叫做  Create table  而 資料表叫做 tblTest  A1 是欄位名

所以 你一直要 重複建立  tblTest    他一直再告訴你  TABLE  tblTest 已經 存在
 楼主| 发表于 2016-10-26 14:14:42 | 显示全部楼层
回复 38# kk_lee69

这个是个问题  我不晓得这个资料库、资料表应该如何建立和设计,按照这样说,A1下面还可以创建什么表?
发表于 2016-10-26 14:15:26 | 显示全部楼层
本帖最后由 kk_lee69 于 2016-10-26 14:18 编辑

回复 37# heroxianf

在我說之前 你已經發現了~~~~


但是  資料庫通常不會這樣設計  除非你另外有原因........

理論上  假設 你有10個活頁  每個活頁的  A B C D  四行都有資料

你現在的邏輯是  建立 10個 表  去放 每個 活頁的 ABCD

如果是我 則會 建立一個表   裡面有   活頁名  A B C D

然後把10個活頁的東西  全部放在這個表下面 就好
這樣 只要用 SQL 語法  Where 活頁名=某某  就可以抓出那個活頁的資料
 楼主| 发表于 2016-10-26 14:21:34 | 显示全部楼层
回复 40# kk_lee69

谢谢指导,下来好好消化一下做点测试,我现在才算了解了一点点。
发表于 2016-10-26 15:43:05 | 显示全部楼层
回复 33# kk_lee69

是将SQL数据库建立在主机,难怪连接不上。
谢谢解答!
发表于 2016-10-26 21:50:59 | 显示全部楼层
回复 10# heroxianf

SQL的读取操作,其实不算难,但是语句的写法有时相当繁琐,有时差一个空格或单引号,就无法得到正确结果了.

看点简单的示例吧.
#PRE_UseX64 = no ; 64位系统下工作模式最好转为32位
#include <SQLite.au3>
#include <SQLite.dll.au3>
#include <array.au3>
Local $dbFile = @ScriptDir & '\MY.DB'
If FileExists($dbFile) Then FileDelete($dbFile)
Local $my_TABLE = '物品清单 (肉类, 水果, 蔬菜, 家具, 备注);'

_SQLite_Startup(@ScriptDir & '\sqlite3.dll') ;
If @error Then
    MsgBox(16, "无法加载 SQLite3.dll", "请注意此文件是否存在并可以调用!")
    Exit -1
EndIf

$hDb = _SQLite_Open($dbFile)
If @error Then
    MsgBox(16, "SQLite Error", "创建数据库失败!")
    Exit -1
EndIf


#region ;建立新表
_SQLite_Exec($hDB, 'CREATE TABLE IF NOT EXISTS ' & $my_TABLE) ;表不存在,则建立新表
;注意,每条SQL语句,都以分号";"为结尾.
;_SQLite_Exec($hDB, 'DROP TABLE ' & $my_TABLE & ';') ; 删除表
#endregion


#region ;插入记录
Local $sMeat = '牛肉', $sFruit = '苹果'
;Local $sEXEC = "insert into 物品清单 VALUES ('牛肉', '苹果', '白菜', '桌子', '10-2-5-1');" 
; inset into ... 插入一条新记录
Local $sEXEC = "insert into 物品清单 VALUES ('" & $sMeat & "', '" & $sFruit & "', '白菜', '桌子', '3-2-5-1');"
;增加一条记录
;注意单引号的使用,尤其加入变量后,写法极为繁琐.
_SQLite_Exec($hdb, $sEXEC) 

$sEXEC = "insert into 物品清单 VALUES ('猪肉', '桔子', '花菜', '椅子', '7-5-8-6');"
_SQLite_Exec($hdb, $sEXEC) 

$sEXEC = "insert into 物品清单 VALUES ('', '', '生菜', '', '');"
_SQLite_Exec($hdb, $sEXEC) 
#endregion


#region ;查询数据
Local $aRow, $hQuery, $sOut = '', $sQuery

_SQLite_Query($hDb, "select * from 物品清单;", $hQuery) ;查询表中所有数据
_SQLite_FetchNames ( $hQuery, $aRow) ;获取所有列名
If IsArray($aRow) Then
        For $i = 0 To UBound($aRow)-1
                $sOut &=  @TAB & $aRow[$i]
        Next
        ConsoleWrite(@CRLF & '物品清单 该表所有数据如下:' & @CRLF & $sOut &@CRLF) ;先输出所有列名称
EndIf        

;ConsoleWrite(@CRLF & '下面将输出表中所有数据:')
While _SQLite_FetchData($hQuery, $aRow) = $sqlite_ok;查到有效数据
        $sOut = ''
        For $i = 0 To UBound($aRow)-1
                $sOut &=  @TAB & $aRow[$i]
        Next
    ConsoleWrite(@CRLF & $sOut & @CRLF) ;查到并输出每一行数据
WEnd
#endregion

#region ;更新数据
$sEXEC = "UPDATE 物品清单 SET 肉类 = '羊肉', 水果 = '香蕉', 家具 = '柜子', 备注 = '17-5-8-16' WHERE 蔬菜 = '生菜';"
_SQLite_Exec($hdb, $sEXEC) 

;查询更新后的数据
_SQLite_Query($hDb, "select 水果, 备注 from 物品清单 WHERE 蔬菜 = '生菜';", $hQuery) ;按需查询数据
_SQLite_FetchNames ( $hQuery, $aRow) ;获取要查询的列名
If IsArray($aRow) Then
        $sOut = ''
        For $i = 0 To UBound($aRow)-1
                $sOut &=  @TAB & $aRow[$i]
        Next
        ConsoleWrite(@CRLF & '按需查询到的数据:' & @CRLF & $sOut);先输出列
EndIf        

While _SQLite_FetchData($hQuery, $aRow) = $sqlite_ok;查到有效数据
        $sOut = ''
        For $i = 0 To UBound($aRow)-1
                $sOut &=  @TAB & $aRow[$i]
        Next
    ConsoleWrite(@CRLF & $sOut & @CRLF);按行输出查到的数据
WEnd
#region
;删除上面刚更新过的那条记录  
;_SQLite_Exec($hdb, "delete from 物品清单 WHERE 蔬菜 = '生菜';") 

_SQLite_Close()
_SQLite_Shutdown()

评分

参与人数 1金钱 +30 收起 理由
heroxianf + 30

查看全部评分

 楼主| 发表于 2016-10-26 22:50:50 | 显示全部楼层
回复 43# Alam


  太谢谢了,
发表于 2016-10-27 11:40:03 | 显示全部楼层
本帖最后由 chzj589 于 2016-10-27 11:41 编辑

回复 24# kk_lee69
这个如何修改:
Func _ButtonReset()
        ;Case $Msg = $GUI_ButtonReset;更改
        If ThisStringIsEmpty($GUI_Input2) Then
                MsgBox(0, "错误提示..", "目前只能通过编号更改,请输入编号!")
                ThisInputClear()
        Else
                SQLiteUpateName($TableName, GUICtrlRead($GUI_Input1), GUICtrlRead($GUI_Input2), GUICtrlRead($GUI_Input3), GUICtrlRead($GUI_Input4), GUICtrlRead($GUI_Input5), GUICtrlRead($GUI_Input6), GUICtrlRead($GUI_Input7), GUICtrlRead($GUI_Input8), GUICtrlRead($GUI_Input9))
        EndIf
EndFunc   ;==>_ButtonReset
;keyValue是匹配健  namevalue是新名字
Func SQLiteUpateName($TableName, $keyValue,  $nameValue, $AgeValue)



"F:\SQLite 数据库\TestSqllitea.au3"(430,68) : 错误: SQLiteUpateName() 函数调用行有 10 个参数. 函数定义需要参数最多 = 4. 此函数首次调用在行: 426.
Func SQLiteUpateName($TableName, $keyValue,  $nameValue, $AgeValue)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-12-23 08:15 , Processed in 0.076887 second(s), 18 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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