问题描述:
  在Delphi7下用dbExpress控件(TSimpleDataSet)访问SQL Server 2000自带数据库Pubs,有些表能读出,有些表读不出,并报错:'Operation not applicable'。环境描述:
(1) 操作系统为简体中文版Windows 2000 Server, 版本为5.00.2195 
    (即Build 2195 Service Pack 3)。
(2) SQL Server 2000中文标准版,版本为8.00.760 SP3。
(3) Delphi 7 的版本为Version 7.0 (Build 4.453)
(4) dbExpress驱动程序(dbexpmss.dll)已换成:2002-10-10,7:01:00 
    128,000字节 版本。
(5) 上述环境集中在一台计算机上。问题详述:
在上述环境中,用TSQLConnection + TSimpleDataSet + TDataSource + TDbGrid 显示SQL Server 2000自带数据库的数据,发现有三个表不能访问:
 Sales, Titles, Employee
出现错误信息: "Operation not applicable"
其它表的内容则可以显示。本人之所以作上述测试,就是在开发时偶尔发现上述问题,遂拿SQL的例子数据库作试验,不想锁定了上述三个目标,
请问各位大侠,是什么原因造成的?相关支撑软件有没有更新的版本??相关控件的属性设置:TSQLConnection : 
    ConnectionName = 'pubs'     //自已定义的连接名
    DriverName = 'MSSQL'
    GetDriverFunc = 'getSQLDriverMSSQL'
    LibraryName = 'dbexpmss.dll'
    LoginPrompt = False
    Params.Strings = (
      'DriverName=MSSQL'
      'HostName=desktop'    // 这是本人的机器名
      'DataBase=pubs'
      'User_Name=sa'
      'Password='
      'BlobSize=-1'
      'ErrorResourceFile='
      'LocaleCode=0000'
      'MSSQL TransIsolation=ReadCommited'
      'OS Authentication=False')
    VendorLib = 'oledb'
TSimpleDataSet:
    Aggregates = <>
    Connection = scDemo         // 就是上述TSQLConnection的Name,就算用TSimpleDataSet自带的连接,也有同样问题的。
    DataSet.SchemaName = 'dbo'  // 写不写,一样的出错现象. 写上时,可以列出表名,不写时,列不出
    DataSet.CommandText = 'sales'  //这里只有sales,titles,employee三表有上述现象,其它表时表现良好
    DataSet.CommandType = ctTable  //如果改成ctQuery, CommendText改成:select * from Sales|titles|employee问题同样
    DataSet.MaxBlobSize = -1
    DataSet.Params = <>
    Params = <>

解决方案 »

  1.   

    各位大侠:
       本人经进一步的研究发现,后台数据库已经准备接受到取数据的命令(select * from ...),问题一定出在Delphi 7及dbExpress的处理上。
       更进一步的研究发现,只要SQL的表中出现Datatime类型的列,就一定会出现上述
    的错误。难道这是dbExpress的BUG????   有没有解决该问题的新版本?   不要告诉我用TSQLDataSet啊(好象用TSQLDataSet没有上述问题)。
       咱们就是要探讨"这个"问题如何解决。
      

  2.   

    Borland鼓励大家用dbExpress,以替代BDE,可是,dbExpress的表现怎么这样啊?
    咱的可是已经升级过一次的。有没有更成熟一点的dbExpress?
      

  3.   

    Sales, Titles, Employee
    三个表我都试过没问题呀!TSQLConnection + TSimpleDataSet + TDataSource + TDbGrid XP+MSDE
      

  4.   

    我用dbexpress的SQLConnection连上了一个sql server,在SQLConnection上测试连接成功的。但我想用SQLdataset进行数据处理时,SQLdataset的commandtext 的属性编辑框中没有没有显示我连上的sql server的库中的表!没有办法用SQL语句对数据进行处理!
    我应该怎样做啊???
      

  5.   

    這种二層連接TSimpleDataSet時會出現數据表連不上問題,改用三層連接會沒事
    SQLConnection1+SQLDataSet1+DataSetProvider1,SocketConnection1+ClientDataSet1
      

  6.   

    楼上的兄弟,谢啦。我已说过:别告诉我用别的方法来作。咱们可能有N种方法,用dbExpress来实现我们的应用。但是,现在是发现了一个问题,咱们得找到问题的根源,解决它。另To: 九品御厨
    晚上回到家里,果然发现,家中的机器没有这个现象,难怪在办公室里,经常发生怪怪的现象,看来是有些不同。
    家里的SQL是SP2。其它的都一样(可是咱用SQL SP2的SSNETLIB.DLL/DBNETLIB.DLL在办公室里试过,好象问题依然出现,我只替换上述两个DLL文件)。
    各位大侠,大家一起想想,问题可能出在哪里?
      

  7.   

    我也出现同样的问题。不能再SQLdataset的command text中看到数据库中的表。只好自己输入SQL语句。用SQLConnection1+SQLDataSet1+DataSetProvider1+clientdataset+datasource1+dbgrid可以看见表中字段及内容,我是刚开始学习用dbexpress编程。照李维《delphi7高效数据库编程》中的链接方式是没有办法成功。不过书中介绍的都是链接INTERBASe数据库,真是百思不得其解。望各位高手指教。谢谢!
      

  8.   

    把 DATATIME 类型改为
    SAMLLDATATIME
      

  9.   

    我也是SP3 出现同样的问题,用delphi8的dbExpress 也解决不了,真郁闷,  Marlin 你解决了吗
      

  10.   

    如果在CommandText的编辑框中没有表名,把SQLConnection中的User_name=sa的sa改为dbo就可以了,但dbo名不能在程序运行时使用,在写好SQL后还是要改回来。
      

  11.   

    7勇士突登钓鱼岛遭倭寇绑架
    http://www.1931-9-18.org/baodiao/20040324.htm抵制日货
    打倒小日本