2015-09-21 106 views
0

我有以下結構的訪問表和自動增量值的數字字段:填寫MS ACCESS

INO IDATE  NAME ADDRESS CITY PHONE CONTACT & Other Fields..... 
1430 01-Apr-15 
1431 01-Apr-15 
1432 01-Apr-15 
1435 01-Apr-15 
1436 01-Apr-15 
1440 01-Apr-15 
1441 01-Apr-15 
1448 01-Apr-15 
1450 01-Apr-15 
1455 02-Apr-15 
1456 02-Apr-15 
1459 02-Apr-15 

字段「INO」設置爲數據類型「NUMBER」字段大小:雙索引=是

該字段以編程方式自動遞增,但是刪除了一些無用的&從數據庫中取消的記錄。 INO。系列不合格。我想重新生成號碼&填補刪除號碼的空白。 即INO1435應該是1433,1436到1434,1440到1435,&等等。

Select語句我用它來從表中篩選記錄:

SELECT * 
FROM IDETAIL 
WHERE TYPE=True AND INO>=1430 ORDER BY INO; 

截至1430記錄是爲了有差距後,1430 &日01-APR-15。 表中有大約18,000條記錄,因此不容易手動更正記錄。我怎樣才能糾正這與SQL或任何其他命令。

P.S. :沒有相關的表或條目生效。我們只是爲了會計目的而維護條目的順序。

就像我們使用「Do While」功能一樣。 起始條目INo是正確的和已知的。所有條目都以循環開始,從第一條記錄INo = 1430開始,下一條記錄INO = 1430 + 1,接着1430 + 2直到最後一條記錄。如何在UPDATE查詢中實現相同的「WHERE TYPE = TRUE」。

+4

任何你想要這樣做的理由?在一個自動數字字段中缺少id並且不會影響性能。你可以改變它,但是你還需要更新相關的表格。這可能是一個混亂 –

+3

身份應該永遠不會改變。它們代表特定的記錄,如果要更新它們,則必須更新其他所有參考文件。要將其納入現實世界的角度,您是否希望在每次有人死亡時將不得不更改您的社會安全號碼並將其轉移到前方? – Siyual

+1

OP可能使用INO作爲「發票號碼」,並可能希望爲會計目的保留一個序列。我的建議,如果是這樣的話,永遠不要從數據庫中刪除發票記錄。相反,使用字段將它們標記爲已刪除,因此生成發票單據的報告可以爲審覈員生成「跳過」或「已刪除」的記錄。 –

回答

1

如果沒有表,從該表中引用,您可以使用下面的查詢: -

UPDATE YourTable 
SET INO = DCount('*', 'YourTable', 'INO <= ' & INO) 

希望這有助於

+0

感謝@ankit但它從18347開始INO序列。我已經發布了我的選擇語句。還有其他記錄需要先用WHERE TYPE = True進行過濾,即只有那些支付其他記錄的發票是發票生成但未付款的。因此沒有會​​計分錄。我只需要重新編號「Type = True」行。 – Vehlad

+0

因爲我知道起始數字1430和每一行應該是+1。我可以在Where子句中使用UPDATE命令,以便自動增加INO = 1430下一個INO = 1430 + 1下一個INO = 1430 + 2的每一行,就像計數器一樣? – Vehlad

+0

感謝@ankit bajpai尋求幫助實現這一目標的答案。 – Vehlad

1

如果你插入一個新的自動編號字段到表中,應該產生一個新的行的ID集。然後,如果需要,可以將現有字段更新爲新的ID值並刪除自動編號字段。

+0

沒有自動編號字段INO設置爲NUMBER數據類型自動編號在保存時由軟件處理。 – Vehlad

+1

沒錯,所以你可以創建一個新的。它會爲你做你的編號。 – Beth

1

利用和提高從@Ankit巴傑帕伊這裏偉大的答案也許是你所需要的:

UPDATE (SELECT * FROM IDETAIL WHERE TYPE=True AND INO>=1430 ORDER BY INO) 
SET INO = DCount('*', 'IDETAIL ', 'INO <=' & INO & ' AND INO >= 1430 AND Type = True') + 1429 

注意,如果INO被索引並沒有重複, 它可能會在記錄集類型錯誤= FALSE

+0

感謝@asdev的幫助,這正是我要整合select函數中的select語句所需的:) – Vehlad