duno 发表于 2009-5-20 10:32:02

没有,我是读文件的,全放内存里
连数据库要驱动,odbc.dll不是每个机器都有的
(lualuaforge.net/上的luasql项目,下载luasql-2.1.1-odbc-win32-lua51.zip,解压到mushclient)
目录结构

mushClient
   world
   lua
   ...
   luasql
          odbc.dll


建立连接

require "luasql.odbc"

env = assert (luasql.odbc())
con = assert (env:connect ("databaseName", "username", "password"))

ddid 发表于 2009-5-20 12:03:04

谢谢duno啦!

呵呵,其实昨天在研究MUSHClient with SQLite,想参考一下access,没想到把duno的老底掏出来了……

如果是读文件,怎么find字符串?比如,需要通过room_desc中的关键字“络绎不绝”查询到“大驿道”这个room_name

应该没有SELECT好用吧?

duno 发表于 2009-5-20 13:27:15

读文件到内存,以数组(table)方式查找
我没有建索引,效率稍差
筛选时,先以最低筛选条件遍历整个数组筛选出结果的大致范围
然后在此范围内逐渐加强筛选条件
筛选结果有两个
一个以纯粹性为指导,最强筛选条件(如名称,描述,entry必须都符合)
一个以完备性味知道,相对减弱筛选条件(如只要名称描述符合,甚至只要名称符合)

duno 发表于 2009-5-20 13:33:51

sql的东西是看到这个帖子后,回家试验得出的,俺自己没有用数据库
sql要熟悉才好用,本使对access完全不熟悉,昨天试验的时候还想当然的drop table if exists

用sql和自己查数组功能上没有差别,重要的还是熟悉,熟悉的工具成本低,效益高,赚得多,赔得少

[ 本帖最后由 duno 于 2009-5-20 07:42 PM 编辑 ]

ddid 发表于 2009-5-20 17:40:49

误导duno了,sorryyct16

这个问题让duno费这么大劲,惭愧ing

ddid 发表于 2009-5-29 20:29:58

终于搞明白Access怎么连接了:

下载luasql.zip,解压后连带文件夹COPY到MUSHClient目录下,

脚本里的连接方式如下:

-- load the ODBC dll
-- assert (package.loadlib ("odbc.dll", "luaopen_luasqlodbc")) ()
require "luasql.odbc"

-- create environment object
env = assert (luasql.odbc())

-- connect to data source
con = assert (env:connect ("DSN", "username", "password"))

-- do a SQL select
cur = assert (con:execute (select_str))

-- print all rows
row = cur:fetch ({})
table.foreach (row, print)

-- close everything
cur:close()
con:close()
env:close()

需要注意的是,Access本身进行“LIKE”模糊查询时使用的通配符为“*”,但在脚本里必须使用“%”替换该“*”。

Access连接需要自己设定ODBC的DSN,这点比较麻烦,不利于脚本移植,SQLite倒不用,但SQLite需要自己写函数解决GB2312 to UTF-8的编码问题,更加郁闷。

[ 本帖最后由 ddid 于 2009-5-29 08:57 PM 编辑 ]
页: 1 [2]
查看完整版本: maper看过来……