[已解决]关于mssql插入数据过程
本帖最后由 anypac 于 2013-10-22 15:44 编辑这个mssql.au3文件是在论坛下到的,下面是其中一个过程,我发现这个过程不能写入一行数据或多行数据,只能写入一列数据或者一个数据,请问一下论坛的老大们是我不会用还是这个过程的问题,我是怎么尝试都没法写入一行或多行数据。。。。。新人求教
;===============================================================================
;
; 函数名称.........: _MSSQL_AddRecord
; 描述.............: 在数据库表中插入一个或多个新的数值
; 语法.............: _MSSQL_AddRecord($oConnectionObj, $sTable, $Values, $UNIQUE, $condition)
; 参数(s)..........: $oConnectionObj = Object, returned by _MSSQL_Con
; $sTable = 表名
; $Values = 要插入到表中的值
; $UNIQUE = [可选参数] 设置为 True 使用条件模式, 避免重复数据
; $condition = [可选参数] 条件模式, 如果避免重复数据的条件.
; 要求.............: You need to add a Value for each Column in the Table
; If $Values is an Array , it has to be indexed 1,
; If $Values is a String , it has to be formated like this:
; - 'Value1', 'Value2', 'Value3', 'Value4', 'Value5', 'Value n'
; 返回值(s)........: 成功 - 1
; 失败 - 0, sets @error
; |1 - $oConnectionObj is not an object
; |2 - $condition was not set
; |3 - Only returned if $UNIQUE = True
; - All Values already in Database
; 作者.............: TheLuBu <LuBu@veytal.com>
;
;===============================================================================
Func _MSSQL_AddRecord($oConnectionObj, $sTable, $Values, $UNIQUE = False, $condition = "")
Local $str, $check
If IsObj($oConnectionObj) And Not @error Then
If IsArray($Values) Then
If UBound($Values, 2) = 0 Then
$str = "INSERT INTO " & $sTable & " VALUES('"
For $grades = 1 To UBound($Values) - 1
If $UNIQUE = False Then
$str &= $Values[$grades] & "', '"
Else
If $condition = "" Then Return SetError(2, 0, 0)
$check = _MSSQL_GetRecord($oConnectionObj, $sTable, "*", $condition)
If @error = 4 Then
$str &= $Values[$grades] & "', '"
EndIf
EndIf
Next
$str = StringTrimRight($str, 3) & ");"
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $str = ' & $str & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
If StringRight($str, 7) = "VALUE);" Then Return SetError(3, 0, 0)
$oConnectionObj.execute($str)
Return 1
Else
For $rows = 1 To UBound($Values) - 1
$str = "INSERT INTO " & $sTable & " VALUES('"
For $grades = 1 To UBound($Values, 2) - 1
If $UNIQUE = False Then
$str &= $Values[$rows][$grades] & "', '"
Else
If $condition = "" Then Return SetError(2, 0, 0)
$check = _MSSQL_GetRecord($oConnectionObj, $sTable, "*", $condition)
If @error = 4 Then
$str &= $Values[$rows][$grades] & "', '"
EndIf
EndIf
Next
$str = StringTrimRight($str, 3) & ");"
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $str = ' & $str & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
If StringRight($str, 7) = "VALUE);" Then Return SetError(3, 0, 0)
$oConnectionObj.execute($str)
Next
Return 1
EndIf
Else
If $UNIQUE = False Then
$str = "INSERT INTO " & $sTable & " VALUES(" & $Values & ");"
Else
If $condition = "" Then Return SetError(2, 0, 0)
$check = _MSSQL_GetRecord($oConnectionObj, $sTable, "*", $condition)
If @error = 4 Then
$str = "INSERT INTO " & $sTable & " VALUES(" & $Values & ");"
Else
Return SetError(3, 0, 0)
EndIf
EndIf
$oConnectionObj.execute($str)
Return 1
EndIf
Else
Return SetError(1, 0, 0)
EndIf
EndFunc ;==>_MSSQL_AddRecord
以下是这个过程作者给出的范例~~~请大家指教一下
$IP = "192.168.1.100"; IP地址
$USER = "sa"; 连接帐号
$PASS = ""; 连接密码
$DATABASE = "TESTDATA"; 数据库名
Example_1(); 示例 1 在数据库表中插入一个数值
Example_2(); 示例 1 在数据库表中插入一组数值
Func Example_1()
; 表名
$TableName_1 = "TestTable1"
; 连接数据库
$sqlCon = _MSSQL_Con($IP, $USER, $PASS, $DATABASE)
; 在数据库中创建表,默认自动生成 ID 列
_MSSQL_CreateTable($sqlCon, $TableName_1)
; 创建一个或多个新的列
_MSSQL_CreateColumn($sqlCon, $TableName_1, "TestColumn VARCHAR(150)")
; 在数据库表中插入一个数值,使用条件方式,避免插入重复数据
_MSSQL_AddRecord($sqlCon, $TableName_1, "'Value9'", True, "WHERE TestColumn = 'Value9'")
; 关闭数据库连接
_MSSQL_End($sqlCon)
EndFunc ;==>Example_1
Func Example_2()
Dim $TestArray1
$TestArray1 = "VALUE1"
$TestArray1 = "Value2"
$TestArray1 = "Value3"
$TestArray1 = "Value4"
$TestArray1 = "Value5"
$TestArray1 = "Value6"
$TestArray1 = "Value7"
$TestArray1 = "Value8"
$TestArray1 = "123456789"
; 表名
$TableName_2 = "TestTable2"
; 连接数据库
$sqlCon = _MSSQL_Con($IP, $USER, $PASS, $DATABASE)
; 在数据库中创建表,默认自动生成 ID 列
_MSSQL_CreateTable($sqlCon, $TableName_2)
; 创建一个或多个新的列
_MSSQL_CreateColumn($sqlCon, $TableName_2, "TestColumn VARCHAR(150)")
; 在数据库表中插入一组数值,由于没有使用条件方式,会出现重复数据
For $i = 1 To UBound($TestArray1) - 1
_MSSQL_AddRecord($sqlCon, $TableName_2, "'" & $TestArray1[$i] & "'")
Next
; 关闭数据库连接
_MSSQL_End($sqlCon)
EndFunc ;==>Example_2
回复 1# anypac
原函数已支持一次写入多个值,但是只支持数组。
花了点时间,作了个简化版的,无避免重复数据措施。
要写入多个值(支持单一值):
1,以一维数组作为参数。如: $Values = ['001', 'you', '007', 'me']
2, 多个值以逗号分隔。如:$Values = "001,you,007,me"
我没测试,因为你只提供了原UDF的一个函数。。。。无完全测试条件!
Func _MSSQL_AddRecords($oConnectionObj, $sTable, $Values)
If Not IsObj($oConnectionObj) Or @error ThenReturn SetError(1, 0, 0)
Local $str = "INSERT INTO " & $sTable & " VALUES('"
If IsArray($Values) Then ; 要写入的值为一个数组;只支持一维数组
If UBound($Values, 2) <> 0 Then Return SetError(3, 0, 0)
For $i = 0 To UBound($Values)-1
$str &= StringReplace($Values[$i], "'", "''") & "'," ; 写入的值有单引号时,必须把它转化为两个单引号
Next
StringTrimRight($str, 1) ; 删掉最后一个逗号
$str &= ");"
Else
$Values = StringReplace($Values, "'", "''")
If StringInStr($Values, ',') Then ; 字符串有多个值,以逗号分隔
$Values = StringReplace($Values, ",", "','")
EndIf
$str &= $Values & "');"
EndIf
$oConnectionObj.execute($str)
Return 1
EndFunc ;==>_MSSQL_AddRecords 谢谢你的帮助,我的问题是这个过程本来就支持一次写入多个数据,问题是他只支持单列多数据或者单数据的入库,不支持单行数据的输入,能不能修改一下让他支持单行输入呢?谢谢 本帖最后由 anypac 于 2013-10-20 08:59 编辑
今天早上看了另一个mssql的udf,参照了user3000大大的方法,自己改了一下,请高手们看看有没有什么漏洞,谢谢了,可以插入一行数据,不过要自定义好列的名字和对应的数据,本人初学,不懂得怎么判断过滤“*”和$srow=“”的情况,所以如果定义了多个列,然后$values是数组的话可能会出现错误~而且这个改动过的过程不支持$values是多维数组
Func _MSSQL_AddRecords($oConnectionObj, $sTable, $sRow, $Values)
If Not IsObj($oConnectionObj) Or @error ThenReturn SetError(1, 0, 0)
Local $str = "INSERT INTO " & $sTable & " (" & $Row & ") VALUES('"
If IsArray($Values) Then ; 要写入的值为一个数组;只支持一维数组
If UBound($Values, 2) <> 0 Then Return SetError(3, 0, 0)
For $i = 0 To UBound($Values)-1
$str &= StringReplace($Values[$i], "'", "''") & "'," ; 写入的值有单引号时,必须把它转化为两个单引号
Next
StringTrimRight($str, 1) ; 删掉最后一个逗号
$str &= ");"
Else
$Values = StringReplace($Values, "'", "''")
If StringInStr($Values, ',') Then ; 字符串有多个值,以逗号分隔
$Values = StringReplace($Values, ",", "','")
EndIf
$str &= $Values & "');"
EndIf
$oConnectionObj.execute($str)
Return 1
EndFunc ;==>_MSSQL_AddRecords
没有大哥来完善一下吗?坐等啊坐等
页:
[1]