blue_dvd 发表于 2016-7-18 14:14:53

如何取得SQLite数据库文件的表名及字段名?【已解决】

本帖最后由 blue_dvd 于 2016-7-20 23:45 编辑

如何取得SQLite数据库文件的表名?
$g_sql="SELECT name FROM sqlite_master WHERE type='table' order by name "
Local $hQuery
_SQlite_Query (-1, $g_sql, $hQuery)

MsgBox("","数据库表名为",$sTemp)

找了好久都找不到AU3中如何操作?请高手指点。

请教
$g_sql="SELECT name FROM sqlite_master WHERE type='table' order by name "
如何改写?

Alam 发表于 2016-7-18 17:58:41

节选自官方文档From within a C/C++ program (or a script using Tcl/Ruby/Perl/Python bindings) you can get access to table and index names by doing a SELECT on a special table named "SQLITE_MASTER". Every SQLite database has an SQLITE_MASTER table that defines the schema for the database.
查询一个数据库中,所有表名(SQLITE3)SELECT name FROM sqlite_master
WHERE type='table'
ORDER BY name;

Alam 发表于 2016-7-18 18:00:12

查询字段名(列),AU3帮助自带的示例中就有._SQLite_Query(-1, "SELECT ROWID,* FROM aTest ORDER BY a;", $hQuery)
_SQLite_FetchNames($hQuery, $aNames)
ConsoleWrite(StringFormat(" %-10s%-10s%-10s%-10s ", $aNames, $aNames, $aNames, $aNames) & @CRLF)

blue_dvd 发表于 2016-7-18 21:02:54

回复 2# Alam

取字段名没问题了,取表名还有没搞定!

Alam 发表于 2016-7-19 18:23:51

回复 4# blue_dvd

可以的,应该是你没搞对.
下面代码通过测试,可以得到正确表名.#Region ;**** 参数创建于 ACNWrapper_GUI ****
#PRE_UseX64=n
#PRE_Res_requestedExecutionLevel=None
#EndRegion ;**** 参数创建于 ACNWrapper_GUI ****

#include <SQLite.au3>
#include <SQLite.dll.au3>
#include <File.au3>

_SQLite_Startup('sqlite3.dll')
If @error Then
        MsgBox(16, "SQLite Error", "SQLite3.dll Can't be Loaded!")
        Exit -1
EndIf
_SQLite_Open('mydat.dat') ; open :memory: Database

;#cs
_SQLite_Exec(-1, "CREATE TABLE Table1 (A,B,C);")
_SQLite_Exec(-1, "INSERT INTO Table1(a,b,c) VALUES ('c','2','World');")
_SQLite_Exec(-1, "INSERT INTO Table1(a,b,c) VALUES ('b','3',' ');")
_SQLite_Exec(-1, "INSERT INTO Table1(a,b,c) VALUES ('a','1','Hello');")
;_SQLite_Query(-1, "SELECT ROWID,* FROM Table1 ORDER BY a;", $hQuery)
_SQLite_Exec(-1, "CREATE TABLE Table2 (A,B,C);")
_SQLite_Exec(-1, "INSERT INTO Table2(a,b,c) VALUES ('c','2','World');")
_SQLite_Exec(-1, "INSERT INTO Table2(a,b,c) VALUES ('b','3',' ');")
_SQLite_Exec(-1, "INSERT INTO Table2(a,b,c) VALUES ('a','1','Hello');")
;#ce



Local $hQuery, $aRow, $sNames = ''
_SQLite_Query(-1, "SELECT name FROM sqlite_master WHERE type='table' ORDER BY name;", $hQuery)
While _SQLite_FetchData($hQuery, $aRow) = $SQLITE_OK ;能读到有效数据
    $sNames &= $aRow & @CRLF ; 注意, 读到数据时, 必定储存于 $aRow 这个数组里
WEnd
MsgBox(0, '所有表名', $sNames)

_SQLite_Close()
_SQLite_Shutdown()

blue_dvd 发表于 2016-7-20 00:16:32

回复 5# Alam
$sNames &= $aRow & @CRLF ;
为什么是 $aRow $aRow等存放什么数据?

在这里表示万分感谢!

Alam 发表于 2016-7-20 18:02:19

回复 6# blue_dvd

为什么还问为什么?
上面示例不是加点注释嘛:
   注意, 读到数据时, 必定储存于 $aRow 这个数组里.
   当然注释用语不精确, "读"应该改为"查询".

该数组存放的就是你要查询的结果.
它有多大,有什么数据, 当然要问你要"查询"什么了!

blue_dvd 发表于 2016-7-20 23:44:34

回复 7# Alam

估计没看明白我问什么,不过后来自己想清楚了!
一个值也算是数组。
页: [1]
查看完整版本: 如何取得SQLite数据库文件的表名及字段名?【已解决】