kb5077 发表于 2013-9-8 10:42:14

请教一个关于SQL的问题

达到的目的是:弄一个输入号码的界面,输入号码,然后就根据输入的号码去数据库查询是否有此号码,问题就在这里,在AU3里调用SQL命令如何获取SQL命令返回的结果,如果无法获取查询结果就无法判断是否存在。请高手给出代码在此感激不尽。

kb5077 发表于 2013-9-8 20:41:01

请高手赐教...

xms77 发表于 2013-9-8 21:37:03

If IsString(_SelectData("Select MachineType From " & $tblname & " where PCName='" & $PCName & "'")) Then ;没有要查询的数据
                        ;msgBox(0, $PCName, "没有查询到这台电脑的记录")
                        ;MsgBox(0, "以下数据将写入数据库", $MachineType & " " & $MachineName & " " & $PCName & " " & $IPAddress & " " & $MachineStatus & " " & $SoftwareRev & " " & $ClientRev & " " & $MacAddress & " " & $UpdateDateTime)
                        _AddDataToDB($MachineType, $MachineName, $PCName, $IPAddress, $MachineStatus, $SoftwareRev, $ClientRev, $MacAddress, $UpdateDateTime)
                Else
                        ;MsgBox(0, $PCName, "查询到有这台电脑的记录")
                        _UpdateData($MachineType, $MachineName, $PCName, $IPAddress, $MachineStatus, $SoftwareRev, $ClientRev, $MacAddress, $UpdateDateTime)
                EndIf

;更新指定的数据
Func _UpdateData($MachineType, $MachineName, $PCName, $IPAddress, $MachineStatus, $SoftwareRev, $ClientRev, $MacAddress, $UpdateDateTime)
        $addfld = ObjCreate("ADODB.Connection")
        $addfld.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & $mdb_data_path & ";Jet Oledb:Database Password=" & $mdb_data_pwd)
        $addfld.Execute("update " & $tblname & " set MachineType = '" & $MachineType & "', PCName = '" & $PCName & "', IPAddress = '" & $IPAddress & "', MachineStatus = '" & $MachineStatus & "', SoftwareRev = '" & $SoftwareRev & "', ClientRev = '" & $ClientRev & "', MacAddress = '" & $MacAddress & "', UpdateDateTime = '" & $UpdateDateTime & "' where MachineName = '" & $MachineName & "'")
        $addfld.close ;写完结束所有的连接
EndFunc   ;==>_UpdateData

;选择是否有指定字段的数据
Func _SelectData($sqlstr) ;查询数据库 ,返回数组,宏保存记录个数
        Local $ret = ""
        $addfld = ObjCreate("ADODB.Connection")
        $addfld.Open("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & $mdb_data_path & ";Jet Oledb:Database Password=" & $mdb_data_pwd)
        $RS = ObjCreate("ADODB.Recordset")
        $RS.ActiveConnection = $addfld
        $RS.Open($sqlstr)
        If $RS.bof And $RS.eof Then
                SetError(1)
        Else
                SetError(0)
                $ret = $RS.GetRows
        EndIf
        $RS.close()
        $addfld.Close
        Return $ret
EndFunc   ;==>_SelectData

fcurrk 发表于 2013-9-9 08:41:32

3楼威武,提供的是解决办法,不能照搬啊。

nmgwddj 发表于 2013-9-9 12:11:39

回复 4# fcurrk


    3楼代码已经足够。想了解的人仔细研究一定可以看懂。

kk_lee69 发表于 2013-9-9 14:26:15

回复 1# kb5077

想法問題......既然 你可以找出 你要的那你就用比數來判斷 不就好了

你說 沒有資料 比對不到如果 你用 COUNT(*)那沒有資料就會變成0    0 就是沒有資料

先取有沒有資料   有資料你在 讀取你要的資料..............

kb5077 发表于 2013-9-13 09:14:34

我不是要返回处理记录数,我是要返回数据,比如查询计算机名为"PC-01",如果查询到计算机名为"PC-01",就返回"PC-01"数据,如果没有查询到就返回""空.

fcurrk 发表于 2013-9-13 10:35:34

#include <Array.au3>



Dim $sServer = '127.0.0.1' , $sUsername = 'sa' , $sPassword = '1234567' ; 三个变量分别是连接数据库用的地址、账号、密码



$Conn = ObjCreate ( "ADODB.Connection" )

$Conn. open ( "DRIVER={SQL Server};SERVER=" & $sServer & ";UID=" & $sUsername & ";PWD=" & $sPassword & ";" )



; 连接成功后我们来读取数据

$Conn. Execute ( "use master" ) ; 首先要指定一个需要操作的库,这里用系统自带的master库来操作



$RS = ObjCreate ( "ADODB.Recordset" ) ; 创建记录集对象

$RS. ActiveConnection = $Conn ; 设置记录集的激活链接属性来自$Conn

$RS. Open ( "Select * from sysdatabases ORDER BY Name" ) ; 执行Sql语句,这个语句是查询数据库中所有的库属性,并且按Name字段的数据进行排序



Dim $Select_Db = [] ; 定义一个数组来存放查询到的数据

Dim $Count = 1 ; 定义一个变量用来记录查询到的数据行数



While Not $RS.eof And Not $RS.bof ; 当记录指针处于第一条记录和最后一条记录之间时,执行while循环

    If @error = 1 Then ExitLoop

    If $Select_Db = 0 Then ; 当数组二维$Select_Db为0时,重定义数组的第二维大小等于记录集查询到的字段数

      ReDim $Select_Db[$RS. Fields . Count + 1] ;$RS.Fields.Count 为记录集查询到的字段数

      For $i = 0 To $RS. Fields . Count - 1

            $Select_Db[$i + 1] = $RS. Fields ($i). Name ;$RS.Fields($i).Name 为字段名,把字段名存入数组

      Next

    EndIf

    ReDim $Select_Db[$Count + 1][$RS. Fields . Count + 1] ; 数组第一维大小加1,用于存放数据

    $Select_Db = $Count ;$Select_Db 存放查询到的数据行数

    For $i = 0 To $RS. Fields . Count - 1

      $Select_Db[$Count][$i + 1] = $RS. Fields ($i). Value ;$RS.Fields($i).Value 字段数据

    Next

    $Count += 1 ; 行数加1

    $RS. movenext ; 将游标移到下一条数据上

WEnd

$RS. Close ; 关闭记录集对象

_ArrayDisplay ($Select_Db, " 数据库所有库属性" ) ; 显示数组

sunafter 发表于 2013-9-14 22:51:38

楼上的很详细,仔细看看吧
页: [1]
查看完整版本: 请教一个关于SQL的问题