030104.htm

来自「提供一个VB学习教程,入门级。来源于网上」· HTM 代码 · 共 262 行 · 第 1/2 页

HTM
262
字号
        cmd.CommandType=adCmdTable (是一张表)<br> 
        ★ Prepared属性:第1次执行时是否进行编译,以提高以后的执行速度。如:<br> 
        cmd.Prepared=True表示进行命令的预编译,提高以后的执行速度。<br>
        ★ Execute方法:执行命令。有两种情况,如果命令会返回记录,如Select或干脆就是1个表名等,则要将返回记录(当作记录集)赋予1个Recordset对象,格式为<br> 
        Set Recordset对象=command对象.Execute()<br> 
        如果命令不返回记录(如Update,Delete等),则直接用"command对象.Execute"即可。<br>
        ★ State属性:对象的当前状态,可能值有:adStateClosed对象已关闭;adStateOpen对象已打开;adStateConnecting对象正在连接;adStateExecuting正在执行命令;adStateFetching表明Recordset对象的行正在被取回。State属性实际是一个通用属性,因为在连接对象Connection,命令对象Command,记录集Recordset中都有这个属性。<br> 
        ★ CreateParameter方法和Parameters集合:创建1个新的Parameter对象,如果CommandText(命令)是带参数的SQL Server存储过程,可用此方法创建参数对象,格式:<br> 
        Set parameter对象= command对象.CreateParameter(对象名name,参数类型type,输入/输出参数direction,参数长度size,参数值value)<br> 
        其中,Type指定对象值的数据类型如adInteger,adVariant等;Direction参数指定参数类型,可选值有adParamUnknown未知;adParamInput输入参数;adParamoutput输出参数;adParamInputOutput输入/输出参数;adParamReturnValue是一个返回值参数。<br>
        Size参数指定对象值的最大长度。<br>
        Value:对象的值。<br>
        用CreateParameter方法仅在内存中创建参数对象,并不真正包含进Command对象中,要用命令对象中Parameters集合的Append方法添加上,才算真正建立。格式:Command对象.Parameters.Append Parameter对象变量。<br> 
        我们通常在打开SQL Server上带参数的存储过程时使用此方法传送所需参数,例如:<br> 
        Dim cn as ADODB.Connection<br> 
        Dim cmd as ADODB.Command<br> 
        Dim rst as ADODB.Recordset<br> 
        Dim param as ADODB.Parameter<br> 
        Set cn=New ADODB.Connection<br> 
        cn.Open “driver={SQL Server};server=www.ndlxn.com;uid=ndlxn;pwd=848484;<br> 
        database=pubs”<br>
        Set cmd=New ADODB.Command<br> 
        cmd.ActiveConnection=cn<br>
        cmd.CommandText=”mystoredinsqlserver” 存储过程的名称。<br> 
        cmd.CommandType=adCmdStoredProc<br>
        Set param=cmd.CreateParameter(“par1”,adBoolean,adParamReturnValue)<br> 
        cmd.Parameters.Append param<br> 
        Set param=cmd.CreateParameter(“par2”,adInteger,adParaminput,,Val(text1.text))<br> 
        cmd.Parameters.Append param 下面只用一行也可以达到同样的添加参数目的。<br> 
        cmd.Parameters.Append cmd.CreateParamter(“par3”,adInteger,adParamOutput)<br> 
        Set rst=cmd.Execute<br> 
        Msgbox rst(0).Value<br> 
        Msgbox cmd(“par1”)<br> 
        Msgbox cmd(“par3”)<br> 
        这里,三个参数中,par1是一个返回值,par3是一个输出参数,可以在程序中显示出来。<br>
        参数查询例如我们想让程序运行时,由用户自己来输入commandtext命令的where参数值,建立1个Parameter对象,用如下的方式来创建和使用参数:<br>
        cmd.CommandText="DELETE FROM students WHERE ID BETWEEN ? AND ?"<br> 
        其中的两个问号未直接给出值,相当于两个“变量”,要用Parameter参数对象。<br>
        Dim Par as ADODB.Parameter<br> 
        Dim Par1 as ADODB.Parameter<br> 
        Set Par =New ADODB.Parameter<br> 
        Par.Name= “myid”<br> 
        Par.Type=adInteger<br>
        par.size=5<br>
        par.value=98001 ‘只要赋予变量即实现用户控制,如par.value=cint(text1.text)<br> 
        par.Direction=adParamInput<br>
        cmd.Parameters.Append par<br> 
        Set Par1=New ADODB.Parameter<br> 
        par1.name= ”my”<br> 
        par1.type=adinteger<br>
        par1.size=5<br>
        par1.value=98008<br>
        par1.Direction=adParamInput<br>
        cmd.Parameters.Append par1<br> 
        cmd.Execute<br>
        这段代码是查询students表中98001—98008之间的所有记录,在command对象cmd的变量集中的变量par,par1会自动依次代入两个?号。<br>
        在实际使用中,如果不知参数的类型,可设type为adVariant(变体),参数的name,<br>
        size和direction是可选属性,可用缺省值。再举1例:<br>
        Private Sub Command2_Click()<br> 
        cmd.CommandText = "select * from BB where 姓名 like ?"<br> 
        Set par = cmd.CreateParameter ("abc", adVariant, adParamInput, 6,Text1.text)&nbsp;<br>
        ’Set par = New ADODB.Parameter 上面这一句顶这么多!<br> 
        ’par.Name = "abc"<br> 
        ’par.Size = 6<br> 
        ’par.Type = adVariant<br> 
        ’par.Value = Text1.Text<br> 
        ’par.Direction = adParamInput<br> 
        cmd.Parameters.Append par<br> 
        Set lxn = New ADODB.Recordset<br> 
        Set lxn = cmd.Execute()<br> 
        End Sub&nbsp;<br>
        ★Cancel方法:取消一个未执行的,异步的Execute或Open方法的调用。前面讲过。<br>
        ------------------------------<br>
        Recordset对象补充<br>
        ★ CursorLocation属性:指定记录集的光标位置,有adUseServer和adUseClient两种。如果在connection对象连接前未指定游标,则必须在此设置。<br> 
        ★ CursorType属性:光标类型。<br> 
        ★ UpdateBatch方法:同时保存多条被更改的记录。<br> 
        ★ Open方法:建立1个记录集,格式:<br> 
        Recordset.Open Source,Activeconnection,Cursortype,Locktype,Options<br> 
        其中,Source即RecordSource参数可以是1个查询、存储过程名或表名等;或者1个Command对象变量名(此时要省略ActiveConnection参数,即为空),ActiveConnection参数指明该记录集基于哪个Connection连接对象,这个连接对象必须是已建立的连接,当没有Connection对象时,该参数就直接指定一个ConnectionString连接串;Cursortype指明游标类型,Locktype指明记录锁定方式(记录集是否可修改/只读),Options是说Source参数中内容的类型,如表,存储过程等,与Command对象的Commandtype类似。<br>
        例如:<br>
        rst.Open "students",cn,adOpenDynamic,adLockOptimistic,adCmdTable<br> 
        使用Open方法,不要事先建立Connection和Command对象,也可打开数据源——其实,它们三个对象本来就是平行的嘛,如:<br>
        Dim rst As New ADODB.Recordset<br> 
        Private Sub Form_Load()<br> 
        Const cnStr = "Provider=Microsoft.Jet.OLEDB.3.51;Persist Security Info=False;Data Source=C:\工商所收费系统\MyDatabase.mdb"<br> 
        rst.Open "select * from Unitrecord", cnStr, adOpenDynamic, adLockOptimistic<br> 
        End Sub<br> 
        只要这么几句,就打开一个记录集了。<br>
        ★ Save方法:将记录集存为1个文件。本方法不会关闭记录集。格式:<br> 
        recordset对象变量.Save 路径和文件名<br> 
        该方法在记录集建立后才能使用。在第1次使用该方法存储记录集后,如果需要往同一文件存储同样的记录集,要省略文件名。&nbsp;<br>
        我在使用ADO对象时遇到1难题:竟没用来!我在声明段和Form_load事件中声明了对象变量,也设置了connectionstring,open属性,也给记录集对象赋予了Execute方法得到的记录,可是,记录集对象不可用,如:(红色代码为修改后的正确写法。)<br>
        Dim cn As ADODB.Connection<br> 
        Dim cmd As ADODB.Command<br> 
        Dim rst As ADODB.Recordset<br> 
        rivate Sub Form_Load()<br> 
        Set cn = New ADODB.Connection<br> 
        cn.ConnectionString = "FILE NAME=C:\WINDOWS\Desktop\Savelink.UDL"<br> 
        cn.CursorLocation=adUseClient&nbsp;<br>
        cn.Open<br>
        Set cmd = New ADODB.Command<br> 
        Set cmd.ActiveConnection = cn<br> 
        cmd.CommandText = "select * from sub1"<br> 
        Set rst = New ADODB.Recordset<br> 
        ‘ Set rst = cmd.Execute() ‘缺省情况下,记录集为只读,如果要修改记录,需要设定记录集的LockType属性,或在记录集对象的OPEN方法中一并设置。<br> 
        rst.Open "sub1", cn, adOpenDynamic, adLockOptimistic&nbsp;<br>
        (注:第1个参数”sub1”也可采用1个command对象名,但那样的话要省略后面cn,如下:<br>
        rst.Open cmd, , adOpenDynamic, adLockOptimistic)&nbsp;<br>
        Label2.Caption = "本过程共" &amp; rst.RecordCount &amp; "步。"<br> 
        rst . addnew<br> 
        rst(0) = "搞试验"<br> 
        rst(1) = "我的实验"<br> 
        rst.Update ‘这句不能丢!设为adLockOptimistic对记录的修改不会自动进行保存!!!!<br> 
        End Sub&nbsp;<br>
        执行到label2.caption=…rst.RecordCount…和rst . addnew时就出错了,好象根本就没有rst似的。<br> 
        为什么?缺省情况下,ADO对象中connection对象是无游标的,必须在open之前设置好其CursorLocation属性(也可以设置Recordset对象的CursorLocation属性),而用connection或command对象赋予的记录集是只读的,不能Addnew,要全面操作数据库必须用记录集的Open方法。</font>
        <p align="center">
        <br>
        &lt; <a href="030103.htm">上一页</a>--<a href="http://www.xxby.com" target="_blank">华生小屋</a>--<a href="030105.htm">下一页</a>     
        &gt;<br>
      </td>
    </tr>
  </table>
  </center>
</div>

</body>

</html>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?