2014-08-29 27 views
2

我想創建一個唯一的數字表格,該表格具有一個文本框以輸入要生成的唯一編號的數量以及一個運行程序的按鈕。到目前爲止,我使用的是VBA和SQL的組合(本質上,VBA代碼在while循環中運行SQL查詢)。 VBA代碼如下:Microsoft Access查詢試圖根據日期創建唯一序號的表格

Option Compare Database 

Private Sub Command10_Click() 

'Get number of iterations 
Dim i As Integer 

'Ensure that Form is open 
DoCmd.OpenForm "Interface" 

'Set i as value inputed into the Form 
i = Forms![Interface]![Text6] 

'Clear t3 
DoCmd.RunSQL "DELETE * FROM t3" 

'Generate as many control numbers as wanted 
Do While i > 0 

    'Generate Control number 
    DoCmd.OpenQuery "Control", acViewNormal, acEdit 

    'Clean up duplicates 
    DoCmd.OpenQuery "Dup_Cont", acViewNormal, acEdit 

    'Populate t3 with only new control numbers 
    DoCmd.OpenQuery "New Numbers", acViewNormal, acEdit 

    'reduce i by 1 
    i = i - 1 
Loop 

'Open t3 as a ReadOnly table 
DoCmd.OpenTable "t3", acViewNormal, acReadOnly 

End Sub 

是使用的SQL查詢如下:

「控制查詢」

INSERT INTO t1 (DATE, DATE_NUM, CONTROL_NUMBER, UNIQUE_NUM) 
SELECT DISTINCT 
'C77A' & Year(Date()) & Format(Month(Date()),'00') & Format(Day(Date()),'00') AS DATE_A, 
IIf([DATE] Like [DATE_A],Count(*)+1,1) AS DATE_NUM, 
[DATE_A] & Format([DATE_NUM],'000') AS CONTROL_NUM, 
Year(Date()) & Format(Month(Date()),'00') & Format(Day(Date()),'00') & Format(IIf([DATE] Like [DATE_A],Count(*)+1,1),'000') AS UNIQUE_NUM 
FROM t2 
GROUP BY t2.DATE; 

「Dup_Cont查詢」

SELECT DISTINCT 
t1.DATE, 
t1.DATE_NUM, 
t1.CONTROL_NUMBER, 
t1.UNIQUE_NUM INTO t2 
FROM t1; 

「新數字查詢「

INSERT INTO t3 (CONTROL_NUMBER) 
SELECT Max(t2.CONTROL_NUMBER) 
FROM t2; 

該代碼當前的功能是使用[C77A] [Date] [Sequential Number]格式根據運行查詢的日期創建唯一控制號並打開最新控制號的表,但因爲運行控制查詢的某些原因會創建數字的重複項,我添加了Dup_Control查詢以僅提取表格的唯一編號而不顯示重複項。

我希望如果有人能告訴我如何壓縮這或至少知道爲什麼我與「控制查詢」重複。

樣品T1

DATE   | DATE_NUM| CONTROL_NUM | UNIQUE_NUM 
------------------------------------------------------- 
C77A20140829 | 1  |C77A20140829001|20140829001 
C77A20140829 | 1  |C77A20140829001|20140829001 
C77A20140829 | 1  |C77A20140829001|20140829001 
C77A20140829 | 1  |C77A20140829001|20140829001 
C77A20140829 | 1  |C77A20140829001|20140829001 
C77A20140829 | 1  |C77A20140829001|20140829001 
C77A20140829 | 1  |C77A20140829001|20140829001 
C77A20140829 | 2  |C77A20140829002|20140829002 
C77A20140829 | 3  |C77A20140829003|20140829003 

樣品T2

DATE   | DATE_NUM| CONTROL_NUM | UNIQUE_NUM 
------------------------------------------------------- 
C77A20140829 | 1  |C77A20140829001|20140829001 
C77A20140829 | 2  |C77A20140829002|20140829002 
C77A20140829 | 3  |C77A20140829003|20140829003 
+0

你有在控制查詢創建重複的唯一編號數據的小樣本? – 2014-08-29 15:07:25

+0

是的,我會編輯原始帖子以包含它以及所需表格的樣本 – Frank 2014-08-29 16:31:25

+0

因此,如果您將數字10放在框中並按下按鈕,您希望DATE_NUM字段從1增加到10,然後使UNIQUE_NUM字段從1增加到10?另外,Control查詢引用一個名爲「t2」的表。 「t2」的內容是你上面發佈的內容嗎?或者在「t2」中只有一個日期字段? – 2014-08-29 17:16:03

回答

0

除非我記錯了,[日期]決不會等於[DATE_A。對於沒有任何通配符(*)的運算符「LIKE」的使用意味着兩個必須爲的增量發生相等。所以,您的唯一號碼字段將始終以「001」結尾。

您首先需要通過在公式中添加通配符來更改該屬性。如果還是不行,那就試試這個方法增加一個字段:

An Access query that returns every nth record

相關問題