gyp2000
发表于 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朋友提醒了要放在程序运行的目录,果然可以使用了:face (32):
明天程序放出去学生机测试下
感谢大家支持,回头汇报是否成功!
不是小灵通
发表于 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"
目前其他的测试电脑可以正常运行了,明天放去学生机测试一下,然后向各位大神汇报,不行再来请教:face (3):
chzj589
发表于 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文件,我这次遇到的问题就是文件位置放的不对,以前没理解透
chzj589
发表于 2021-4-5 12:47:02
谢谢!有学过SQLite和ACCESS数据库,还没学过mysql
chzj589
发表于 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 = [["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
;~ $stu_college = $array
;~ $stu_class = $array
;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
EndFunc ;==>readdb目前由于中文传递不知道如何实现,暂时将“按学生姓名、班级、院系”的按钮置为禁用状态...大神们有好办法帮忙支个招
chzj589
发表于 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数据库的
chzj589
发表于 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