创建超链接类型字段的MS Access SQL语法是什么?

创建超链接类型字段的MS Access SQL语法是什么?,sql,ms-access,types,Sql,Ms Access,Types,我正在从事一个C#项目,该项目使用System.Data.OleDb.OleDbCommand类在MS Access数据库中创建和更改表。我生成SQL语句,将其传递给对象,然后调用ExecuteOnQuery函数。我能够找到正确的MS Access SQL语法来创建以下Access数据类型的列: AutoNumber: ALTER TABLE table-name ADD COLUMN column-name COUNTER|AUTOINCREMENT Currency: ALTER TAB

我正在从事一个C#项目,该项目使用System.Data.OleDb.OleDbCommand类在MS Access数据库中创建和更改表。我生成SQL语句,将其传递给对象,然后调用ExecuteOnQuery函数。我能够找到正确的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 自动编号:更改表格名称添加列名计数器|自动递增 货币:更改表名添加列名货币 日期/时间:更改表名添加列名日期 备注:更改表格名称添加列名备注|文本 编号:更改表格名称添加列名称编号 OLE对象:更改表名添加列名对象 Text:ALTER TABLE TABLE name添加列名称字符 是/否:更改表名添加列名位
我唯一不知道如何创建的类型是超链接。有人知道这个的语法吗

sql中没有超链接数据类型的真正概念。您可以像存储任何文本一样存储url,然后当您在应用程序中使用它时,您可以在该端创建超链接。

您可以使用两个字符字段来表示超链接的内容,其中一个字段包含指向您希望超链接链接的资源的url(存储为纯文本),另一个将保存浏览器中显示的文本(即,如果浏览器中显示的文本与URL本身不同)

在用C#显示网页中的链接时,可以创建超链接:

Hyperlink hyp1 = new Hyperlink
hyp1.Text = datarow.DisplayText
hyp1.NavigateURL = datarow.TargetURL

这种情况下,您不能使用DDL,但必须使用DAO。您要查找的是DAO字段类型的.Attributes属性。在VBA中,这段代码起到了关键作用(您必须弄清楚如何在C#中使用DAO实现这一点):

如果在Access中检查此字段的数据类型:

  CurrentDB.TableDefs("MyTable").Fields("Hyperlink").Type
它返回12,这等于VBA全局常量dbMemo(我就是这样想的,即在Access UI中创建一个超链接字段,然后检查其数据类型)。dbHyperlinkField的值为32768,但不能直接指定为数据类型——它是备注字段的子属性

这是一个Access扩展Jet的案例,它使用一个自定义属性来处理数据,与数量有限的Jet数据类型不同。很明显,只有在使用Access本身的数据时,超链接字段类型才相关。如果您使用其他应用程序处理数据,那么使用超链接数据字段将一无所获


此外,我支持那些建议不要使用超链接类型的字段的人,因为我已经尝试过了,这只是一个麻烦。而且,考虑到它实际上是一个备注字段,它会受到备注字段带来的所有问题的影响。也就是说,数据实际上并不是与数据表一起存储的——主记录中存储的只是指向存储真实数据的数据页的指针,而这些指针是Jet中比较脆弱的部分之一。备忘录值得冒这个风险,因为当您需要存储超过255个字符时,您需要这样做。我看不出Access-specific Hyperlink字段类型添加了任何重要的功能,值得在代码中使用它,或者因为它在后台作为备注字段实现而带来的风险。

我在C#中与ADOX进行了一次尝试,我发现唯一的方法就是设置在表中创建列之后,但实际将表添加到表集合之前,
“Jet-OLEDB:Hyperlink”
属性

以下示例需要对Microsoft ADO Ext.2.8的COM引用以获取DDL和安全性:

ADOX.Catalog cat = new CatalogClass();    
cat.let_ActiveConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;" + 
    "Data Source=C:\\Tempo\\Test_Access2007.accdb");

ADOX.Table tbl = new ADOX.TableClass();
tbl.Name = "TestHyperlink";

tbl.Columns.Append("my_hyperlink", ADOX.DataTypeEnum.adLongVarWChar, 0);

ADOX.Column col = tbl.Columns["my_hyperlink"];

col.ParentCatalog = cat;
col.Properties["Jet OLEDB:Hyperlink"].Value = true;

cat.Tables.Append(tbl);

尽管Microsoft将数据库中的超链接字段作为具有属性的对象,使问题变得复杂,但使用这种语法设置它似乎相当简单:-

更新myTable 设置HyperlinkField=“(要显示的文本)#(目标URL)#(超链接子字段,如果需要)” WHERE子句

实际上,我正在使用它在表上创建一个表单,其中链接指向一个文件而不是一个网址(这是一个图形列表,用户可以单击链接打开图形)。在这种情况下,URL是文件的相对路径,例如“.\documents\myFile1.dat”

我知道我可以使用其他方法来实现同样的功能,但是用户理解超链接


顺便说一句,我还没有测试移动源数据库时这些链接的行为。

按照raven的指示,虚拟程序员(像我一样)可以使用此子项通过访问VBA代码添加超链接字段

Sub AddLinkField(Table, FieldName)
    Dim dbs As DAO.Database
    Set dbs = CurrentDb()
    Dim tdf As DAO.TableDef
    Dim fld As DAO.Field
    Set tdf = dbs.TableDefs(Table)
    Set fld = tdf.CreateField(FieldName, dbMemo) ' dbMemo = 12
    fld.Attributes = dbHyperlinkField ' 32768
    tdf.Fields.Append fld
    Set fld = Nothing
    Set tdf = Nothing
End Sub
插入带有(例如)c:\链接的新记录的相关SQL是

执行它是

CurrentDB.Execute SQL

嗯,MS Access中有一个超链接的概念。它是可用的数据类型之一,因此我认为必须有一种方法在MS Access SQL中创建它。MS Access中的超链接不是数据类型,而是可以放在Access窗体上的对象。这个答案是可以接受的,但是错误的。MS Access提供超链接列类型,这是一个经过特殊处理的备注列,文本采用特殊的四字段格式,字段分隔符为
#
字符;它的内容可以通过SQL
UPDATE
INSERT
查询创建。所以迈克·霍尔顿的答案是正确的。这里有一些官方文件记录了这种行为(看看表格)。似乎准确地说出了您的编码:
SQL = "INSERT INTO Table VALUES (...,'LinkVisualizedText #c:\#')"
CurrentDB.Execute SQL