【已解决】怎样执行变量字符中的语句??
本帖最后由 meteor0330 于 2014-11-28 14:13 编辑我设置了一个变量
$RS_Fields='$RS.Fields(0).value & "|" & $RS.Fields(1).value'
我现在想要在GUICtrlSetData中执行它怎么办?
$Item1= GUICtrlCreateListViewItem("|",$ListView1)
GUICtrlSetData($Item1,$RS_Fields)
我这样写完后,执行时,满ListView里都是$RS.Fields(0).value & "|" & $RS.Fields(1).value
并不是我从数据库里读到的数据,我应该怎么办呢?
不知我这样说清楚了没有!
拜托各位大神!!!
我想实现的功能如我3楼所说,
相关函数的源码如下:
Func DaKaiSQL()
Local $conn, $RS
Local $aArr
Local $ListViewBiaoTi
$SQL_IP = GUICtrlRead($Input1) ;SQL服务器名
$SQL_UID = GUICtrlRead($Input2);SQL服务器登录名
$SQL_PW = GUICtrlRead($Input3) ;SQL服务器登录密码
$SQL_Name = GUICtrlRead($Combo1) ;SQL数据库名
$SQL_Table = GUICtrlRead($Combo2) ;SQL表名
$conn = ObjCreate("ADODB.Connection")
$conn.Open("driver={SQL Server};server=" & $SQL_IP & ";uid=" & $SQL_UID & ";pwd=" & $SQL_PW & ";database=" & $SQL_Name)
$RS = ObjCreate("ADODB.Recordset")
$RS.ActiveConnection = $conn
$RS.Open("select column_name,data_type,CHARACTER_MAXIMUM_LENGTH from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = '" & $SQL_Table & "'") ;关键SQL语句,获取表中所有字段的名称、类型和长度
If @error = 0 Then ;判断数据库是否正常连接
If ($RS.Fields(0).value) <> "" Then
Local $i = 0
While Not $RS.eof And Not $RS.bof
If @error = 1 Then ExitLoop
If $i > 0 Then ReDim $ArrZiduan ;调整二维数组行数
For $j = 0 To 2
$aArr[$j] = $RS.Fields($j).value ;读取单行值赋给一维数组
Next
$ArrZiduan[$i] = $aArr ;将一维数组值赋给二维数组
$ArrZiduan[$i] = $aArr ;将一维数组值赋给二维数组
$ArrZiduan[$i] = $aArr ;将一维数组值赋给二维数组
$RS.movenext
$i = $i + 1
WEnd
;_ArrayDisplay($ArrZiduan);显示数组数据
;下面的循环用于设置ListView的标题
For $k = 0 To UBound($ArrZiduan) - 1
If $k = 0 Then
$ListViewBiaoTi = $ArrZiduan[$k]
Else
$ListViewBiaoTi = $ListViewBiaoTi & "|" & $ArrZiduan[$k]
EndIf
Next
GUICtrlSetState($ListView2, $GUI_HIDE) ;隐藏程序启动时创建的ListView2
$ListView1 = GUICtrlCreateListView($ListViewBiaoTi, 32, 168, 817, 481) ;创建ListView
Else
GUICtrlSendMsg($ListView1, $LVM_DELETEALLITEMS, 0, 0) ;发送消息,清空listview1控件
_GUICtrlStatusBar_SetText($StatusBar1, "ERROR!!!! 数据库“" & $SQL_Name & "”上没有找到用户表,请检查。", 2)
EndIf
Else
;_GUICtrlStatusBar_SetText($StatusBar1, "ERROR!!!!数据库打开错误。", 2)
EndIf
$conn.Close
$RS.close
EndFunc ;==>DaKaiSQL
Func DuSQL20()
Local $conn, $RS, $Cb1
Local $FenGeFu = ""
;计算“|”的数量
For $k = 0 To UBound($ArrZiduan) - 2
$FenGeFu = $FenGeFu & "|"
Next
;得到$RS.Fields(0).value语句
Local $RS_Fields_value = ""
For $m = 0 To UBound($ArrZiduan) - 1
If $m = 0 Then
$RS_Fields_value = "$RS.Fields(" & $m & ").value"
Else
$RS_Fields_value = $RS_Fields_value & ' & "|" & $RS.Fields(' & $m & ').value'
EndIf
Next
GUICtrlSendMsg($ListView1, $LVM_DELETEALLITEMS, 0, 0) ;发送消息,清空listview1控件
$SQL_IP = GUICtrlRead($Input1) ;SQL服务器名
$SQL_UID = GUICtrlRead($Input2);SQL服务器登录名
$SQL_PW = GUICtrlRead($Input3) ;SQL服务器登录密码
$SQL_Name = GUICtrlRead($Combo1) ;SQL数据库名
$SQL_Table = GUICtrlRead($Combo2) ;SQL表名
$conn = ObjCreate("ADODB.Connection")
$conn.Open("driver={SQL Server};server=" & $SQL_IP & ";uid=" & $SQL_UID & ";pwd=" & $SQL_PW & ";database=" & $SQL_Name)
$RS = ObjCreate("ADODB.Recordset")
$RS.ActiveConnection = $conn
$RS.Open("select TOP 20 * from " & $SQL_Table);读取前20个值
If @error = 0 Then ;判断数据库是否正常连接
While Not $RS.eof And Not $RS.bof
If @error = 1 Then ExitLoop
$Item1 = GUICtrlCreateListViewItem($FenGeFu, $ListView1)
GUICtrlSetData($Item1, $RS_Fields_value)
$RS.movenext
WEnd
Else
_GUICtrlStatusBar_SetText($StatusBar1, "ERROR!!!! 数据库打开错误。", 2)
EndIf
$conn.Close
$RS.close
EndFunc ;==>DuSQL20
现在就是GUICtrlSetData($Item1, $RS_Fields_value)这句有问题!
我应该怎么办呢? 回复 1# meteor0330
搜索下关键字"数据库",好好看看别人是怎样操作数据库的.
你那变量只是普通的变量赋值,跟数据库查询还差了十万八千里呢! 二楼没有理解我的意思,我现在正在写一个通用的数据库查询程序。
已经写到了用户输入sql数据库的服务器地址和登录名、密码后,程序自动读出服务器上的所有数据库,当用户选择了需要操作的数据库后,程序自动读出该库下的所有用户表,用户选择好表后,程序自动读出该表下的所有字段名及类型和长度,并根据字段名创建一个listview。
前面这些都能正常运行了,现在我要读出这个表中的数据并填入这个listview中时遇到了问题。因为每个库中的各个表的字段都会有多有少,所以那个$RS.Fields(0).value & "|" & $RS.Fields(1).value的语句也会有长有短。我就想着把它们放到一个字符变量中,然后再把这个变量中的字符当成语句来执行。
现在这一步实现不了了。所以想请各位帮帮忙! 本帖最后由 netegg 于 2014-11-28 01:02 编辑
$RS_Fields=$RS.Fields(0).value & "|" & $RS.Fields(1).value
$Item1= GUICtrlCreateListViewItem($RS_Fields,$ListView1) 去掉引号啊。为什么家引号呢? 一句就可以了
$Item1= GUICtrlCreateListViewItem($RS.Fields(0).value & "|" &$RS.Fields(1).value,$ListView1) 回复 4# netegg
谢谢4楼的元老,不过我的问题还是没有解决,可能是我想弯了。
我把相关函数源码贴上了,我想实现的功能就如我3楼所说,请帮帮忙,不胜感激!!! 本帖最后由 netegg 于 2014-11-28 13:11 编辑
先countcolume,或者直接读出来,转成一个二维数组$array[$n(根据你当时读出的数据)],_guilistview_addarray就行了 回复 8# netegg
谢谢!!!
那有没有一个方法能像我做的这样,把一部分语句先放到一个变量中,然后需要执行的时候再从此变量中调出来用?
我记得以前用ASP写网站的时候是可以这样的,不知道AU3能不能做到呢? 可以是可以 帮助里有关于autoit单步执行语句的方法 回复 10# netegg
呃——!!
怎么做呢? 格式4: AutoIt3.exe /AutoIt3ExecuteLine "脚本代码"
执行一行代码. 回复 13# netegg
不好意思,刚才没看到你11楼的帖子!
刚看了看帮助文档的介绍,看来是我想得太天真了!!
还是按你8楼的方法先试一下了! 格式4: AutoIt3.exe /AutoIt3ExecuteLine "脚本代码"
执行一行代码.
netegg 发表于 2014-11-28 13:31 http://www.autoitx.com/images/common/back.gif
Execute(字符串)
页:
[1]
2