2017-04-05 5 views
0

Ich habe zwei Tabellen, ID-Tabelle und Mastertable. In ID-Tabelle habe ich Level und Aktivität, die eine Startnummer gegeben wird, lassen Sie uns 1000 sagen. In Mastertable habe ich viele Zeichnungen mit der gleichen Aktivität und Ebene zugeordnet. Ich muss ihnen eine Nummerierung geben, beginnend mit dem ID-Tabellenwert 1000 und inkrementiere sie um 1. Nach dem Beenden muss der Maximalwert vom Mastertable in die ID-Tabelle eingefügt werden.Zugriff Vba Sequence ID von anderen Tabelle

Wenn Level und Activity vorhanden sind, muss die ID ausgewählt werden, um nach Level und Aktivität zu suchen. Wenn kein Level angegeben wird, muss sie nur nach Aktivität suchen.

Ich habe viel versucht, konnte aber nicht erfolgreich sein.

Ich habe den Code unten verwendet, aber es sieht nur Aktivität und nicht Ebene. Es geht auch nicht zurück zur ID-Tabelle und aktualisiert die maximale ID von der Master-Tabelle.

Option Compare Database 
Option Explicit 

Public Function SequenceNew() 
Dim strSQL As String 
Dim db As Database 
Dim rs As DAO.Recordset 
Dim a, initNo As Integer 
Dim b As Integer 


strSQL = "SELECT * FROM MasterTable ORDER BY LevelID" 
'Set db = CurrentDb 
Set rs = CurrentDb.OpenRecordset(strSQL) 
If rs.RecordCount > 0 Then 
rs.MoveFirst 
Do While Not rs.EOF 

rs.Edit 
If rs![DrawingTypeName] = "Concrete" And rs![ProjectName] = Forms!frm_Publish!CboProject And rs!IDGiven = "Not Given" Then 
a = a + 1 
rs!Sequence = DLookup("CONCRETE", "Qry_ID_Selected") + a 

ElseIf rs![DrawingTypeName] = "Reinforcement" And rs![ProjectName] = Forms!frm_Publish!CboProject And rs!IDGiven = "Not Given" Then 
b = b + 1 
rs!Sequence = DLookup("REINFORCEMENT", "Qry_ID_Selected") + b 

ElseIf rs![DrawingTypeName] = "Steel structural works" And rs![ProjectName] = Forms!frm_Publish!CboProject And rs!IDGiven = "Not Given" Then 

End If 
rs.Update 
rs.MoveNext 
Loop 
rs.Close 
Set db = Nothing 
Else 
MsgBox " No records Found" 
rs.Close 
Set db = Nothing 
End If 

End Function 

Es sollte einen anderen besseren Weg geben, es zu tun. ID Table

Antwort

1

Das Problem wird durch den neuen Code gelöst, den ich erarbeiten könnte.

Option Compare Database 
Option Explicit 

Public Function SequenceNewLevel() 
Dim strSQL As String 
Dim strSQL1 As String 
Dim db As Database 
Dim rs As DAO.Recordset 
Dim rs1 As DAO.Recordset2 
Dim a, initNo As Integer 
a = 0 
strSQL = "SELECT * FROM MasterTable" 
strSQL1 = "SELECT * FROM ID" 
Set db = CurrentDb 
Set rs1 = CurrentDb.OpenRecordset(strSQL1) 
If rs1.RecordCount > 0 Then 
rs1.MoveFirst 
Do While Not rs1.EOF 
    rs1.Edit 
    Set rs = CurrentDb.OpenRecordset(strSQL) 
    If rs.RecordCount > 0 Then 
    rs.MoveFirst 
    Do While Not rs.EOF 
    rs.Edit 
     If rs![TypeOfDrawing] = rs1![Activity] And rs![Project] = rs1![Project] And rs![LevelName] = rs1![Level] And rs![IDGiven] = "Not Given" Then 
     a = a + 1 
     rs!Sequence = rs1!StartID + a 
     rs1!StartID = rs!Sequence 
     a = 0 
     rs![IDGiven] = "GIVEN" 
     End If 
    rs.Update 
    rs.MoveNext 
    Loop 
End If 
rs1.Update 
rs1.MoveNext 
Loop 
rs1.Close 
rs.Close 
Set db = Nothing 
Else 
MsgBox " No records Found" 
rs.Close 
Set db = Nothing 
End If 
End Function 


Public Function SequenceNewWithOutLevel() 
Dim strSQL As String 
Dim strSQL1 As String 
Dim db As Database 
Dim rs As DAO.Recordset 
Dim rs1 As DAO.Recordset2 
Dim a, initNo As Integer 
a = 0 
strSQL = "SELECT * FROM MasterTable" 
strSQL1 = "SELECT * FROM IDWithoutlevel" 
Set db = CurrentDb 
Set rs1 = CurrentDb.OpenRecordset(strSQL1) 
If rs1.RecordCount > 0 Then 
rs1.MoveFirst 
Do While Not rs1.EOF 
    rs1.Edit 
    Set rs = CurrentDb.OpenRecordset(strSQL) 
    If rs.RecordCount > 0 Then 
    rs.MoveFirst 
    Do While Not rs.EOF 
    rs.Edit 
     If rs![TypeOfDrawing] = rs1![Activity] And rs![Project] = rs1![Project] And rs![IDGiven] = "Not Given" Then 
     a = a + 1 
     rs!Sequence = rs1!StartID + a 
     rs1!StartID = rs!Sequence 
     a = 0 
     rs![IDGiven] = "GIVEN" 
     End If 
    rs.Update 
    rs.MoveNext 
    Loop 
End If 
rs1.Update 
rs1.MoveNext 
Loop 
rs1.Close 
rs.Close 
Set db = Nothing 
Else 
MsgBox " No records Found" 
rs.Close 
Set db = Nothing 
End If 
End Function 
Verwandte Themen