找回密码
 加入
搜索
楼主: 不是小灵通

[网络通信] 【含代码】帮忙分析一下为什么exe在其他电脑上不能连接MySQL数据库

[复制链接]
发表于 2021-4-4 22:27:15 | 显示全部楼层
如果需要将Dll拷贝到系统目录。
如果操作系统是64位。
当程序编译成32位的时候。Dll需要拷贝到C:\Windows\SysWOW64目录下,而不是C:\Windows\System32

在64位系统下,C:\Windows\System32下存放的都是64位的DLL
 楼主| 发表于 2021-4-5 10:40:50 | 显示全部楼层
kk_lee69 发表于 2021-4-4 17:40
你確定 你的 MYSQL 有開放 其他電腦的連接??    MYSQL 內定 只接受 本機的連接   不接受任何其他電腦連接 ...

谢谢版主,我的库用的主机是%,其他电脑是可以访问到的
我好像做了个乌龙事,一心想着程序把libmysql.dll放去windows32去了,所以没法连接数据库
gyp2000朋友提醒了要放在程序运行的目录,果然可以使用了
明天程序放出去学生机测试下

感谢大家支持,回头汇报是否成功!
 楼主| 发表于 2021-4-5 10:44:20 | 显示全部楼层
gyp2000 发表于 2021-4-4 22:16
测试发现,你的问题就是程序当前目录没有 libmysql.dll 如果当前目录无libmysql.dll 运行的时候就会跳出 空 ...

感谢提醒,有时候人想法就是一根筋
我把libmysql.dll放windows32里面去了。。。
Global $FTP244_RemoteFile = "" & @OSArch & "\libmysql.dll"
Global $FTP244_LocalFile = "C:\Windows\System32\libmysql.dll"
目前其他的测试电脑可以正常运行了,明天放去学生机测试一下,然后向各位大神汇报,不行再来请教
发表于 2021-4-5 11:30:26 | 显示全部楼层
不是小灵通 发表于 2021-4-5 10:44
感谢提醒,有时候人想法就是一根筋
我把libmysql.dll放windows32里面去了。。。
Global $FTP244_Remote ...

MYSQL数据库没学过,能把<mysql.au3>发出来学习学习
 楼主| 发表于 2021-4-5 11:37:01 | 显示全部楼层
gyp2000 发表于 2021-4-4 22:27
如果需要将Dll拷贝到系统目录。
如果操作系统是64位。
当程序编译成32位的时候。Dll需要拷贝到C:\Windows ...

难怪。。。感谢指教!
 楼主| 发表于 2021-4-5 11:57:35 | 显示全部楼层
chzj589 发表于 2021-4-5 11:30
MYSQL数据库没学过,能把发出来学习学习

真是抱歉,有几年没琢磨mysql了,当时也是一知半解
这次是一时要用到才临时抱佛脚,环境是以前就搭建好的,现在也不太明白
给个帖子你去看下:https://www.autoitx.com/forum.php?mod=viewthread&tid=5273
或者论坛搜索一下mysql的资料
大致好像有两种模式,一种dll的,一种obdc的,我当时也只试了前者,也没总结出来各自的优缺点
mysql.au3需要装在开发电脑的Include文件夹中,还需要一个libmysql.dll文件(分X86,X64版本),用户电脑也需要存在libmysql.dll文件,我这次遇到的问题就是文件位置放的不对,以前没理解透
发表于 2021-4-5 12:47:02 | 显示全部楼层
谢谢!有学过SQLite和ACCESS数据库,还没学过mysql
发表于 2021-4-5 13:55:51 | 显示全部楼层
不是小灵通 发表于 2021-4-5 11:57
真是抱歉,有几年没琢磨mysql了,当时也是一知半解
这次是一时要用到才临时抱佛脚,环境是以前就搭建好 ...

不错!待进一步学习


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
 楼主| 发表于 2021-4-5 14:06:24 | 显示全部楼层
chzj589 发表于 2021-4-5 13:55
不错!待进一步学习

顺便再弄个供领导使用的查询exe,他们不会Navicat
可以按学号,或者日期/院系/班级查询,顺便试一下将子窗体定义成函数
mysql查询(模糊日期)语句是
SELECT
stu_info.stu_num,
stu_info.stu_name,
stu_info.stu_college,
stu_info.stu_class,
stu_login.pc_ip,
stu_login.pc_name,
stu_login.login_time
FROM
stu_info
INNER JOIN stu_login ON stu_info.stu_num = stu_login.stu_num
WHERE
stu_login.login_time LIKE '%04-05%'
 楼主| 发表于 2021-4-5 14:11:50 | 显示全部楼层
chzj589 发表于 2021-4-5 13:55
不错!待进一步学习

这个配色真好看,回头按你的改下
 楼主| 发表于 2021-4-5 18:36:15 | 显示全部楼层
#Region ;**** 参数创建于 ACNWrapper_GUI ****
#AutoIt3Wrapper_icon=C:\Windows\system32\SHELL32.dll|-23
#AutoIt3Wrapper_UseUpx=n
#EndRegion ;**** 参数创建于 ACNWrapper_GUI ****
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>

#include <array.au3>
#include "mysql.au3"
#include <Date.au3>
#include <Timers.au3>
#include <FTPEx.au3>

#include <Excel.au3>



;FTP服务器参数
Global $FTP244_IP = "192.168.0.1"
Global $FTP244_Port = 21
Global $FTP244_User = "abc1"
Global $FTP244_PW = "abc2"
Local $FTP244_Open = 0
Local $FTP244_Connect = 0
Global $FTP244_RemoteFile = "\x86\libmysql.dll";判断本机OS位数,分别定向于X86或X64文件夹
Global $FTP244_LocalFile = @ScriptDir & "\libmysql.dll"
Global $File244_found = 0

;管理服务器参数
Global $serverIP = "192.168.0.2"
Global $conname = "2021"
Global $userID = "abc3"
Global $userPD = "abc4"
Global $DBname = "ordersys"

Local $Ver = "V1.0.0.200"
Local $pc_ip = ""
Local $pc_name = ""
Local $Input1 = ""
Local $Input2 = ""
Local $login = 0

Global $stu_num = ""
Global $stu_name=""
Global $stu_college = ""
Global $stu_class = ""
Global $order_code = ""

Global $date=""

;~ Global $search_Labe2l=""

;================环境检测,核实是否存在必要的libmysql.dll,没有就去244下载一个,直至成功==================OK!
If Not FileExists($FTP244_LocalFile) Then
        getdll()
EndIf

#Region ### START Koda GUI section ### Form=d:\au3\教学运行管理系统\查询工具-主.kxf
$WinMain = GUICreate("共享计算机实验室签到记录查询工具", 615, 275, 200, 124)
GUICtrlSetFont(-1, 20, 400, 0, "微软雅黑")
GUISetBkColor(0x008099)
$Label1 = GUICtrlCreateLabel("共享计算机实验室签到记录查询工具", 96, 48, 420, 36)
GUICtrlSetColor(-1, 0xFFFFFF)
GUICtrlSetFont(-1, 20, 400, 0, "微软雅黑")
$Button1 = GUICtrlCreateButton("按日期查询", 64, 148, 75, 25)
$Button2 = GUICtrlCreateButton("按姓名查询", 195, 148, 75, 25)
GUICtrlSetState(-1, $GUI_DISABLE)
$Button3 = GUICtrlCreateButton("按院系查询", 325, 148, 75, 25)
GUICtrlSetState(-1, $GUI_DISABLE)
$Button4 = GUICtrlCreateButton("按班级查询", 456, 148, 75, 25)
GUICtrlSetState(-1, $GUI_DISABLE)

$Label2 = GUICtrlCreateLabel("计算机实验室", 424, 240, 76, 17)
$Label3 = GUICtrlCreateLabel($Ver, 512, 240, 36, 17)


$WinSub = GUICreate("请输入查询条件", 615, 142, 200, 224)
$Sub_Label = GUICtrlCreateLabel("", 56, 32, 360, 17)
GUICtrlSetColor(-1, 0xFF0000)
$Sub_Input = GUICtrlCreateInput("", 120, 72, 121, 21)

$Sub_Button1 = GUICtrlCreateButton("搜索并导出至EXCEL文件", 250, 72, 175, 25)
$Sub_Button2 = GUICtrlCreateButton("返回", 456, 72, 75, 25)
;~ $Sub_Button3 = GUICtrlCreateButton("导出", 304, 100, 75, 25)

GUISwitch($WinMain)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit
                Case $Button1
;~                         GUISetState(@SW_HIDE,$WinMain)
                        GUISetState(@SW_SHOW,$WinSub)
                        GUICtrlSetData($Sub_Label, "请输入要查询的日期(格式:YYYY-MM-DD,允许关键字模糊):")
                        $date=@MON & "-" & @MDAY
;~                         MsgBox(0,"testdate1",$date)
                        GUICtrlSetData($Sub_Input, $date)

;~                         box()

                        Case $Button2
;~                         GUISetState(@SW_HIDE,$WinMain)
                        GUISetState(@SW_SHOW,$WinSub)
                        GUICtrlSetData($Sub_Label, "请输入要查询的姓名(允许关键字模糊):")
                        GUICtrlSetData($Sub_Input, "")
                Case $Button3
;~                         GUISetState(@SW_HIDE,$WinMain)
                        GUISetState(@SW_SHOW,$WinSub)
                        GUICtrlSetData($Sub_Label, "请输入要查询的院系(允许关键字模糊):")
                        GUICtrlSetData($Sub_Input, "")
                Case $Button4
;~                         GUISetState(@SW_HIDE,$WinMain)
                        GUISetState(@SW_SHOW,$WinSub)
                        GUICtrlSetData($Sub_Label, "请输入要查询的班级(允许关键字模糊):")
                        GUICtrlSetData($Sub_Input, "")

                        Case $Sub_Button1
                        $date = GUICtrlRead($Sub_Input);刷新刚才输入的输入框数据
;~                         MsgBox(0,"testdate2",$date)
                        $query="SELECT " _;换行格式(行尾:" _,注意带个空格。换行后:&")
                                &"stu_info.stu_num,stu_info.stu_name,stu_info.stu_college,stu_info.stu_class,stu_login.pc_ip,stu_login.pc_name,stu_login.login_time " _
                                &"FROM stu_info " _
                                &"INNER JOIN stu_login ON stu_info.stu_num = stu_login.stu_num " _
                                &"WHERE stu_login.login_time LIKE '%" & $date & "%'"
;~                                 MsgBox(0,"测试——待写入MySQL的语句",$query)
                        readdb($query)
                Case $Sub_Button2
                        GUISetState(@SW_HIDE,$WinSub)
;~                         GUISetState(@SW_SHOW,$WinMain)
;~                 Case $Sub_Button3




        EndSwitch
WEnd


Func getdll();OK---检验本地system32有无“libmysql.dll”文件,若无,则根据X86或X64,从FTP服务器分别下载相应版本的libmysql.dll文件
        Do
                $FTP244_Open = _FTP_Open("WHTCC_FTP");创建一个FTP会话
                If $FTP244_Open = 0 Then;判断创建会话是否成功
                        MsgBox(0, "错误", "本机创建会话失败!")
                        ContinueLoop
                EndIf;结束判断

                $FTP244_Connect = _FTP_Connect($FTP244_Open, $FTP244_IP, $FTP244_User, $FTP244_PW, $FTP244_Port);_FTP_Connect($l_InternetSession, $s_ServerName, $s_Username, $s_Password
                If $FTP244_Connect = 0 Then;连接失败
                        Beep(80, 100)
                        MsgBox(64, "连接服务器失败", "发生此错误的可能性:" & @CRLF & @CRLF & "    1、服务器IP是否正确?" & @CRLF & "    2、用户名/密码是否不匹配?" & @CRLF & "    3、线路故障?" & @CRLF & @CRLF & "请核对后重试...")
                EndIf;判断结束

                _FTP_FileGet($FTP244_Connect, $FTP244_RemoteFile, $FTP244_LocalFile)
                $File244_found = _FTP_FileGet($FTP244_Connect, $FTP244_RemoteFile, $FTP244_LocalFile);成功则为1,否则0
                _FTP_Close($FTP244_Open)
               
                If FileExists($FTP244_LocalFile) Then;检测文件是否已下载成功
                        ;MsgBox(4096, "环境检测", $FTP244_LocalFile &"下载已成功")
                Else
                        If MsgBox(4, "环境检测", $FTP244_LocalFile & "没有初始化成功,是否继续尝试?") = 7 Then Exit
                EndIf
               
                Sleep(3000);延迟3秒再次尝试打开文件
        Until $File244_found = 1;直到文件被读取到,否则在此循环
EndFunc   ;==>getdll

Func Box()
       
EndFunc

Func readdb($query);完成---------
        ;连接远程电脑Mysql数据库
        _MySQL_InitLibrary()
        $MysqlConn = _MySQL_Init()
        $connected = _MySQL_Real_Connect($MysqlConn, $serverIP, $userID, $userPD, $DBname,3306);(,服务器名,ID,密码,数据库名)

        If $connected = 0 Then Exit MsgBox(16, '数据库连接失败!Connection Error', _MySQL_Error($MysqlConn))

        ;执行Mysql语句————读取表中数据
        _mysql_set_character_set($MysqlConn, "GBK");_mysql_real_query($MysqlConn,"set names `gbk`")   ;设置mysql的输出编辑为 'gbk'
        ;$query = "SELECT * FROM stu_info where stu_num = " &'"';需要查询的语句;Mysql命令行

        _MySQL_Real_Query($MysqlConn, $query);具体执行上述命令行
        $res = _MySQL_Store_Result($MysqlConn)

        ;获取表的列、行数
        $fields = _MySQL_Num_Fields($res)
        $rows = _MySQL_Num_Rows($res)
        ;读取的行与列数显示一下
        ;MsgBox(0,"读取的列行数",$fields & "-" & $rows,20)

        If $rows = 0 Then
                MsgBox(0, "来自服务器消息", "输入的搜索条件在数据库中没有找到数据...", 6)
                GUISetState(@SW_SHOW)
        Else
                $login = 1
                ;读取数据,写入数组,并将列表显示出来
                Dim $array[$rows][$fields]
                For $k = 1 To $rows
                        $mysqlrow = _MySQL_Fetch_Row($res, $fields)
                        $lenthsStruct = _MySQL_Fetch_Lengths($res)

                        For $i = 1 To $fields
                                $length = DllStructGetData($lenthsStruct, 1, $i)
                                $fieldPtr = DllStructGetData($mysqlrow, 1, $i)
                                $data = DllStructGetData(DllStructCreate("char[" & $length & "]", $fieldPtr), 1)
                                $array[$k - 1][$i - 1] = $data
                                ;MsgBox(0,"Test-服务器读取数据过程",($k - 1)&"-"&($i - 1)&"-"&$array[$k - 1][$i - 1])
                        Next
                Next
                ;显示搜索结果
;~                 _ArrayDisplay($array)
               
                ;To Excel
                        Local $oExcel = _ExcelBookNew() ;创建新工作簿, 并使其可见

                        ;声明数组
;~                         Local $aArray[5][2] = [["LocoDarwin", 1],["Jon", 2],["big_daddy", 3],["DaleHolm", 4],["GaryFrost", 5]] ;0 基数组
                        ;蠢法写入EXCEL表头
                        _ExcelWriteCell($oExcel, "学号", 1, 1)
                        _ExcelWriteCell($oExcel, "姓名", 1, 2)
                        _ExcelWriteCell($oExcel, "学院", 1, 3)
                        _ExcelWriteCell($oExcel, "班级", 1, 4)
                        _ExcelWriteCell($oExcel, "登陆IP", 1, 5)
                        _ExcelWriteCell($oExcel, "机器名", 1, 6)
                        _ExcelWriteCell($oExcel, "登陆时间", 1, 7)

                        ;数组写入excel表格
                        _ExcelWriteSheetFromArray($oExcel, $array, 2, 1, 0, 0) ;0 基数组参数

                        MsgBox(0, "数据写入" ,"数据已写入Excel,并保存于桌面!")
                        _ExcelBookSaveAs($oExcel, @DesktopDir & "\"& @YEAR & @MON & @MDAY & "-" & @HOUR & @MIN& @SEC &".xls", "xls", 0, 1) ; 现在我们保存到 temp 目录中, 如果有必要覆盖现有的文件
;~                         _ExcelBookClose($oExcel) ; 最后, 我们关闭文件
;~                 $stu_name = $array[0][2]
;~                 $stu_college = $array[0][3]
;~                 $stu_class = $array[0][4]
                ;MsgBox(0,"Test-服务器读取到的学生姓名",$stu_name,2)
        EndIf

        ;关闭数据库
        _MySQL_Data_Seek($res, 0)
        _MySQL_Free_Result($res)
        _MySQL_Close($MysqlConn)
        _MySQL_EndLibrary()
        ;$Local_pc_state=$array[0][2]
EndFunc   ;==>readdb
目前由于中文传递不知道如何实现,暂时将“按学生姓名、班级、院系”的按钮置为禁用状态...大神们有好办法帮忙支个招
发表于 2021-4-5 19:23:34 | 显示全部楼层
不是小灵通 发表于 2021-4-5 18:36
目前由于中文传递不知道如何实现,暂时将“按学生姓名、班级、院系”的按钮置为禁用状态...大神们有好办法 ...

谢谢!见到全部代码。
运行后,点击搜索并导出至EXCEL文件按钮,出现<数据库连接失败>?
是什么原因?
 楼主| 发表于 2021-4-5 19:25:39 | 显示全部楼层
chzj589 发表于 2021-4-5 19:23
谢谢!见到全部代码。
运行后,点击搜索并导出至EXCEL文件按钮,出现?
是什么原因?

可能是你本地没有mysql数据库吧
我在内网架设了FTP服务器和MYSQL数据库的
发表于 2021-4-5 19:32:49 | 显示全部楼层
不是小灵通 发表于 2021-4-5 19:25
可能是你本地没有mysql数据库吧
我在内网架设了FTP服务器和MYSQL数据库的

是的。如何建立数据库?
 楼主| 发表于 2021-4-5 19:43:08 | 显示全部楼层
chzj589 发表于 2021-4-5 19:32
是的。如何建立数据库?

那个libmysql.dll从我的FTP服务器自动下载给学生机的,也可以直接和主签到文件放在一起,让学生一并下载。
另外我有台电脑安装了mysql数据库,网上有安装包的,这电脑主要提供一个网络数据库给用户写入或读取数据
数据库的2个表结构在前面楼层给出来了,stu_info存储学生的班级等信息,stu_login存放“签到”程序学生输入的学号,还有学生机的IP、机器名等信息,另外还有个时间戳字段,自动写入登陆时间,避免学生机时间不一致导致记录不正确。
具体如何建库需要看mysql的资料,我这里慢慢看的,B站也有好多视频
https://www.runoob.com/mysql/mysql-administration.html
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-17 16:26 , Processed in 0.071761 second(s), 15 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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