xuanniao110
发表于 2019-10-15 09:23:07
ADO Recordset 对象属性
属性描述
AbsolutePage设置或返回一个可指定 Recordset 对象中页码的值。
AbsolutePosition设置或返回一个值,此值可指定 Recordset 对象中当前记录的顺序位置(序号位置)。
ActiveCommand返回与 Recordset 对象相关联的 Command 对象。
ActiveConnection如果连接被关闭,设置或返回连接的定义,如果连接打开,设置或返回当前的 Connection 对象。
BOF如果当前的记录位置在第一条记录之前,则返回 true,否则返回 fasle。
Bookmark设置或返回一个书签。此书签保存当前记录的位置。
CacheSize设置或返回能够被缓存的记录的数目。
CursorLocation设置或返回游标服务的位置。
CursorType设置或返回一个 Recordset 对象的游标类型。
DataMember设置或返回要从 DataSource 属性所引用的对象中检索的数据成员的名称。
DataSource指定一个包含要被表示为 Recordset 对象的数据的对象。
EditMode返回当前记录的编辑状态。
EOF如果当前记录的位置在最后的记录之后,则返回 true,否则返回 fasle。
Filter返回一个针对 Recordset 对象中数据的过滤器。
Index设置或返回 Recordset 对象的当前索引的名称。
LockType设置或返回当编辑 Recordset 中的一条记录时,可指定锁定类型的值。
MarshalOptions设置或返回一个值,此值指定哪些记录被返回服务器。
MaxRecords设置或返回从一个查询返回 Recordset 对象的的最大记录数目。
PageCount返回一个 Recordset 对象中的数据页数。
PageSize设置或返回 Recordset 对象的一个单一页面上所允许的最大记录数。
RecordCount返回一个 Recordset 对象中的记录数目。
Sort设置或返回一个或多个作为 Recordset 排序基准的字段名。
Source设置一个字符串值,或一个 Command 对象引用,或返回一个字符串值,此值可指示 Recordset 对象的数据源。
State返回一个值,此值可描述是否 Recordset 对象是打开、关闭、正在连接、正在执行或正在取回数据。
Status返回有关批更新或其他大量操作的当前记录的状态。
StayInSync设置或返回当父记录位置改变时对子记录的引用是否改变。
请各位大神帮忙看看应该用什么表达 才能获取到的判断值
yhxhappy
发表于 2019-10-15 09:39:41
xuanniao110 发表于 2019-10-14 13:39
SQL数据库 select count(*) from information_schema.columns where table_name = '01mon' and column_ ...
以下代码将数据集作为一个数组返回,再搜索数组中有没有你需要的列。
因为是自己平时用的,看起来很长,其实在 92 行的循环中可以加判断有没有存在你要的 列名。不生成数组也可以。
#include <Array.au3>
$Server = ""
$Username = ""
$Password = ""
$Database = ""
$Obj = _MsSQL_Connect($Server, $Username, $Password, $Database)
If Not @error Then
$ARRAY = _MsSQL_SelectTable($Obj, "sys.columns", "name", "object_id=object_id(' ')")
If Not @error Then
_ArrayDisplay($ARRAY)
Else
EndIf
EndIf
Func _MsSQL_Connect($sServer, $sUsername, $sPassword, $sDatabase, $Auth = True, $sPort=1433, $sDriver = "{SQL Server}")
If $sServer = "" Or $sUsername = "" Or $sPassword = "" Or $sDatabase = "" Then
SetError(1)
Return
EndIf
Local $v = StringMid($sDriver, 2, StringLen($sDriver) - 2)
Local $val = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers", $v) ;检查OBDC驱动是否安装
If @error Or $val = "" Then
SetError(3)
Return
EndIf
$conn = ObjCreate("ADODB.Connection")
If Not IsObj($conn) Then
SetError(4)
Return
EndIf
If $sPort = "" Then $sPort = 1433
If $sPort = 1433 Then
$Port = ''
Else
$Port = ',' & $sPort
EndIf
If $Auth = True Then
ConsoleWrite("driver={SQL Server};server="&$sServer&$Port&";uid="&$sUsername&";pwd="&$sPassword&";database="&$sDatabase & @CRLF)
$conn.Open("driver={SQL Server};server="&$sServer&$Port&";uid="&$sUsername&";pwd="&$sPassword&";database="&$sDatabase) ;主机名IP127.0.0.1,UID=用户,PWD=密码,database=数据库名 ?
Else
ConsoleWrite("driver={SQL Server};server="&$sServer&$Port&";uid="&$sUsername&";pwd="&$sPassword&";database="&$sDatabase&";Integrated Security=SSPI" & @CRLF)
$conn.Properties.Value("Integrated Security") = "SSPI"
$conn.Properties("uid") = $sUsername
$conn.Properties("pwd") = $sPassword
$conn.Open("driver={SQL Server};server=" & $sServer & ";database="&$sDatabase)
EndIf
If @error Then
SetError(5)
Return
Else
Return $conn
EndIf
EndFunc
Func _MsSQL_SelectTable($Obj, $Table, $Field = '*', $Condition = '', $Distinct = 0, $OrderByCMD = "") ;表查询,Condition = WHERE, Distinct <> 0 将去掉重复项,只返回不重复的值
If Not IsObj($Obj) Then
SetError(1)
Return
ElseIf $Table = "" Then
SetError(2)
Return
EndIf
$RS = ObjCreate("ADODB.Recordset")
$RS.ActiveConnection = $Obj
Local $WHERE = "", $DIS = "", $OrderBy = ""
If $Condition <> "" Then $WHERE = " WHERE " & $Condition
If $OrderByCMD <> "" Then $OrderBy = " ORDER BY " & $OrderByCMD
If $Distinct = 1 Then $DIS = "DISTINCT " ;排除重复项
ConsoleWrite("SELECT " & $DIS & $Field & " FROM " & $Table & $WHERE & $OrderBy & @CRLF)
$RS.Open("SELECT " & $DIS & $Field & " FROM " & $Table & $WHERE & $OrderBy)
Local $FieldNum = $RS.Fields.Count
If $FieldNum = 1 Then
$FieldNum2 = 2 ;虽然数据只有1列,但数组是二唯的,容量发生混乱,干脆生成二唯数组
Else
$FieldNum2 = $FieldNum
EndIf
Local $Num = 0, $Array[$FieldNum2] = [], $text = ""
While Not $RS.eof And Not $RS.bof
For $i = 0 To $FieldNum-1 ;循环读取字段值
$Text &= $RS.Fields($i).value & "|"
Next
_ArrayAdd($Array, StringTrimRight($Text, 1)) ;通常会多加一个|,会导致数组维数不对
$text = ""
$Num += 1
$RS.movenext;下一笔资料
WEnd
$RS.close
If $Num = 0 Then
SetError(5)
Return
Else
$Array = $Num
Return $Array
EndIf
EndFunc
xuanniao110
发表于 2019-10-15 10:13:46
yhxhappy 发表于 2019-10-15 09:39
以下代码将数据集作为一个数组返回,再搜索数组中有没有你需要的列。
因为是自己平时用的,看起来很长, ...
感谢 我只有换种思路了A我查询了数据集所有的都不是我想要的只有罗列所有列名然后再判断了如果有列名执行后面的操作没有列名 就创建新列名再继续运行后面的操作了
xuanniao110
发表于 2019-10-15 10:57:04
yhxhappy 发表于 2019-10-15 09:39
以下代码将数据集作为一个数组返回,再搜索数组中有没有你需要的列。
因为是自己平时用的,看起来很长, ...
我可不可以这样呢 就是查询这个数据表中的那一列的列名例如2019sx然后再判断 如果列名相等那就执行保存 如果列名 = @error 那就创建?
kk_lee69
发表于 2019-10-15 11:04:06
xuanniao110 发表于 2019-10-15 09:23
ADO Recordset 对象属性
请各位大神帮忙看看应该用什么表达 才能获取到的判断值
我可以了解 一下你的用意嗎???
你現在是 是 資料表 裡面 的 欄位名稱 跟 數量 是變動的而你想知道 資料表裡面 有啥欄位名稱嗎??
kk_lee69
发表于 2019-10-15 11:05:35
xuanniao110 发表于 2019-10-15 09:23
ADO Recordset 对象属性
请各位大神帮忙看看应该用什么表达 才能获取到的判断值
你使用甚麼資料庫作業
xuanniao110
发表于 2019-10-15 11:10:19
kk_lee69 发表于 2019-10-15 11:04
我可以了解 一下你的用意嗎???
你現在是 是 資料表 裡面 的 欄位名稱 跟 數量 是變動的而你想知道...
KK 我是这样的 我利用SQL语句查询数据表01mon中是否有2019sx这一列 如果有,则执行下面的保存操作如果没有就要新创建2019sx这一列然后再进行保存
我用SQL工具进行SQL语句执行能得到如图所示的判断值有此列那判断值为1没有此列那判断值为0
或者就是另外一种方式 查询数据表01mon中 2019sx 的列名 如果查询出来的列名和我2019sx相等那就直接执行操作 如果查询出来报错 就执行新创建列
我不知道我这样表达的意思你能不能明白?
xuanniao110
发表于 2019-10-15 11:11:52
kk_lee69 发表于 2019-10-15 11:05
你使用甚麼資料庫作業
SQLServer数据库
xuanniao110
发表于 2019-10-15 11:15:30
数据库格式如下
比如到新的一年了 数据列中没有2019sx 那就应该创建这一列了
kk_lee69
发表于 2019-10-15 12:00:47
xuanniao110 发表于 2019-10-15 11:15
数据库格式如下
比如到新的一年了 数据列中没有2019sx 那就应该创建这一列了
select b.name from sysobjects as a, syscolumns as b where a.xtype = 'U' and a.id = b.id and a.name='資料表單名稱'
kk_lee69
发表于 2019-10-15 12:01:52
xuanniao110 发表于 2019-10-15 11:15
数据库格式如下
比如到新的一年了 数据列中没有2019sx 那就应该创建这一列了
先跑
select b.name from sysobjects as a, syscolumns as b where a.xtype = 'U' and a.id = b.id and a.name='資料表單名稱'
把 名稱改為你要查詢的資料表然後就會列出 所有的欄位名
再去比對你就知道你缺啥了
xuanniao110
发表于 2019-10-15 12:27:31
kk_lee69 发表于 2019-10-15 12:01
先跑
执行你给的SQL数据查询语言 不管有没有列 都是执行结果空白
kk_lee69
发表于 2019-10-15 13:04:09
xuanniao110 发表于 2019-10-15 12:27
执行你给的SQL数据查询语言 不管有没有列 都是执行结果空白
你弄錯了
是表名 不是欄位名稱你錯了 根據你的資料表 你的表名為 01MON
xuanniao110
发表于 2019-10-15 13:08:30
kk_lee69 发表于 2019-10-15 13:04
你弄錯了
是表名 不是欄位名稱你錯了 根據你的資料表 你的表名為 01MON
那栏位名称要修改的是U?
kk_lee69
发表于 2019-10-15 13:09:51
不是你先查 你有啥欄位 就會知道 你缺甚麼
要增加 欄位 是另外的語法 跟這個無關