chzj589
发表于 2016-10-26 11:41:18
回复chzj589
你運行的是哪個例子
kk_lee69 发表于 2016-10-26 11:28 http://www.autoitx.com/images/common/back.gif
MSSQL - 数据库操作例子
http://www.autoitx.com/forum.php?mod=viewthread&tid=44397&highlight=MSSQL%2B%CA%FD%BE%DD%BF%E2
kk_lee69
发表于 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
給程式一點反應時間
kk_lee69
发表于 2016-10-26 13:44:28
回复 31# chzj589
這個是 操作MSSQL 的範例你有MSSQL 的軟體嗎???
你沒主機的話 當然無法建立.....
heroxianf
发表于 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()
kk_lee69
发表于 2016-10-26 13:52:04
回复 34# heroxianf
_SQLite_Exec($path, "Create table tblTest (" &"A" &$i & ")")
試看看不確定 允不允許 開頭為數字
heroxianf
发表于 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 & ")")
下面是错误提示
heroxianf
发表于 2016-10-26 14:08:11
本帖最后由 heroxianf 于 2016-10-26 14:09 编辑
回复 35# kk_lee69
似乎我理解错了,这样就正确了,创建了表单, 那表单创建好了剩下就是往表单下添加数据,和去重处理了。似乎有成功了一点点。
_SQLite_Exec(-1, "Create table " & "TEST" & $i & " (test)")
kk_lee69
发表于 2016-10-26 14:10:16
回复 36# heroxianf
上面的錯誤訊息很明顯地告訴你.....
你的語法根本整個錯誤
首先 你要理解甚麼叫做 資料庫甚麼叫做 資料表 甚麼叫做欄位
換成 EXCEL 邏輯是資料庫等同 EXCEL檔案資料表 等同活頁 欄位 就是 A1 B1 C1 的格子
你的語法 Create table tblTest (A1) 這裡的 語法叫做Create table而 資料表叫做 tblTestA1 是欄位名
所以 你一直要 重複建立tblTest 他一直再告訴你TABLEtblTest 已經 存在
heroxianf
发表于 2016-10-26 14:14:42
回复 38# kk_lee69
这个是个问题我不晓得这个资料库、资料表应该如何建立和设计,按照这样说,A1下面还可以创建什么表?
kk_lee69
发表于 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 活頁名=某某就可以抓出那個活頁的資料
heroxianf
发表于 2016-10-26 14:21:34
回复 40# kk_lee69
谢谢指导,下来好好消化一下做点测试,我现在才算了解了一点点。
chzj589
发表于 2016-10-26 15:43:05
回复 33# kk_lee69
是将SQL数据库建立在主机,难怪连接不上。
谢谢解答!
Alam
发表于 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()
heroxianf
发表于 2016-10-26 22:50:50
回复 43# Alam
太谢谢了,
chzj589
发表于 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)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^