使用 ADOX 将 Table 添加到 Catalog 时报“类型无效”的原因和解决方法
http://blog.csdn.net/kfhzy/article/details/6020283
http://blog.csdn.net/kfhzy/article/details/6020545
李维的代码,原来链接的是MS SQL,改成ACCESS后,创建Table时报 类型无效 错误
原因:
除了
adDBTimeStamp 这样的Access 明显不支持的数据类型外,一般的,也有区别,adVarChar 在ACCESS里是adVarWChar
procedure TfrmCreateTable.btnCreateTableClick(Sender: TObject);
begin
// create table
with FCatalog do
begin
FTable := CoTable.Create;
FTable.ParentCatalog := FCatalog;
FTable.Name := edtTableName.Text; FTable.Columns.Append('ISBN', adVarWChar, );
FTable.Columns.Append('BookName', adVarWChar, );
FTable.Columns.Append('Publisher', adVarWChar, );
FTable.Columns.Append('Author', adVarWChar, );
// FTable.Columns.Append('PDT', adDBTimeStamp, 8); //MS SQL Server
FTable.Columns.Append('Price', adInteger, ); // create index
FIndex := CoIndex.Create;
with FIndex do
begin
Name := 'ISBN';
PrimaryKey := True;
Unique := True;
Columns.Append('ISBN', adVarWChar, );
end;
FTable.Indexes.Append(FIndex, EmptyParam);
Tables.Append(FTable);
end;
end;
使用 ADOX 创建 adDBTimeStamp 类型的字段时,会产生“类型无效”的错误提示,产生这种错误的原因是,数据库引擎 Provider 只能接受已知类型的数据类型,下面是可以接受的类型对照表:
ADOX.DataTypeEnum 类型枚举常量 | Value | Jet 3.51 | Jet 4.0 | SQL 7.0 |
---|---|---|---|---|
adBinary | 128 | Yes | Yes | Yes |
adBoolean | 11 | Yes | Yes | Yes |
adChar | 129 | Yes | No | Yes |
adCurrency | 6 | Yes | Yes | Yes |
adDate | Yes | Yes | No | |
adDouble | 5 | Yes | Yes | Yes |
adGUID | 72 | Yes | Yes | Yes |
adInteger | 3 | Yes | Yes | Yes |
adLongVarBinary | 205 | Yes | Yes | Yes |
adLongVarChar | Yes | No | Yes | |
adLongVarWChar | 203 | No | Yes | Yes |
adNumeric | 131 | No | Yes (with info)* | Yes (with info)* |
adSingle | 4 | Yes | Yes | Yes |
adSmallInt | 2 | Yes | Yes | Yes |
adUnsignedTinyInt | 17 | Yes | Yes | Yes |
adVarBinary | 204 | Yes | Yes | Yes |
adVarChar | 200 | Yes | No | Yes |
adVarWChar | 202 | No | Yes | Yes |
adWChar | 130 | No | Yes | Yes |
adDBTimeStamp | 135 | No | No | Yes |
ADO 数据类型
下面的表格列出了 Access、SQL Server 与 Oracle 之间的数据类型映射:
DataType Enum | Value | Access | SQLServer | Oracle |
---|---|---|---|---|
adBigInt | 20 | BigInt (SQL Server 2000 +) | ||
adBinary | 128 | Binary TimeStamp |
Raw * | |
adBoolean | 11 | YesNo | Bit | |
adChar | 129 | Char | Char | |
adCurrency | 6 | Currency | Money SmallMoney |
|
adDate | 7 | Date | DateTime | |
adDBTimeStamp | 135 | DateTime (Access 97 (ODBC)) | DateTime SmallDateTime |
Date |
adDecimal | 14 | Decimal * | ||
adDouble | 5 | Double | Float | Float |
adGUID | 72 | ReplicationID (Access 97 (OLEDB)), (Access 2000 (OLEDB)) | UniqueIdentifier (SQL Server 7.0 +) | |
adIDispatch | 9 | |||
adInteger | 3 | AutoNumber Integer Long |
Identity (SQL Server 6.5) Int |
Int * |
adLongVarBinary | 205 | OLEObject | Image | Long Raw * Blob (Oracle 8.1.x) |
adLongVarChar | 201 | Memo (Access 97) Hyperlink (Access 97) |
Text | Long * Clob (Oracle 8.1.x) |
adLongVarWChar | 203 | Memo (Access 2000 (OLEDB)) Hyperlink (Access 2000 (OLEDB)) |
NText (SQL Server 7.0 +) | NClob (Oracle 8.1.x) |
adNumeric | 131 | Decimal (Access 2000 (OLEDB)) | Decimal Numeric |
Decimal Integer Number SmallInt |
adSingle | 4 | Single | Real | |
adSmallInt | 2 | Integer | SmallInt | |
adUnsignedTinyInt | 17 | Byte | TinyInt | |
adVarBinary | 204 | ReplicationID (Access 97) | VarBinary | |
adVarChar | 200 | Text (Access 97) | VarChar | VarChar |
adVariant | 12 | Sql_Variant (SQL Server 2000 +) | VarChar2 | |
adVarWChar | 202 | Text (Access 2000 (OLEDB)) | NVarChar (SQL Server 7.0 +) | NVarChar2 |
adWChar | 130 | NChar (SQL Server 7.0 +) |
* 在 Oracle 8.0.x 中 - decimal 和 int 等于 number 和 number(10)。
使用 ADOX 将 Table 添加到 Catalog 时报“类型无效”的原因和解决方法的更多相关文章
- 使用IDEA在引入Schema空间时报错URI is not registered解决方法以及Idea @Autowired取消提示 方法
使用IDEA在引入Schema空间时报错URI is not registered解决方法以及Idea @Autowired取消提示 方法 Idea @Autowired取消提示 spring b ...
- Silverlight中文本框添加回车事件后,换行无法清除的解决方法
在开发Silverlight的项目中,为了更好的用户体验,我们常要给一些控件添加一些快捷键.然而,在Silverlight中当用户回车提交后,光标停留在文本框的第二行怎么也清除不掉,经过一段时间研究, ...
- MySQL出现Waiting for table metadata lock的原因以及解决方法
转自:http://ctripmysqldba.iteye.com/blog/1938150 (有修改) MySQL在进行alter table等DDL操作时,有时会出现Waiting for tab ...
- mysql 直接从date 文件夹备份表,还原数据库之后提示 table doesn`t exist的原因和解决方法
补充:正常情况下,建议数据库备份最好用工具进行备份,通过拷贝数据库表进行数据迁移,不同的环境会出现各种不同的意外问题. 背景:今天在整理一个网站的时候,操作系统由于系统自动更新导致一直出现系统蓝屏死机 ...
- 20180117MySQL出现Waiting for table metadata lock的原因以及解决方法
转自http://www.cnblogs.com/digdeep/p/4892953.html 转自:http://ctripmysqldba.iteye.com/blog/1938150 (有修改) ...
- VS2010 VC++ 项目添加引用 出现 Internal CPS Error问题原因及解决办法
在VS2010 VC++ 项目添加引用时,有时会出现Internal CPS Error错误,提示信息: 'Internal CPS Error: We couldn't find the exist ...
- MySQL出现Waiting for table metadata lock的原因以及解决方法(转)
MySQL在进行alter table等DDL操作时,有时会出现Waiting for table metadata lock的等待场景.而且,一旦alter table TableA的操作停滞在Wa ...
- 使用mvc时,在视图view中使用强类型视图,在web.config文件中添加命名空间namespace的引用不起作用,解决方法
这是view中的model代码: @model t_user_info 这是web.config配置文件只的代码: <namespaces> <add namespace=" ...
- jquery用append添加按钮之后,按钮监听无法使用的解决方法
<!DOCTYPE html><html><head><meta charset="utf-8"> <title>< ...
随机推荐
- C# MD5一句话加密
System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, "md5")
- hdu 1671 Phone List(字典树)题解
题意:给一连串数字,如果有前缀重复给出NO,否则给出YES 思路:这道题要delete否则爆内存,之前想的直接在insert()里解决查询有错误,所以先保存数据再查询. 代码: #include< ...
- bootstrap datarangepicker如何使用
本文为博主原创,未经允许不得转载: 下载资源文件: 地址:Github:https://github.com/dangrossman/bootstrap-daterangepicker/ 1.页面引用 ...
- 进制转换 hdoj-2031
进制转换,原题目:hdoj-2031 题目描述: 输入两个整数,十进制数n(32位整数)和进制r(2<=r<=16 r!=10),求转换后的数. 输入: 7 2 23 12 -4 3 输出 ...
- UVa 1331 最大面积最小的三角剖分
https://vjudge.net/problem/UVA-1331 题意:输入一个多边形,找一个最大三角形面积最小的三角剖分,输出最大三角形的面积. 思路: 最优三角剖分. dp[i][j]表示从 ...
- POJ 1018 Communication System(DP)
http://poj.org/problem?id=1018 题意: 某公司要建立一套通信系统,该通信系统需要n种设备,而每种设备分别可以有m1.m2.m3.....mn个厂家提供生产,而每个厂家生产 ...
- yunw
- zepto点透解决思路
首先看几个链接, http://blog.youyo.name/archives/zepto-tap-click-through-research.html youyo的分析 http://softw ...
- C# 二进制图片串互转
C# byte数组与Image的相互转换 功能需求: 1.把一张图片(png bmp jpeg bmp gif)转换为byte数组存放到数据库. 2.把从数据库读取的byte数组转换为Image对 ...
- VS 修改模板文件,增加默认注释
其实这篇文章是从网上转载的,但是找不到转载链接,只能自己复制过来了 vs中的///文档注释类似java中/** */文档注释.能自动的生成帮助文档. 如果我想在每次创建文件时,自动生成文档注释(注意是 ...