问题是这样的:
公司一个VB的程序里面用ado绑定了access,数据库名字是a.mdb,这个数据库是开发,测试的时候开发人员自己用的;而用户那里的数据库是b.mdb,现在公司的要求是,可不可以在程序运行时候(load事件),判断用户的b数据库是不是有a数据库的相关字段,如果有就pass,如果没有就在b数据库里面增加相应字段.比如:a.mdb下面有一个叫demo的表,里面有aa,ab,ac,ad这些字段,而b.mdb下面有一个demo的表,里面有aa,bb字段,所以就要在b数据库增加字段ab,ac,ad我的想法是把a.mdb里面的demo表的字段名和类型保存在2个数组里面,通过循环判断b里面demo的字段是否存在. 问题是: 如何把一个表里面某个字段的类型取出来?(adodc1.recordset.fields(i),type的返回无法赋值,而且,如何通过ado增加一个字段?是adodc1.recordset.fields.Append()么?希望哪位朋友可以写个范例.....
公司一个VB的程序里面用ado绑定了access,数据库名字是a.mdb,这个数据库是开发,测试的时候开发人员自己用的;而用户那里的数据库是b.mdb,现在公司的要求是,可不可以在程序运行时候(load事件),判断用户的b数据库是不是有a数据库的相关字段,如果有就pass,如果没有就在b数据库里面增加相应字段.比如:a.mdb下面有一个叫demo的表,里面有aa,ab,ac,ad这些字段,而b.mdb下面有一个demo的表,里面有aa,bb字段,所以就要在b数据库增加字段ab,ac,ad我的想法是把a.mdb里面的demo表的字段名和类型保存在2个数组里面,通过循环判断b里面demo的字段是否存在. 问题是: 如何把一个表里面某个字段的类型取出来?(adodc1.recordset.fields(i),type的返回无法赋值,而且,如何通过ado增加一个字段?是adodc1.recordset.fields.Append()么?希望哪位朋友可以写个范例.....
解决方案 »
- 急求CreateFont函数构建字体,Textout输出乱码的问题!
- 动态库对象创建失败,不可以调用动态库函数
- 如何得到汉字与汉语拼音对应的数据库?
- FtpFindFirstFile,为什么这个函数在类模块中会出错而且是整个VB程序都退出了,而在其它地方是好的
- vb
- 关于日期为条件的查询语句。。
- 高分请问关于拨号服务器的问题,急!急!急!在线等待。
- SQL SERVER数据库中的表怎么通过vb来备份和恢复
- VB2005十六进制数据发送问题
- Listview的问题,头痛啊!!帮帮我吧
- 怎么才知道打印出来的字符串的长度
- 在VB中想调用DOS来运行pkunzip.exe,解压缩加了密码的zip压缩文件,大虾请给出代码小弟不甚感激.
ALTER TABLE通过更改、添加、除去列和约束,或者通过启用或禁用约束和触发器来更改表的定义。语法
ALTER TABLE table
{ [ ALTER COLUMN column_name
{ new_data_type [ ( precision [ , scale ] ) ]
[ COLLATE < collation_name > ]
[ NULL | NOT NULL ]
| {ADD | DROP } ROWGUIDCOL }
]
| ADD
{ [ < column_definition > ]
| column_name AS computed_column_expression
} [ ,...n ]
| [ WITH CHECK | WITH NOCHECK ] ADD
{ < table_constraint > } [ ,...n ]
| DROP
{ [ CONSTRAINT ] constraint_name
| COLUMN column } [ ,...n ]
| { CHECK | NOCHECK } CONSTRAINT
{ ALL | constraint_name [ ,...n ] }
| { ENABLE | DISABLE } TRIGGER
{ ALL | trigger_name [ ,...n ] }
}< column_definition > ::=
{ column_name data_type }
[ [ DEFAULT constant_expression ] [ WITH VALUES ]
| [ IDENTITY [ ( seed , increment ) [ NOT FOR REPLICATION ] ] ]
]
[ ROWGUIDCOL ]
[ COLLATE < collation_name > ]
[ < column_constraint > ] [ ...n ]< column_constraint > ::=
[ CONSTRAINT constraint_name ]
{ [ NULL | NOT NULL ]
| [ { PRIMARY KEY | UNIQUE }
[ CLUSTERED | NONCLUSTERED ]
[ WITH FILLFACTOR = fillfactor ]
[ ON { filegroup | DEFAULT } ]
]
| [ [ FOREIGN KEY ]
REFERENCES ref_table [ ( ref_column ) ]
[ ON DELETE { CASCADE | NO ACTION } ]
[ ON UPDATE { CASCADE | NO ACTION } ]
[ NOT FOR REPLICATION ]
]
| CHECK [ NOT FOR REPLICATION ]
( logical_expression )
}< table_constraint > ::=
[ CONSTRAINT constraint_name ]
{ [ { PRIMARY KEY | UNIQUE }
[ CLUSTERED | NONCLUSTERED ]
{ ( column [ ,...n ] ) }
[ WITH FILLFACTOR = fillfactor ]
[ ON { filegroup | DEFAULT } ]
]
| FOREIGN KEY
[ ( column [ ,...n ] ) ]
REFERENCES ref_table [ ( ref_column [ ,...n ] ) ]
[ ON DELETE { CASCADE | NO ACTION } ]
[ ON UPDATE { CASCADE | NO ACTION } ]
[ NOT FOR REPLICATION ]
| DEFAULT constant_expression
[ FOR column ] [ WITH VALUES ]
| CHECK [ NOT FOR REPLICATION ]
( search_conditions )
}参数
table是要更改的表的名称。如果表不在当前数据库中或者不属于当前用户所拥有,可以显式指定数据库和所有者。ALTER COLUMN指定要更改给定列。如果兼容级别是 65 或小于 65,将不允许使用 ALTER COLUMN。有关更多信息,请参见 sp_dbcmptlevel。 要更改的列不能是: 数据类型为 text、image、ntext 或 timestamp 的列。
表的 ROWGUIDCOL 列。
计算列或用于计算列中的列。
被复制列。
用在索引中的列,除非该列数据类型是 varchar、nvarchar 或 varbinary,数据类型没有更改,而且新列大小等于或者大于旧列大小。
用在由 CREATE STATISTICS 语句创建的统计中的列。首先用 DROP STATISTICS 语句删除统计。由查询优化器自动生成的统计会由 ALTER COLUMN 自动除去。
用在 PRIMARY KEY 或 [FOREIGN KEY] REFERENCES 约束中的列。
用在 CHECK 或 UNIQUE 约束中的列,除非用在 CHECK 或 UNIQUE 约束中的可变长度列的长度允许更改。
有相关联的默认值的列,除非在不更改数据类型的情况下允许更改列的长度、精度或小数位数。
有些数据类型的更改可能导致数据的更改。例如,将数据类型为 nchar 或 nvarchar 的列更改为 char 或 varchar 类型,将导致扩展字符的转换。有关更多信息,请参见 CAST 和 CONVERT。降低列的精度和小数位数可能导致数据截断。column_name是要更改、添加或除去的列的名称。对于新列,如果数据类型为 timestamp,column_name 可以省略。对于 timestamp 数据类型的列,如果未指定 column_name,将使用名称 timestamp。new_data_type是要更改的列的新数据类型。要更改的列的 new_data_type 应符合下列准则: 原来的数据类型必须可以隐式转换为新数据类型。
new_data_type 类型不能为 timestamp。
对 ALTER COLUMN,ANSI 空默认值始终打开;如果没有指定,列将可为空。
对 ALTER COLUMN,ANSI 填充始终打开。
如果要更改的列是标识列,new_data_type 必须是支持标识属性的数据类型。
将忽略 SET ARITHABORT 的当前设置。ALTER TABLE 语句的行为如同 ARITHABORT 选项为 ON 时一样。
precision是指定数据类型的精度。有关有效精度值的更多信息,请参见精度、小数位数和长度。 scale是指定数据类型的小数位数。有关有效小数位数值的更多信息,请参见精度、小数位数和长度。COLLATE < collation_name >为更改列指定新的排序规则。排序规则名称既可以是 Windows 排序规则名称,也可以是 SQL 排序规则名称。有关列表及更多信息,请参见 Windows 排序规则名称 和 SQL 排序规则名称。COLLATE 子句只能用于更改数据类型为 char、varchar、text、nchar、nvarchar 和 ntext 的列的排序规则。如果未指定,则此列采用数据库的默认排序规则。若满足下列条件,则 ALTER COLUMN 不能更改排序规则: 检查约束、外键约束或计算列引用了更改列。
在此列上创建了索引、统计或全文索引。更改列的排序规则时,该列上自动创建的统计将除去。
SCHEMABOUND 视图或函数引用了此列。
有关 COLLATE 子句的更多信息,请参见 COLLATE。NULL | NOT NULL指定该列是否可接受空值。不允许空值的列只有在指定了默认值的情况下,才能用 ALTER TABLE 语句向表中添加。添加到表中的新列要么允许空值,要么必须指定默认值。如果新列允许空值,而且没有指定默认值,那么新列在表中每一行都包含空值。如果新列允许空值并且指定了新列的默认值,那么可以使用 WITH VALUES 选项在表中所有现有行的新列中存储默认值。如果新列不允许空值,那么新列必须具有 DEFAULT 定义,而且新列的所有现有行中将自动装载该默认值。可在 ALTER COLUMN 语句中指定 NULL 以使 NOT NULL 列允许空值,但 PRIMARY KEY 约束中的列除外。只有列中不包含空值时,ALTER COLUMN 中才可指定 NOT NULL。必须将空值更新为非空值后,才允许执行 ALTER COLUMN NOT NULL 语句,比如:UPDATE MyTable SET NullCol = N'some_value' WHERE NullCol IS NULLALTER TABLE MyTable ALTER COLUMN NullCOl NVARCHAR(20) NOT NULL如果 ALTER COLUMN 中指定了 NULL 或 NOT NULL,那么必须同时指定 new_data_type [(precision [, scale ])]。如果不更改数据类型、精度和小数位数,请指定列的这些值的当前值。[ {ADD | DROP} ROWGUIDCOL ]指定在指定列上添加或除去 ROWGUIDCOL 属性。ROWGUIDCOL 是一个关键字,表示列是行全局唯一标识符列。对于每个表只能指派一个 uniqueidentifier 列作为 ROWGUIDCOL 列。ROWGUIDCOL 属性只能指派给 uniqueidentifier 列。ROWGUIDCOL 属性并不强制列中所存储值的唯一性。该属性也不会为插入到表中的新行自动生成值。若要为每列生成唯一值,那么或者在 INSERT 语句中使用 NEWID 函数,或者将 NEWID 函数指定为该列的默认值。ADD指定要添加一个或多个列定义、计算列定义或者表约束。computed_column_expression是一个定义计算列的值的表达式。计算列是并不物理地存储在表中的虚拟列,该列用表达式计算得出,该表达式使用同一表中的其它列。例如,计算列的定义可以是:cost AS price * qty。表达式可以是非计算列的列名、常量、函数、变量,也可以是用一个或多个运算符连接的上述元素的任意组合。表达式不能为子查询。计算列可用于选择列表、WHERE 子句、ORDER BY 字句或其它任何可以使用常规表达式的位置,但下列情况除外: 计算列不能用作 DEFAULT 或 FOREIGN KEY 约束定义,也不能与 NOT NULL 约束定义一起使用。但是,如果计算列由具有确定性的表达式定义,并且索引列中允许计算结果的数据类型,则可将该列用作索引中的键列,或用作 PRIMARY KEY 或 UNIQUE 约束的一部分。
例如,如果表中有整数列 a 和 b,那么计算列 a+b 上可建立索引,而计算列 a+DATEPART(dd, GETDATE()) 上则不能,因为该值将在后续调用时更改。计算列不能作为 INSERT 或 UPDATE 语句的目标。
A. 更改表以添加新列
下例添加一个允许空值的列,而且没有通过 DEFAULT 定义提供值。各行的新列中的值将为 NULL。CREATE TABLE doc_exa ( column_a INT)
GO
ALTER TABLE doc_exa ADD column_b VARCHAR(20) NULL
GO
EXEC sp_help doc_exa
GO
DROP TABLE doc_exa
GOB. 更改表以除去列
下例修改表以删除一列。CREATE TABLE doc_exb ( column_a INT, column_b VARCHAR(20) NULL)
GO
ALTER TABLE doc_exb DROP COLUMN column_b
GO
EXEC sp_help doc_exb
GO
DROP TABLE doc_exb
GOC. 更改表以添加具有约束的列
下例向表中添加具有 UNIQUE 约束的新列。 CREATE TABLE doc_exc ( column_a INT)
GO
ALTER TABLE doc_exc ADD column_b VARCHAR(20) NULL
CONSTRAINT exb_unique UNIQUE
GO
EXEC sp_help doc_exc
GO
DROP TABLE doc_exc
GOD. 更改表以添加未验证的约束
下例向表中的现有列上添加约束。该列中存在一个违反约束的值;因此,利用 WITH NOCHECK 来防止对现有行验证约束,从而允许该约束的添加。CREATE TABLE doc_exd ( column_a INT)
GO
INSERT INTO doc_exd VALUES (-1)
GO
ALTER TABLE doc_exd WITH NOCHECK
ADD CONSTRAINT exd_check CHECK (column_a > 1)
GO
EXEC sp_help doc_exd
GO
DROP TABLE doc_exd
GOE. 更改表以添加多个带有约束的列
下例向表中添加多个带有约束的新列。第一个新列具有 IDENTITY 属性;表中每一行的标识列都将具有递增的新值。CREATE TABLE doc_exe ( column_a INT CONSTRAINT column_a_un UNIQUE)
GO
ALTER TABLE doc_exe ADD /* Add a PRIMARY KEY identity column. */
column_b INT IDENTITY
CONSTRAINT column_b_pk PRIMARY KEY, /* Add a column referencing another column in the same table. */
column_c INT NULL
CONSTRAINT column_c_fk
REFERENCES doc_exe(column_a),/* Add a column with a constraint to enforce that */
/* nonnull data is in a valid phone number format. */
column_d VARCHAR(16) NULL
CONSTRAINT column_d_chk
CHECK
(column_d IS NULL OR
column_d LIKE "[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]" OR
column_d LIKE
"([0-9][0-9][0-9]) [0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]"),/* Add a nonnull column with a default. */
column_e DECIMAL(3,3)
CONSTRAINT column_e_default
DEFAULT .081
GO
EXEC sp_help doc_exe
GO
DROP TABLE doc_exe
GO
增加一个字段
ALTER TABLE table2 ADD row_id nvarchar(20)删除一个字段
ALTER TABLE table2 DROP COLUMN row_id
Adodc1.ConnectionString ="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\STUDENT.MDB;Persist Security Info=False ;Jet OLEDB:Database Password=3k68t2j612d"Adodc1.RecordSource = "ALTER TABLE demo ADD COLUMN " & record_name(j) & " " & record_type(j)Adodc1.Refresh我把要增加的数据字段的名字写在一个record_name()的数组,把对应的类型写在record_type()数组
每次程序运行的时候总在refresh那个地方出错"对象关闭时,不允许操作",可是一看后台的数据库里面已经增加了该字段了...如果不写refresh,后台数据库并没有变化,何解?