找回密码
 加入
搜索
查看: 3330|回复: 8

[系统综合] 请教一个关于SQL的问题

  [复制链接]
发表于 2013-9-8 10:42:14 | 显示全部楼层 |阅读模式
达到的目的是:弄一个输入号码的界面,输入号码,然后就根据输入的号码去数据库查询是否有此号码,问题就在这里,在AU3里调用SQL命令如何获取SQL命令返回的结果,如果无法获取查询结果就无法判断是否存在。请高手给出代码在此感激不尽。
 楼主| 发表于 2013-9-8 20:41:01 | 显示全部楼层
请高手赐教...
发表于 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
发表于 2013-9-9 08:41:32 | 显示全部楼层
3楼威武,提供的是解决办法,不能照搬啊。
发表于 2013-9-9 12:11:39 | 显示全部楼层
回复 4# fcurrk


    3楼代码已经足够。想了解的人仔细研究一定可以看懂。
发表于 2013-9-9 14:26:15 | 显示全部楼层
回复 1# kb5077

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

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

先取  有沒有資料   有資料  你在 讀取你要的資料..............
 楼主| 发表于 2013-9-13 09:14:34 | 显示全部楼层
我不是要返回处理记录数,我是要返回数据,比如查询计算机名为"PC-01",如果查询到计算机名为"PC-01",就返回"PC-01"数据,如果没有查询到就返回"  "空.
发表于 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[1][1] = [[0]] ; 定义一个数组来存放查询到的数据 

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

  

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

    If @error = 1 Then ExitLoop 

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

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

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

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

        Next 

    EndIf 

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

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

    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, " 数据库所有库属性" ) ; 显示数组 
发表于 2013-9-14 22:51:38 | 显示全部楼层
楼上的很详细,仔细看看吧
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-16 14:46 , Processed in 0.070275 second(s), 19 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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