找回密码
 加入
搜索
查看: 2189|回复: 7

[效率算法] 如何取得SQLite数据库文件的表名及字段名?【已解决】

  [复制链接]
发表于 2016-7-18 14:14:53 | 显示全部楼层 |阅读模式
本帖最后由 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 "
如何改写?
发表于 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;
发表于 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[0], $aNames[1], $aNames[2], $aNames[3]) & @CRLF)
 楼主| 发表于 2016-7-18 21:02:54 | 显示全部楼层
回复 2# 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[0] & @CRLF ; 注意, 读到数据时, 必定储存于 $aRow 这个数组里
WEnd
MsgBox(0, '所有表名', $sNames)

_SQLite_Close()
_SQLite_Shutdown()
 楼主| 发表于 2016-7-20 00:16:32 | 显示全部楼层
回复 5# Alam
$sNames &= $aRow[0] & @CRLF ;
为什么是
 $aRow[0]
 $aRow[1]
等存放什么数据?

在这里表示万分感谢!
发表于 2016-7-20 18:02:19 | 显示全部楼层
回复 6# blue_dvd

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

该数组存放的就是你要查询的结果.
它有多大,有什么数据, 当然要问你要"查询"什么了!
 楼主| 发表于 2016-7-20 23:44:34 | 显示全部楼层
回复 7# Alam

估计没看明白我问什么,不过后来自己想清楚了!
一个值也算是数组。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-15 09:57 , Processed in 0.081799 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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