VB DataEnvironment中添加一个命令,数据源SQL语句。不知道能否用于带参数的SQL语句作为数据源?能的话我如何把参数带入SQL中~请高手帮助下

解决方案 »

  1.   

    Private Sub Command1_Click()
        Dim sqlstr As String
        
        sqlstr = "select * from 员工 where 姓名 ='" & text1.Text & "'"    DataEnvironment1.Commands("Command1").CommandText = sqlstr
    End Sub
      

  2.   

    那个是一般的SQL语句,我想知道能不能作用与带参数的SQL的语句比如:
    PARAMETERS pID Text ( 20 );
    SELECT *
    FROM Equipment
    WHERE (((Equipment.ldck_id)=[pID]));
    这样的。
      

  3.   


    用DE不知道行不行,不过用ADO一定是可以的,建议你改用ADO来生成记录集...
      

  4.   

    给我的感觉,VB的这个DE,最好的用处,就是可以用来学习ADO的SHAPE命令......
      

  5.   

    ADO是支持PARAMETERS的,感觉DE可能不行......
      

  6.   

    可以,将 Command 的 SQL 定义为
    SELECT * FROM Equipment WHERE ?
    然后到属性页 Parameters 中给参数指定名称、类型、长度等。
      

  7.   

    基本上我这样测试的。可能不是很成熟,希望能帮我看看
    Private cm As New Command '定义命令对象
    Private rs As New Recordset '定义纪录集对象
    Private p As New Parameter '定义参数对象
    Private cn as new connection
    '**********************************数据库连接***********
    Private Sub Form_Load()
    cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & _
       "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & _
       "\test.mdb"
    end sub
    '***********************************test funtion*********
    public function test()
    On Error Resume Next
    Set cm = DataEnvironment1.Commands("Command1")
    '设置command对象的运行参数
    cm.ActiveConnection = cn
    cm.CommandType = adCmdStoredProc
    cm.CommandText = "qryGetAuthorByID"
    '为参数查询提供参数值
    Set p = cm.CreateParameter("pID", adInteger, adParamInput, , txtID.Text)
    '把参数对象添加到命令对象中
    cm.Parameters.Append p
    '执行查询并把结果返回到记录集中
    Set rs = cm.Execute
    '显示记录集中的记录
    If rs.EOF And rs.BOF Then
           MsgBox "No authors found."
    Else
           MsgBox "Author= " & rs.Fields("meter_id").Value
    End If
    end function
      

  8.   

    既然用了ADO,干嘛还用DE,有个示例片段,参考下:    str = "PARAMETERS @1 text,@2 int;"
        sql = str & "SELECT * FROM tb WHERE iName=@1 And qty=@2"
        Set cmd = New ADODB.Command
        cmd.ActiveConnection = cn
        cmd.CommandText = sql
        cmd.CommandType = adCmdText
        Set param = cmd.CreateParameter("@1", adChar, adParamInput, 20, txtName.Text)
        cmd.Parameters.Append param
        Set param = cmd.CreateParameter("@2", adBigInt, adParamInput, 4, txtQty.Text)
        cmd.Parameters.Append param
        Set rs = New ADODB.Recordset
        Set rs = cmd.Execute
        Debug.Print rs!iName & " / " & rs!qty
        Set rs = Nothing
        Set cmd = Nothing
        Set cn = Nothing
      

  9.   

    漏了
    SELECT * FROM Equipment WHERE Equipment.ldck_id=? 
      

  10.   

    调用方式
    Private Sub Command1_Click()
        DataEnvironment1.Command1 "abc" '参数与你的 Command1 定义是一致的
        Debug.Print DataEnvironment1.rsCommand1.GetString()
    End Sub
      

  11.   

    回10楼:我用DE进行的数据打印。所以才想用DE来做查询,这样连接报表的时候可以轻松点。不要在去动态报表输出,一大段的代码。
    回11楼:会面的问号其实就是我们要输入的参数,PARAMETERS pID Text ( 20 ); 
    SELECT * 
    FROM Equipment 
    WHERE (((Equipment.ldck_id)=[pID])); 
    代码中的PID就是定义的参数。目前我遇到的难题是不知道如何把参数传递给DE中的COMMAND
      

  12.   

    Call DataEnvironment1.Command1(Text1.Text)
      

  13.   

    回复19楼:
      你的方法是可以,不过是在COMMAND中用SQL语句构造带参数的查询。其实我想测试的是如何用command直接调用ACCESS数据库中的查询(带参数的),遇到的问题是我不知道如何把参数通过command传递给access。通过数据内部的查询主要的好处是不容易出错,结果可以直接调用,不在通过中间层去解释查询语句,如此在一定意义上提高了查询速度。
      

  14.   

    可以的,假如你的 Access 查询叫 EquipmentByID
     SELECT * 
    FROM Equipment 
    WHERE (((Equipment.ldck_id)=[pID])); 创建一个 Command1,属性页中,Database Object 选 View,Object 输入 EquipmentByID,刷新一下对象。就可以调用
    Private Sub Command1_Click()
        DataEnvironment1.Command1 "abc" '参数名称就是 pID
        Debug.Print DataEnvironment1.rsCommand1.GetString()
    End Sub
      

  15.   

    老鸟说的对,如果是调用access查询中生成好的参数查询,是没问题的.那个查询并不需要PARAMETERS去构造....如果在程序代码中,要构造参数化查询SQL语句,才会用到PARAMETERS....
      

  16.   

    试验了下老鸟的方法,ACCESS中带参数的查询放到DE中被默认为存储过程,而不是视图~~
    所以我前几次一直没找到自己定义的查询。这次我没有去下拉菜单找而是直接自己填上去的。所以成功了~再次感谢所有回答的人~
      

  17.   

    用DE比ADO简单多了,2行代码解决战斗
    lz的这个问题可以这样:先在数据库里写一个存储过程
    DE里插入这个存储过程,假定为myproc
    然后:
    myde.myproc(参数)
    这样就可以运行存储过程了
    如果要用datagrid显示结果,更简单
    set datagrid1.datasource=myde.rsmyproc