所以今天我才开始学习这门语言,我试图用https://www.autoitscript.com/autoit3/docs/functions中的部分示例脚本编写脚本。
我正在尝试运行一个mysql查询,而且我正在获取" Variable Undeclared"错误,即使它被声明为全局一个(至少我认为我宣称它是一个......)
基本上我的脚本应该做的是为我的局域网中的每台机器创建一个ID,将它存储到AppData中的txt文件中,然后将其插入到数据库中。
#include <MsgBoxConstants.au3>
#include <FileConstants.au3>
#include "EzMySql.au3"
#include <Array.au3>
Example()
Func Example()
$id = Random(1, 1000, 1);Numar random de la 1 la 100
Local Const $sFilePath = @AppDataDir & "\id.txt" ; Selectare %appdata% si id.txt
Local $iFileExists = FileExists($sFilePath)
If $iFileExists Then
Else
; Create a temporary file to write data to.
If Not FileCreate($sFilePath, $ID & @CRLF) Then Return MsgBox($MB_SYSTEMMODAL, "", "O eroare s-a produs in timp ce se scria fila temporara")
; Open the file for writing (append to the end of a file) and store the handle to a variable.
Global $hFileOpen = FileOpen($sFilePath, $FO_APPEND)
If $hFileOpen = -1 Then
MsgBox($MB_SYSTEMMODAL, "", "O eroare s-a produs in timp ce se citea fila.")
Return False
EndIf
; Read the contents of the file using the handle returned by FileOpen.
Global $sFileRead = FileRead($hFileOpen)
; Close the handle returned by FileOpen.
FileClose($hFileOpen)
EndIf
EndFunc
; Create a file.
Func FileCreate($sFilePath, $sString)
Local $bReturn = True ; Create a variable to store a boolean value.
If FileExists($sFilePath) = 0 Then $bReturn = FileWrite($sFilePath, $sString) = 1 ; If FileWrite returned 1 this will be True otherwise False.
Return $bReturn ; Return the boolean value of either True of False, depending on the return value of FileWrite.
EndFunc ;==>FileCreate
$name=@ComputerName
If Not _EzMySql_Startup() Then
MsgBox(0, "Error Starting MySql", "Error: "& @error & @CR & "Error string: " & _EzMySql_ErrMsg())
Exit
EndIf
If Not _EzMySql_Open("127.0.0.1", "root", "", "vrgaming", "3306") Then
MsgBox(0, "Error opening Database", "Error: "& @error & @CR & "Error string: " & _EzMySql_ErrMsg())
Exit
EndIf
If Not _EzMySql_Exec("INSERT INTO `lan` (id, nume) VALUES ('"& $sFileRead &"', '"& $name &"')") Then
MsgBox(0, "Error opening Database", "Error: "& @error & @CR & "Error string: " & _EzMySql_ErrMsg())
Exit
EndIf
_EzMySql_Close()
_EzMySql_ShutDown()
Exit
答案 0 :(得分:0)
代码存在许多逻辑问题,这使得跟进有点棘手。
这种情况下的错误几乎肯定是因为&#34; id.txt&#34;存在,因此$iFileExists
计算结果为true,并且永远不会创建全局变量。
然后你在创建一个新的&#34; id.txt&#34;,用于写入,然后读取所有数据,所以$ sFileRead将始终为空,FileRead将设置@error,因为你试图从文件已开放供写作。
现在,我认为你希望$ sFileRead是id.txt的内容,而id.txt应该用新的随机id创建,如果它不存在的话。如果是,那么您需要移动打开的代码并读取Else...Endif
块之外的文件(除了将FileOpen更改为使用$ FO_READ)。
这个答案并没有解决可疑的编程习惯和代码结构。