rav*_*ven 3 sql ms-access types
我正在开发一个C#项目,该项目使用System.Data.OleDb.OleDbCommand类在MS Access DB中创建和更改表.我生成SQL语句,将其传递给对象,然后调用ExecuteNonQuery函数.我能够找出正确的MS Access SQL语法来创建以下Access数据类型的列:
AutoNumber: ALTER TABLE table-name ADD COLUMN column-name COUNTER|AUTOINCREMENT Currency: ALTER TABLE table-name ADD COLUMN column-name MONEY Date/Time: ALTER TABLE table-name ADD COLUMN column-name DATE Memo: ALTER TABLE table-name ADD COLUMN column-name MEMO|TEXT Number: ALTER TABLE table-name ADD COLUMN column-name NUMBER OLE Object: ALTER TABLE table-name ADD COLUMN column-name OLEOBJECT Text: ALTER TABLE table-name ADD COLUMN column-name CHARACTER Yes/No: ALTER TABLE table-name ADD COLUMN column-name BIT
唯一没有弄清楚如何创建的类型是Hyperlink.有谁知道那个的语法?
这种情况下您不能使用DDL但必须使用DAO.您正在寻找的是DAO Field类型的.Attributes属性.在VBA中,这段代码可以解决问题(你必须弄清楚如何在C#中使用DAO):
Dim tdf As DAO.TableDef
Dim fld As DAO.Field
Set tdf = CurrentDB.TableDefs("MyTable")
Set fld = tdf.CreateField("Hyperlink", dbMemo) ' dbMemo = 12
fld.Attributes = dbHyperlinkField ' 32768
tdf.Fields.Append fld
Set fld = Nothing
Set tdf = Nothing
Run Code Online (Sandbox Code Playgroud)
如果您在Access中检查此字段的数据类型:
CurrentDB.TableDefs("MyTable").Fields("Hyperlink").Type
Run Code Online (Sandbox Code Playgroud)
它返回12,它等于VBA全局常量dbMemo(这就是我如何做到这一点,即在Access UI中创建了一个Hyperlink字段,然后检查了它的数据类型).dbHyperlinkField的值为32768,但不能直接指定为数据类型 - 而是备注字段的子属性.
这是Access扩展Jet的一种情况,它使用自定义属性来处理数据的方式与有限数量的Jet数据类型不同.同样清楚的是,只有在使用Access本身的数据时,超链接字段类型才有意义.如果您正在使用其他一些应用程序来处理数据,那么使用超链接数据字段就无法获得任何结果.
另外,我和那些建议不使用超链接类型字段的人在一起,因为我已经尝试了它,这只是一个痛苦的屁股.此外,鉴于它实际上是一个备忘录字段,它受备忘录字段带来的所有问题的影响.也就是说,数据实际上并不存储在数据表中 - 存储在主记录中的所有内容都是指向存储实际数据的数据页的指针,而这些指针是Jet的一个虚拟部分.备忘录值得冒这个风险,因为当你需要存储超过255个字符时,你需要这样做.我无法看到特定于Access的超链接字段类型添加了任何重要功能,因此在代码中使用它时会遇到麻烦,或者因为它作为备忘录字段在幕后实现而产生的风险.