能不能先建立一个Data Environment以及几个command
但是不在属性里设置ConnectionString及command的SQL语句
而是在程序里面定义(初始化)连接字符串?怎么做?
我试过,好像不在属性里初始化command的SQL语句的话,程序里rsCommand1出不来。我主要目的是不想在属性里设置连接字符串,这样的话数据库路径就定死了
我想用app.Path\test.mdb这样,让程序放在任意路径下均能运行
各路大侠帮帮忙!

解决方案 »

  1.   

    下列代码是否符合题意de是DataEnvironment
    cnet是deconnectionTs = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\book.mdb;Persist Security Info=False"de.cnet.ConnectionString = Ts
    de.cnet.Open Ts
    If de.rscmdcqts.State <> adStateClosed Then
       de.rscmdcqts.Close
    End If
    de.rscmdcqts.Open "select tsbh,lbdm,tszbh,jsrq from jsb,lbb where jsrq<=# " & N & " # and lbdm='" & Trim(Combo1.Text) & "'", de.cnet, adOpenStatic, adLockOptimisticSet dpr超期图书.DataSource = de
        dpr超期图书.DataMember = "cmdcqts"
    dpr超期图书.Show
      

  2.   

    我的意思是在建立好数据环境后(已经有了几个Command,但是Command的SQL语句未在windows下定义)
    在程序中给Command赋SQL语句事实是我如果不先给Connection1赋连接字符串(即先与数据库连接好),
    那么输入DataEnvironment.后不会自动出现rsCommand1,而只是有几个绿色的Command
      

  3.   

    我也知道这样可问题是先设计的话,必定要将Connection1中与某一数据库连接,连接的字符串是绝对路径
    我不想用绝对路径,因为用户安装不一定安装在我制作时指定的路径下我想在代码中用app.Path定路径但在代码中设定DE.Connection1.ConnectionString=""的话,
    DE.Command1的CommandText(即rsCommand1的SQL语句就没法定义了)
      

  4.   


    Private Sub DataEnvironment_Initialize()   '关键是这里!!!!!!!!!在代码中它重新生成!
      Connection1.ConnectionString = ConnectString
      Connection2.ConnectionString = ConnectMDBString
    End Sub
    Public Function ConnectString() _
       As String
    'returns a DB ConnectString
       ConnectString = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;password=XXXXXX;Initial Catalog=JiLiangSuo;Data Source=sql01"
    End Function
    你不要把DE的代码写死了,像我那样,将它指向你程序中的连接字符串,上面的只是示例,你程序中完成可以将连接信息写进INI文件,然后根据INI文件生成连接字符串.
    再完全一些,你可以做个窗口,让用户填写数据库路径,然后你生成INI文件.这样你程序中的取出INI文件中的字符串后,生成ConnectString.
      

  5.   

    感觉我好像没讲明白.我的意思是说:
    你的整个程序如果控制成让用户选择数据库路径的话,那这个问题就好解决了.
    在程序的设计阶段你可以按绝对路径做.然后在DE的Initialize事件中让它更改原来的连接字符串.
    Private Sub DataEnvironment_Initialize()   '关键是这里!!!!!!!!!在代码中它重新生成!
      Connection1.ConnectionString = ConnectString
      Connection2.ConnectionString = ConnectMDBString
    End Sub而这个connectString是你的程序中生成,跟DE已经没有关系了.
      

  6.   

    我以前试过,不行,数据环境的连接字符串还好说,但command的查询语句怎么实时修改我就真的没办法了
    csdn有位兄弟就是因为这个问题没有解决,现在准备转行去搞销售了唉。。可惜
    如果不需要调用存储过程,就改用ado吧想怎么改都行。
      

  7.   

    怎么会不行呢?
    将它看作是ADO中的command一样看待啊。
    我现在公司没有VB,回家试验!
      

  8.   

    未改数据环境连接字任串时:
    Private Sub Command1_Click()
       Set MSHFlexGrid1.DataSource = DE.Commands("command1").Execute
    ‘command1的结果集是一个表。
    End Sub将数据环境连接字符串修改成错误时:
    Private Sub Command1_Click()
      DE.Connection1.ConnectionString = ConnectString
      DE.Connection1.CursorLocation = adUseClient
      DE.Commands("command1").CommandType = adCmdText
      DE.Commands("command1").CommandText = "select * from 工作证书表"
      ’将查询改为SQL语句
      Set MSHFlexGrid1.DataSource = DE.Commands("command1").Execute
    End Sub
      模块中的代码:
     Public Function ConnectString() _
       As String
    'returns a DB ConnectString
       ConnectString = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;password=XXXX;Initial Catalog=JiLiangSuo;Data Source=sql01"
    End Function测试正常!
      

  9.   

    我用vb6+access+DataEnvironment1+datagrid测试上面的代码(没有从新修改DataEnvironment1的连接字符串,因为是测试访问同一数据库的不同表,只修改了command1的commandtext属性)但refresh后datagrid没有更新显示数据。。
      

  10.   

    楼上的,你的VB打最新的补丁了吗?如果打了换MSHFLEXGRID试.DATAGRID我不熟.
      

  11.   

    打了,如果我用ado做数据源则一切正常,sql查询语句想怎么改都行,但用数据环境就不行了,不知是不是DataEnvironment1+datagrid会有冲突。
      

  12.   

    DE.Commands("command1").CommandText = "select * from 工作证书表"
    这句话给了我很大的启发但是好像还是不行,不知为什么,我现在思路太混乱了,我再试试看,
    估计按照wumylove1234(决心不做IT界大板锹) 的方法肯定是对的,一定是能够实现的
    只是估计我代码里还有几句话写的不对,我再找找原因看
      

  13.   

    我的设想是数据库路径不让用户选择,这样一是麻烦用户,二是万一用户不懂,容易出错“在程序的设计阶段你可以按绝对路径做”----这样不行的,因为设计时指定了绝对路径的话
    比如讲C:\test.mdb,而用户安装时如果指定程序装在D:\下,那么一运行不就会出错么?(我的数据库和程序文件放在同一目录下的,所以想用App.Path & \test.mdb动态定数据库路径)
      

  14.   

    “在程序的设计阶段你可以按绝对路径做”----这样不行的,因为设计时指定了绝对路径的话
    比如讲C:\test.mdb,而用户安装时如果指定程序装在D:\下,那么一运行不就会出错么?(我的数据库和程序文件放在同一目录下的,所以想用App.Path & \test.mdb动态定数据库路径)
    兄弟,我讲了好多次了啊.
    Private Sub DataEnvironment_Initialize()   '关键是这里!!!!!!!!!在代码中它重新生成!
      Connection1.ConnectionString = ConnectString
      Connection2.ConnectionString = ConnectMDBString
    End Sub你可以数据环境初始化代码里更改连接字符串的啊,而不用管它在设计阶段是如何连接的啊.
    上连的connectstring我是放在标准模块中的公用函数.
      

  15.   

    二位不行把你们的代码发给我吧.
    [email protected]
      

  16.   

    唉这就是那位不幸的兄弟:
    http://expert.csdn.net/Expert/topic/2770/2770960.xml?temp=.9293787
    http://expert.csdn.net/Expert/topic/2920/2920573.xml?temp=.3051721
    收了人家的分,又解决不了问题。惭愧啊。
      

  17.   

    唉。
    http://expert.csdn.net/Expert/topic/2920/2920571.xml?temp=.8903162
      

  18.   

    在DataEnvironment_Initialize() 中编程序,一直报错.而且VB都会死机.
      

  19.   

    在DataEnvironment_Initialize() 中编程序,一直报错.而且VB都会死机.杀毒;
    重装系统;
    换张VB6的盘;
    装SP6
    .......
      

  20.   

    谢谢各位
    尤其感谢wumylove1234(决心不做IT界大板锹),真的很感谢你,为你的热心所感动.......由于挺急的,我中午就改用另一种方法了,现在也不想再修改了
    我估计你的方法是正确的
    在DataEnvironment_Initialize()里添加初始化代码我想是可以的以后有时间我再试验,成功的话,时间允许我再改
    如果还有问题我发代码给你,您的油箱我记下了。我接触这个时间不长,加上比较愚钝,所以高手们的有些高见我还看不太懂,还要努力向大家学习阿:-)谢谢,结贴