2014-04-15 175 views
0

我需要自動增量NroFattura和AnnoFattura(這個人是報告的年份): Error自動增加的領域

我不知道如何做到這一點,如果C#或訪問設置。 我想這NroFattura就像N = N + 1 而AnnoFattura就像N =獲得一年了(功能) 我有它背後的WinForm(C#)

+1

我想,當年改變你想重置NroFattura從1重新啓動? (順便說一句,對於非意大利人來說,NroFattura = InvoiceNumber,AnnoFattura = InvoiceYear) – Steve

+0

是的,就像2014 - > 1,n + 1然後是2015 - > 1,n + 1 – Kiirito

+0

您是否有多用戶數據庫場景?或者它只是一個單一的用戶在數據庫中工作? – Steve

回答

0

如果你有一個簡單的場景,其中只有一個用戶在工作時間與數據庫那麼它是一個簡單的事情來查找特定年份

string query = "SELECT MAX(FatturaNro) FROM yourTableName WHERE AnnoFattura=?"; 
OleDbCommand cmd = new OleDbCommand(query, connection); 
cmd.Parameters.AddWithValue("@p1", DateTime.Today.Year); 
object result = cmd.ExecuteScalar(); 
int newInvoiceNumber = (result == null ? 1 : Convert.ToInt32(result)+1); 
+0

你應該小心使用這個查詢,而它正在運行表被鎖定爲其他會話,這將導致很多的tablelock,如果你有太多的記錄和太多的交易 – RezaRahmati

+0

@RezaRahmati單用戶在winforms應用程序中的時間,在問題中沒有提及任何線程。你對其他會話有什麼意義? – Steve

+0

我調整了這樣的代碼:'System.Data.OleDb.OleDbCommand cmd4 = new System.Data.OleDb.OleDbCommand(); cmd4.CommandType = System.Data.CommandType.Text; cmd4.CommandText =「SELECT MAX(FatturaNro)FROM Fatture WHERE AnnoFattura =?」; cmd4.Parameters.AddWithValue(「@ p1」,DateTime.Today.Year);' – Kiirito

0

的訪問自動增量設定是不適合這樣的動作插入的FatturaNro的最高值。如果刪除項目,計數仍將計數。例如,如果您有20個項目,刪除了2個,則在下一個插入時計數仍將移至21。自動增量字段應該用作記錄的唯一標識,而不是「行號」。

您可以爲唯一索引添加一個新列,以便進行特定於行的編輯。用C#代碼計算NroFattura很容易。使用正確的值形成最終的插入字符串並運行它。