none
VB6.0下怎么在MSHFlexGrid实现超级链接 RRS feed

  • 问题

  • 如果在SQL Server 2000 中的数据库中有超级链接,那怎么在MSHFlexGrid表格内通过鼠标单击然后打开所连接的内容呢?
    现在单击MSHFlexGrid表格内的连接地址没有任何反应。
    可以通过什么方法来实现超级链接呢?
    谢谢各位老师!


    时刻都在努力学习!
    2009年11月18日 11:29

答案

  • 不客气,我也是来学习的,Access(*.adp)文件我还没用过

    不过对于你说的“\\Servers\rkbg\AAA.xls#\\Servers\rkbg\AAA.xls#”这种情况,可以用Instr函数来变通一下

    MyStr=Left(.TextMatrix(x, y), InStr(s, "#"))'可以在需要的地方用
    MyStr =Replace(MyStr , "#", "")
    ShellExecute Me.hwnd, "open", MyStr, vbNullString, vbNullString, 2
    • 已标记为答案 张三宾 2009年11月19日 9:43
    2009年11月19日 5:34

全部回复

  • Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
    Private Sub Form_Load()
    With MSHFlexGrid1
     .TextMatrix(1, 1) = "http://social.microsoft.com/Forums/zh-CN/vbasiczhchs/threads"
     .TextMatrix(2, 4) = "http://social.microsoft.com/"
    End With
    End Sub
    
    Private Sub MSHFlexGrid1_Click()
    Dim x As Integer
    Dim y As Integer
    With MSHFlexGrid1
      x = .MouseRow
      y = .MouseCol
      If Left(.TextMatrix(x, y), 4) <> "http" Then Exit Sub
      ShellExecute Me.hwnd, "open", .TextMatrix(x, y), vbNullString, vbNullString, 2
    End With
      
    End Sub
    
    2009年11月18日 11:53
  • 首先谢谢您的回答:
         我还有问题,比如现在数据库中有一个ntext类型的字段,字段名称叫"数据表格"并且它的属性已经设置成为超级链接(这些设置都是在SQL Server 2000 中设置的)。现在“数据表格”字段的内容比如是“\\Servers\rkbg\AAA.xls”。那么为什么在MSHFlexGrid中显示的是“\\Servers\rkbg\AAA.xls#\\Servers\rkbg\AAA.xls#”呢?单击也没有任何反应。
        我想要的功能是,当鼠标单击“数据表格”字段时,然后打开\\Servers\rkbg\AAA.xls这个路径的一个名为AAA的电子表格。
    时刻都在努力学习!
    2009年11月19日 1:57
  • “\\Servers\rkbg\AAA.xls#\\Servers\rkbg\AAA.xls#”为什么会有一个“#”,内容重复了吧??
    而且看你的字段内容,似乎是局域网内一个XLS文件,但“\\Servers\rkbg\AAA.xls#\\Servers\rkbg\AAA.xls#”这样的路径肯定是不对的吧,正确的值是不是应当为“\\Servers\rkbg\AAA.xls#”呀?请检查你字段的值为什么会是这样。
    下面的代码如果是打开本地计算机中存在的XLS文件是没有错误的。例如,该字段值为“C:\Documents and Settings\Administrator\桌面\temp.xls”


    Private
    Sub MSHFlexGrid1_Click()
    Dim x As Integer
    Dim y As Integer
    Dim MyStr As String
    With MSHFlexGrid1
      x = .MouseRow
      y = .MouseCol
      If .TextMatrix(x, y) ="" Then Exit Sub
      MyStr =Replace(.TextMatrix(x, y) , "#", "")
      ShellExecute Me.hwnd, "open", MyStr, vbNullString, vbNullString, 2
    End With
     
    End Sub
    2009年11月19日 3:52
  • 非常感谢您
      遇到这样的问题我也感到奇怪。怎么会出现两个呢。“\\Servers\rkbg\AAA.xls#\\Servers\rkbg\AAA.xls#”但是数据库中明明是只有一个“\\Servers\rkbg\AAA.xls”的路径的。可是当通过VB6.0把数据读入MSHFlexGrid控件内后,该字段的值就会成这样。难道目标非要在本地计算机吗?可是我以前使用Access(*.adp)并没有这样的情况


    老师你好。
    刚刚我又做了个实验
    当超级链接的目标是局域网的话:
    如果超级连接的目标是局域网的共享路径的话,把数据读入MSHFlexGrid控件内后,原本只有一个路径现在就变成两个路径了,而数据库中其实就只有一个路径。

    当超级练级的目标是本地计算机的话:
    当超级练级的目标是本地计算机的话,一切正如您说的一样,可以成功执行,
    时刻都在努力学习!
    2009年11月19日 4:49
  • 您好

    如果你确认数据库中明明是只有一个“\\Servers\rkbg\AAA.xls”,而读入MSHFlexGrid控件内后却变成了两个,我想一定是你读取数据库并赋值与MSHFlexGrid的代码出了问题

    我刚才建了一个数据库,存入“\\Servers\rkbg\AAA.xls”,用ADODC控件+MSHFlexGrid控件直接读取并没有出现你说的问题,你可以试一下。

    请仔细检查一下代码。
    2009年11月19日 5:04
  • 难啃的VB您好:
    首先应该说声对不起!
    是我误导您了、
    刚刚我又仔细的进行了测试!
    结果:
    先解释为什么会出现两个一样的链接地址,我是使用Access(*.adp)文件创建的链接地址,使用adp文件插入超级链接。插入后在adp文件的表格内显示的是只有一个超级链接地址,而实际上在数据库中存在连个一样的地址也就是刚刚那个样子“\\Servers\rkbg\AAA.xls#\\Servers\rkbg\AAA.xls#”。而当我使用VB6.0把SQL Server 2000中的数据读入MSHFlexGrid时,它肯定显示的是两个一摸一样的地址了!
    如果我直接在SQL Server 2000中把链接地址改成\\Servers\rkbg\AAA.xls#。那么在VB6.0的MSHFlexGrid中就可以使用了。但是在Access(*.adp)文件中就不行了。

    现在我奇怪的是Access(*.adp)文件为什么非要把超级链接地址“\\Servers\rkbg\AAA.xls#\\Servers\rkbg\AAA.xls#”保存在数据库中呢?为什么“\\Servers\rkbg\AAA.xls#”这样的一个还不能用呢?

    不过还是衷心的感谢您的回答。
    我在这里已经学会了好多东西了,谢谢您

    时刻都在努力学习!
    2009年11月19日 5:16
  • 不客气,我也是来学习的,Access(*.adp)文件我还没用过

    不过对于你说的“\\Servers\rkbg\AAA.xls#\\Servers\rkbg\AAA.xls#”这种情况,可以用Instr函数来变通一下

    MyStr=Left(.TextMatrix(x, y), InStr(s, "#"))'可以在需要的地方用
    MyStr =Replace(MyStr , "#", "")
    ShellExecute Me.hwnd, "open", MyStr, vbNullString, vbNullString, 2
    • 已标记为答案 张三宾 2009年11月19日 9:43
    2009年11月19日 5:34
  • MyStr=Left(.TextMatrix(x, y), InStr(s, "#"))'可以在需要的地方用
    MyStr =Replace(MyStr , "#", "")
    ShellExecute Me.hwnd, "open", MyStr, vbNullString, vbNullString, 2

    InStr(s, "#") :S是什么?
    时刻都在努力学习!
    2009年11月19日 9:43
  • 抱歉,我写错了

    MyStr=Left(.TextMatrix(x, y), InStr(.TextMatrix(x, y), "#"))'可以在需要的地方用
    2009年11月19日 9:51
  • 果然可以!!
    谢谢您了。
    时刻都在努力学习!
    2009年11月19日 11:24
  • 对了不知道哦你使用过AutoCAD 2004 没有。机械制图的软件。他的扩展名为(*.dwg)。使用您的代码为什么打不开这类文件。屏幕一闪而过!其他类型正常
    时刻都在努力学习!
    2009年11月19日 11:28
  • 对不起!
    我又犯了个错误!
    原因是我的CAD出了些问题!
    我的问题全部解决,谢谢你。
    时刻都在努力学习!
    2009年11月19日 11:31
  • 对不起!
    我又犯了个错误!
    原因是我的CAD出了些问题!
    我的问题全部解决,谢谢你。
    时刻都在努力学习!


    不客气,互相学习,共同提高。
    2009年11月20日 3:21