2016-03-07 89 views
1

我想在數據庫中的一個表內創建一個計算字段。我正在使用visual basic,而我的IDE是visual studio。在Visual Basic中創建計算字段

我最近創建使用訪問相同的數據庫,並用於一個計算字段的表達式內的以下計算:

(([Grade1]/10)*2)+(([Grade2]/10)*3)+(([Grade3]/10)*5) 

正如我剛粘貼到編碼成默認值,或作爲一個場的結合的第一去遠射,但有一個錯誤。猜猜我不允許使用現有列中的數據進行計算。

enter image description here

誰能幫我製作這個領域?該字段不需要位於數據庫內,但是如果可以在數據庫外使用datagridview或其他類似的方式在數據庫外進行計算,那麼該字段可能會更好。

1級,2和3包含的從0號爲100

我無法找到任何教程,除非任何人都可以在正確的方向指向我?

回答

1

爲了獲得所描述的,你應該使用下面的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轉換的內容。所以,如果你有小數位的成績,那麼表中的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 

消息245,級別16,狀態1,行17轉換轉換 當nvarchar的值 '1.2' 爲數據類型int失敗。

所以,我非常推薦你使用數字來存儲你的成績,如果他們以後用於計算。以下是相同的表用數字來代替:

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使用相同的存儲量(字節)。與此同時,我將小數位數限制爲三位,因此允許小數點後兩位取整。同時,有足夠的空間可以「添加」等級(如果這應該是有道理的)總計999999.999

+0

謝謝你好,先生,我有點困惑,所以我用nchar作爲它可以存儲數值(顯然也包括文本)。什麼是最好的數據類型,數字?數據類型說數字(18,0)18和零代表什麼?顯然它們可以改變,但是它與可以輸入的最高和最低值有什麼關係? – ceefax12

+1

我建議使用'decimal(9,3)'。這將在逗號前存儲小數點後三位數字和6(9減3)位數字。因此,任何給定等級的最高存儲值可以是'999999.999'。有關更多信息,請參閱以下內容:https://msdn.microsoft.com/en-us/library/ms187746.aspx – Ralph

+0

ahh我看到了,非常感謝您的幫助:) – ceefax12