win7下,中文表名出问题了


Public Sub OpenRS()
  Set DB = OpenDatabase(DBPath, False, False, DBPassWord)
  Set RS = DB.OpenRecordset(strSQL)
End Sub

例如strSQL="用户表",老是提示“找不到表”,表名改成英文的“user”,就没有问题

用VB6自带的Visdata也打不开中文表名的表,但是用Access2003可以正常打开


求解决方法









不要反问我问什么不用英文表名,这不是本帖重点

26 个解决方案

#1


没用过win7 ,加[]试试吧

#2


友情Up...........



试一下这样行不:
Set RS = DB.OpenRecordset(StrConv(strSQL,vbFromUnicode))

#3


先谢谢

楼上两帖都不成功

#4


前面在加数据库名 数据库名.dbo.表名

#5


没用过win7!
如果这两种方法都不成功,你何不用ado试看看呢?
如果visdata打不开,那么应该是没有什么别的办法了!

#6


如果有时间的话,也可跟踪visdata的源码,debug.print db.tables(),看看结果,也许会有帮助吧!

#7


引用 5 楼 cqq_chen 的回复:
没用过win7!
如果这两种方法都不成功,你何不用ado试看看呢?
如果visdata打不开,那么应该是没有什么别的办法了!


成熟的项目,从win95直到winXP都没有问题,要改成ado不容易,而且ado速度要慢很多

#8


引用 6 楼 cqq_chen 的回复:
如果有时间的话,也可跟踪visdata的源码,debug.print db.tables(),看看结果,也许会有帮助吧!


有结果,就是“找不到此表”

#9


错误号3078

#10


引用 7 楼 lfshf 的回复:
引用 5 楼 cqq_chen 的回复:
 没用过win7!
 如果这两种方法都不成功,你何不用ado试看看呢?
 如果visdata打不开,那么应该是没有什么别的办法了!



 成熟的项目,从win95直到winXP都没有问题,要改成ado不容易,而且ado速度要慢很多

其实你可以用ado试看看,如果dao不能用,可能ado有会有问题的。
建议还是用winxp好了,用户那应该不难说服才对,新的操作系统不见得就是那合适的....

#11


如果是正版的win7的话,建议楼主把这个问题反映给microsoft,应该是一个小bug吧!

#12


引用用DAO3.6后(原来3.51)DAO可以正常查询了

可是和Data控件又出现了相同问题,找不到表

#13


看来都是软件版本跟不上啊

#14


引用 12 楼 lfshf 的回复:
引用用DAO3.6后(原来3.51)DAO可以正常查询了
可是和Data控件又出现了相同问题,找不到表

strSQL=" [用户表]",这样真的不行吗,没有道理呀

#15


引用 14 楼 asftrhgjhkjlkttttttt 的回复:
引用 12 楼 lfshf 的回复:
引用用DAO3.6后(原来3.51)DAO可以正常查询了
可是和Data控件又出现了相同问题,找不到表

strSQL=" [用户表]",这样真的不行吗,没有道理呀


3.51版本不行,3.6的可以,加不加中括号没有关系

#16


我原来是用Data控件跟msflexgrid绑定的,data更新一下,msflexgrid跟着就更新显示,很是方便

现在win7下data不兼容了,看来只好读出数据后填充到表格里了,大数据量下速度可能很受影响

#17


找到一个现成的
Public Sub AdoToMsfxGrid(ByRef MG As MSFlexGrid, ByVal Rs As Recordset)
    Dim i As Long
    Dim J As Long
    MG.Clear
    MG.Cols = Rs.Fields.Count
    MG.Rows = Rs.RecordCount + 1
    MG.Redraw = False
    For i = 0 To Rs.Fields.Count - 1
        MG.TextMatrix(0, i) = Rs(i).Name
    Next
    For J = 1 To Rs.RecordCount
        For i = 0 To Rs.Fields.Count - 1
            MG.TextMatrix(J, i) = Rs(i)
        Next
        Rs.MoveNext
    Next
    MG.Redraw = True
End Sub

#18


该回复于2010-03-12 11:39:34被版主删除

#19


win7支持VB?

#20


引用 17 楼 lfshf 的回复:
找到一个现成的
 Public Sub AdoToMsfxGrid(ByRef MG As MSFlexGrid, ByVal Rs As Recordset)
     Dim i As Long
     Dim J As Long
     MG.Clear
     MG.Cols = Rs.Fields.Count
     MG.Rows = Rs.RecordCount + 1
     MG.Redraw = False
     For i = 0 To Rs.Fields.Count - 1
         MG.TextMatrix(0, i) = Rs(i).Name
     Next
     For J = 1 To Rs.RecordCount
         For i = 0 To Rs.Fields.Count - 1
             MG.TextMatrix(J, i) = Rs(i)
         Next
         Rs.MoveNext
     Next
     MG.Redraw = True
 End Sub

我也觉得用ado挺好的

#21


通过schema把所有的表名打印出来看看到底是什么样子的

#22


试着用这个语句看看, 这套系统我是用英文表名, 但在 Win7下没问题, 可以试一下

Public Sub OpenData()
   On Error GoTo errh
   db = "Driver={Microsoft Access Driver (*.mdb)};DBQ=" & DataDisk & "thplu.mdb"
   Conn.CursorLocation = adUseClient
   Conn.Open db '打开数据库连接
   Rs.Open "ThProd", Conn, adOpenKeyset, adLockPessimistic '打开记录集
   Trec = Rs.RecordCount
errh:
   If Err > 0 Then MsgBox "数据库打开错误"
End Sub

#23


该回复于2010-03-12 11:39:19被版主删除

#24


学习

#25


名称还是尽量用英文的好,是让电脑是老外发明的呢

#26


该回复于2010-03-12 11:38:11被版主删除

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
© 2014-2018 ITdaan.com 粤ICP备14056181号