自动新手,这个变量出了什么问题?

时间:2014-12-13 21:47:00

标签: mysql autoit

所以今天我才开始学习这门语言,我试图用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

1 个答案:

答案 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)。

这个答案并没有解决可疑的编程习惯和代码结构。