失落之杖 发表于 2017-6-13 22:42:37

sql驱动的问题,发送sql报错。

程序遇到了一点问题。环境delphi xe8 有64位支持mysql5.1-32位,windows7 64位系统,因为高版本的mysql连接不上delphi只能使用5.1的,然后今天在测试客户端发送sql到服务器时弹出错误如下图所示。

意思我找不到dbxmys.dll在系统内的路径(百度翻译)。然后我尝试把xe8的bin目录和bin64下的dbxmys复制到System32和SysWOW64并测试,依旧不行,有时还会报错驱动错误。然后我把xe8的bin64的64位dbxmys复制到bin里覆盖掉32位的,切换尝试后发现;如果bin内使用32位的dbxmys.dll则会报错:找不到dbxmys.dll在系统内的路径。如果是64位的则会报错:驱动错误。
xe8的bin文件夹同级目录,以及项目的目录都复制过去了尝试过了,无法解决问题。
驱动错误的报错和使用高版本的mysql是一样的,会在一开始测试数据库的时候就失败,而使用32位的能测试通过,但在客户端发送sql的时候会报错。
下图这是驱动错误。

失落之杖 发表于 2017-6-14 19:59:54

本帖最后由 失落之杖 于 2017-6-14 20:07 编辑

问题已经解决,昨晚搞了半天,实在无法理解其中的逻辑,只能肯定有一个是对的,而且大概率是32位的,因为32位报错的范围要比64位的小,也就是说32位的dll其实位置是正确的,但是因为其他原因才报错。然后今天完了下游戏放松一下。在吃晚饭时想起整个流程,发现可能是一开始纠结于高版本mysql的时候乱调导致的,而其中给我印象最深的一个调整是服务端的32位和64位模式。我想这个非常有可能是问题所在。
在调整为32位之后再开启客户端测试,发现可以读取到数据库数据了。
当然客户端也必须是32模式不然会报错下图

改为32位后成功读取数据库信息

失落之杖 发表于 2017-6-15 06:08:37

执行sql时出现问题cannot perform this operation on an open dataset
SELECT * FROM visit_log;可以执行,但把*修改为具体的字段名则报错。
尝试修改下图的位置

图中标记的地方在建立服务器时用于测试打开了true并填写了具体的sql:SELECT * FROM visit_log;。
将其去掉关闭能解决以上问题。
页: [1]
查看完整版本: sql驱动的问题,发送sql报错。