在 Visual Basic 中创建计算字段
Create calculated field in Visual Basic
我想在数据库中的一个表中创建一个计算字段。我正在使用 visual basic
而我的 IDE 是 visual studio。
我最近使用 access 创建了相同的数据库,并在计算字段的表达式中使用了以下计算:
(([Grade1]/10)*2)+(([Grade2]/10)*3)+(([Grade3]/10)*5)
作为第一步,我只是将代码粘贴到字段的默认值或绑定中作为远射,但出现了错误。猜猜我不允许使用现有列中的数据进行计算。
谁能帮我创建这个字段?该字段不需要在数据库内,但如果可以使用 datagridview
或类似的东西在数据库外的表单上计算它,那将是首选。
1、2 和 3 级包含从 0 到 100 的数字。
除非有人能指出正确的方向,否则我找不到任何教程?
为了获得所描述的计算字段,您应该使用以下 T-SQL 代码:
create table dbo.Enrolement
(
StudentID int not null,
ModuleNUmber int not null,
Grade1 nchar(3) not null,
Grade2 nchar(3) not null,
Grade3 nchar(3) not null,
Overall as cast(((Grade1 / 10 * 2) + (Grade2 / 10 * 3) + (Grade3 / 10 * 5)) as nchar(10))
)
但是,我不明白您为什么将成绩存储为文本。此外,您的 T-SQL 代码 需要 将文本隐式转换为数字,进行计算,然后再次将其恢复为文本。此外,在转换过程中,您没有告诉 SQL 转换成什么。所以,如果你的成绩有小数位,那么 table 中的 SELECT
将失败。
insert into dbo.Enrolement
(
StudentID,
ModuleNUmber,
Grade1,
Grade2,
Grade3
)
values (
2, -- StudentID - int
101, -- ModuleNUmber - int
N'1.2', -- Grade1 - nchar(3)
N'1.8', -- Grade2 - nchar(3)
N'3.9' -- Grade3 - nchar(3)
)
select *
from dbo.Enrolement
Msg 245, Level 16, State 1, Line 17 Conversion failed when converting
the nvarchar value '1.2' to data type int.
因此,如果以后要在计算中使用数字,我强烈建议您使用数字来存储成绩。这是相同的 table,但用数字代替:
create table dbo.Enrolement
(
StudentID int not null,
ModuleNUmber int not null,
Grade1 decimal(9, 3) not null,
Grade2 decimal(9, 3) not null,
Grade3 decimal(9, 3) not null,
Overall as ((Grade1 / 10 * 2) + (Grade2 / 10 * 3) + (Grade3 / 10 * 5))
)
我选择使用 decimal(9,3)
,因为从 1 到 9 的任何精度都使用相同的字节存储量。同时,我将小数位数限制为三位,从而允许四舍五入到两位小数。同时,潜在 "add" 等级(如果这应该有意义的话)有足够的空间达到总计 999999.999
我想在数据库中的一个表中创建一个计算字段。我正在使用 visual basic
而我的 IDE 是 visual studio。
我最近使用 access 创建了相同的数据库,并在计算字段的表达式中使用了以下计算:
(([Grade1]/10)*2)+(([Grade2]/10)*3)+(([Grade3]/10)*5)
作为第一步,我只是将代码粘贴到字段的默认值或绑定中作为远射,但出现了错误。猜猜我不允许使用现有列中的数据进行计算。
谁能帮我创建这个字段?该字段不需要在数据库内,但如果可以使用 datagridview
或类似的东西在数据库外的表单上计算它,那将是首选。
1、2 和 3 级包含从 0 到 100 的数字。
除非有人能指出正确的方向,否则我找不到任何教程?
为了获得所描述的计算字段,您应该使用以下 T-SQL 代码:
create table dbo.Enrolement
(
StudentID int not null,
ModuleNUmber int not null,
Grade1 nchar(3) not null,
Grade2 nchar(3) not null,
Grade3 nchar(3) not null,
Overall as cast(((Grade1 / 10 * 2) + (Grade2 / 10 * 3) + (Grade3 / 10 * 5)) as nchar(10))
)
但是,我不明白您为什么将成绩存储为文本。此外,您的 T-SQL 代码 需要 将文本隐式转换为数字,进行计算,然后再次将其恢复为文本。此外,在转换过程中,您没有告诉 SQL 转换成什么。所以,如果你的成绩有小数位,那么 table 中的 SELECT
将失败。
insert into dbo.Enrolement
(
StudentID,
ModuleNUmber,
Grade1,
Grade2,
Grade3
)
values (
2, -- StudentID - int
101, -- ModuleNUmber - int
N'1.2', -- Grade1 - nchar(3)
N'1.8', -- Grade2 - nchar(3)
N'3.9' -- Grade3 - nchar(3)
)
select *
from dbo.Enrolement
Msg 245, Level 16, State 1, Line 17 Conversion failed when converting the nvarchar value '1.2' to data type int.
因此,如果以后要在计算中使用数字,我强烈建议您使用数字来存储成绩。这是相同的 table,但用数字代替:
create table dbo.Enrolement
(
StudentID int not null,
ModuleNUmber int not null,
Grade1 decimal(9, 3) not null,
Grade2 decimal(9, 3) not null,
Grade3 decimal(9, 3) not null,
Overall as ((Grade1 / 10 * 2) + (Grade2 / 10 * 3) + (Grade3 / 10 * 5))
)
我选择使用 decimal(9,3)
,因为从 1 到 9 的任何精度都使用相同的字节存储量。同时,我将小数位数限制为三位,从而允许四舍五入到两位小数。同时,潜在 "add" 等级(如果这应该有意义的话)有足够的空间达到总计 999999.999