1、用ADODB.PromptDataSource获取连接串的时候,能不能知道用户点的并不是“确定”按钮(如点了取消,或者直接关了窗口)?2、用ADOConnection连接Access数据库,执行以下SQL语句创建一个表:
   Create Table table_name(f1 String(200), f2 Integer, f3 Decimal(10, 2))
   在有些机器上会出现“无效的字段类型”错误。已知这些出错的机器都已有Microsoft Jet 4.0的驱动,并且不管是否已经装了Office中的Access程序都会出错。why?前面的50分,后面的150:)

解决方案 »

  1.   

    第二个问题,在运行正常的机器上,也与是否已经装了Office中的Access程序无关
      

  2.   

    问题一:
    这是PromptDataSource的源码,,,核桃可以把它拆散了用.function PromptDataSource(ParentHandle: THandle; InitialString: WideString): WideString;
    var
      DataInit: IDataInitialize;
      DBPrompt: IDBPromptInitialize;
      DataSource: IUnknown;
      InitStr: PWideChar;
    begin
      Result := InitialString;
      DataInit := CreateComObject(CLSID_DataLinks) as IDataInitialize;
      if InitialString <> '' then
        DataInit.GetDataSource(nil, CLSCTX_INPROC_SERVER,
          PWideChar(InitialString), IUnknown, DataSource);
      DBPrompt := CreateComObject(CLSID_DataLinks) as IDBPromptInitialize;
      if Succeeded(DBPrompt.PromptDataSource(nil, ParentHandle,
        DBPROMPTOPTIONS_PROPERTYSHEET, 0, nil, nil, IUnknown, DataSource)) then
      begin
        InitStr := nil;
        DataInit.GetInitializationString(DataSource, True, InitStr);
        Result := InitStr;
      end;
    end;
      

  3.   

    问题二,.问题应该是 Decimal这种类型SQL兼容性上面,
    桃核可以改用...Dec类型或numeric试试..
      

  4.   

    1、自己看源代码嘛,应该是返回值为空或者和传入的相同就表明没有点击确定吧(大概如此,可test)
    2、可以将字段类型String改为Text、Memo(或者Integer改为Int,Decimal改为Number等)再看看
      

  5.   

    第一个问题看那个源代码应该就可以解决了第二个,已经测试过与String和Integer无关,就是后面那个字段的问题,不管是换成Numeric还是Dec,原来正常的还是正常,原来会出错的还是会出错。而Number无法正常运行
      

  6.   

    因为我是要从一些字段描述来创建,而这个字段是指定小数位数的字段,所以不能用single、float和double等
      

  7.   

    对于后面的那个字段,我要的效果是用语句或者代码在Access数据库中创建一个指定“精度”和“数值范围”的“数字”字段
      

  8.   

    晕啊,原以为第二个问题可能会跟mdac的版本有些关系,我的开发环境是2.8的,没问题,在只有2.1版本mdac的win98下测试也一点问题都没有厄的深啊,到底会是什么原因呢?
      

  9.   

    出问题的两个机器的mdac,一个是2.7,一个是2.8,后面那个机器还什么Access、Delphi全都装有的……
      

  10.   

    我只回答第2个问题了
    我查了DAO的SDK
    dbBigInt Big Integer
    dbBinary Binary
    dbBoolean Boolean
    dbByte Byte
    dbChar Char
    dbCurrency Currency
    dbDate Date/Time
    dbDecimal Decimal
    dbDouble Double
    dbFloat Float
    dbGUID GUID
    dbInteger Integer
    dbLong Long
    dbLongBinary Long Binary (OLE Object)
    dbMemo Memo
    dbNumeric Numeric
    dbSingle Single
    dbText Text
    dbTime Time
    dbTimeStamp Time Stamp
    dbVarBinary VarBinary并没有string类型, 改成Text就OK了Create Table table_name(f1 Text(200), f2 Integer, f3 Decimal(10, 2))
      

  11.   

    都说了string那里测试过没有问题的了-_-#
      

  12.   

    总结说明一下,在创建字段f3 Decimal(10, 2)的时候,在大部分环境中都正常,目前只出现了两台机器有问题。正常的环境分别有:没有装任何开发环境及office的Win93的mdac2.1环境,没有装access的xp的mdac2.8环境(装有Delphi),装了Access和Delphi的xp、mdac2.8环境出错的两个机器:都是xp,其中一个没有装access和delphi(mdac为2.7),另一个装了Access和Delphi(mdac为2.8)没有想到其它可能的环境差异
      

  13.   

    竟然把Win98打成Win93了,微软又多了一种操作系统-_-#