2017-12-04 33 views
0

do 루프의 작업 번호 필드에 순차적으로 번호를 추가하려고합니다. 내 코드가 손상되지는 않지만 레코드를 테이블에 추가하지는 않습니다. 이 코드는 액세스 폼 단추를 눌러 레코드를 업데이트 할 때 호출되는 함수로 작성됩니다. 나는 내가 달성하기 위해 노력하고있는 무슨이다 cardcode 필드를 제외한 필드의 행을 중복 할 것이다 실현VB6 액세스 업데이트 쿼리가 테이블을 업데이트하지 않습니다.

Dim NumofBatches As Integer 
    NumofBatches = [Batches] 
    Dim startnum As Integer 
    startnum = 1 
    Dim jobnum As String 
    jobnum = [JobNumber] 

    Do While startnum <= NumofBatches 
     Dim mynumString As String 
     mynumString = startnum 
     DoCmd.RunSQL "INSERT INTO Production (CardCode,JobItemNo,JobIndex,DrawingRef,DRDescription,[CreationDate],Quantity,FinishDate,LastLocation,DateLastMoved) VALUES ('" & jobnum & mynumString & "', ItemNumber, JobNumber, DrawingRef, DRDescription, [CreationDate], Quantity, FinishDate, LastLocation, DateLastMoved)" 
     startnum = startnum + 1 
    Loop 

: 다음은 내 코드입니다. 카드 번호 필드는 작업 번호에 대한 각 행에서 순차적이어야합니다. 예 : 100011, 100012. 여기서 10001은 작업 번호이며 1, 2 등을 순차적으로 추가합니다.

답변

2

몇 가지 문제가 있습니다. 첫 번째는 SQL 문의 INSERT 부분에있는 필드 목록에 있습니다. 프로덕션 테이블에 "CardCode + mynumString"이라는 열이 없다면 (그리고 그랬다면 공간과 기호가 있기 때문에 대괄호를 사용해야 할 것입니다) 작동하지 않을 것입니다. INSERT INTO <TableName> 뒤에 괄호 안에 삽입하려는 테이블의 열 이름을 나열해야합니다. 먼저 목표 컬럼 이름을 수정하십시오.

다음 삽입 할 값의 원본으로 SELECT 문이 있습니다. 당신이 필요로하는 값이 테이블에서 발견되지 않는 한, 당신은 아마 VALUES 목록을 사용한다 :

INSERT INTO <TableName> (Col1, Col2, ...) VALUES (Val1, Val2, ...) 

마지막 문제는 당신이 SQL 문자열로 변수을 연결해야한다는 것입니다. [Text90]은 CardCode 값이있는 컨트롤이고 mynumString과 연결하려고한다고 가정합니다. 이 같은 표정 무언가 :

DoCmd.RunSQL "INSERT INTO Production (Col1, Col2, ...) VALUES ('" & [Text90] & mynumString & "', Val2, ...)" 

주 당신이 인용 SQL 문자열을 외부에서 값을 해결하고 문자열로 그 값을 연결하고 SQL 문자열 내 단일 틱 따옴표와 함께이 모든을 설정합니다 .

DoCmd.RunSQL mySQLVariable 

변수의 SQL 문자열을 갖는 조금 더 쉽게 연결되는 경우에 오류를 발견 할 수 있습니다 :

나는 그것을 편리 변수를 사용하여이 같은 동적 SQL 문자열을 구축하고 다음으로 실행하기 위해 찾아 디버깅 중에 변수를 검사하거나 Debug.Print를 사용하여 직접 실행 창에 값을 덤프하는 경우에 유용합니다.

+0

좋은 답변입니다. 하나의 작은 점은 테이블의 모든 열을 순서대로 사용하면 열 이름을 제공 할 필요가 없다는 것입니다. (아마도 Access에서는 사실이 아닙니다. 잊어 버립니다.) – BobRodes

+0

Thanks. Access에서 매일 더 이상 작동하지 않으므로 확신 할 수 없지만 IIRC는 각 열의 값이 VALUES 목록의 소스에 제공되면 대상 테이블의 열 사양을 건너 뛸 수 있습니다 또는 SELECT 문에서. –

+1

확실히 열 이름을 생략 할 수는 있지만 테이블에 자 동 번호 필드 또는 계산 필드가 포함되거나 추가 열을 가져 오면 쿼리가 실패하므로 제공하는 것이 좋습니다. –