2014-10-31 2 views
0

그래서 저는 VBA 액세스에 익숙하지 않고 방금 코드에 큰 문제가 발생했습니다. 설명해 드리겠습니다. 현재 레코드의 데이터를로드하고 사용자가 레코드를 편집 할 수있는 폼이 있습니다. 현재 변경된 데이터가 데이터베이스에서 제대로 업데이트되도록 저장 버튼을 만들고 있습니다. 내가 가진 것은 텍스트 상자의 데이터가 레코드 세트의 데이터와 동일한 지 확인하는 검사입니다. 문제는 데이터가 데이터베이스에서 null 인 경우 텍스트 상자에 "업데이트 된 그룹"과 같은 텍스트 상자가있는 것처럼 데이터가 실행되는 것처럼 실행됩니다. 나에게 이것이 약간의 감독과 다소 실망 스럽다. 내 질문은 누구든지이 문제에 대한 해결 방법을 알고 있습니까?VBA : 현재 데이터를 기반으로 레코드 세트 업데이트

미리 감사드립니다. 여기

는 대답 : 만약 RstRecSet ("그룹 이름") 값 & "" <> txtGroupNameEdit.Value & ""여기 -Wayne

내 코드입니다 :.

Dim searchGroup As String 
Dim db As DAO.Database 
Dim RstRecSet As DAO.Recordset 
Dim Rst As DAO.Recordset 
Set db = CurrentDb 
searchGroup = txtGroupNrEdit 
Set RstRecSet = db.OpenRecordset("Select * from tblGroupHeader Where groupNum like '*" & searchGroup & "*';", dbOpenDynaset) 
Set Rst = db.OpenRecordset("Select * from tblAuditTable;", dbOpenDynaset) 

If RstRecSet("GroupName").Value <> txtGroupNameEdit.Value Or RstRecSet("PlanStartDate").Value <> txtStartDateEdit.Value _ 
Or RstRecSet("CanDate").Value <> txtCanDateEdit.Value Or RstRecSet("ClerkID").Value <> txtClerkIDEdit.Value _ 
Or RstRecSet("PopulationType").Value <> txtGroupTypeEdit.Value Or RstRecSet("COC").Value <> chkCOCEdit.Value _ 
Or RstRecSet("CDHFinancialPartner").Value <> cmbCDHEdit.Value Or RstRecSet("CDHProdOptions").Value <> chkCDHEdit.Value _ 
Or RstRecSet("MemberLevelBenefits").Value <> chkMembBeneEdit.Value Or RstRecSet("Comments").Value <> txtCommentsEdit.Value _ 
Or RstRecSet("AlsoKnownAs").Value <> txtKnownEdit.Value Or RstRecSet("BCBS").Value <> chkBCBSEdit.Value _ 
Or RstRecSet("Other").Value <> chkOtherEdit.Value Then 
    RstRecSet.Edit 
    Rst.AddNew 
     If RstRecSet("AlsoKnownAs").Value <> txtKnownEdit.Value Then 
     Rst("GroupName").Value = txtGroupNameEdit.Value 
     Rst("GroupNum").Value = txtGroupNrEdit.Value 
     RstRecSet("AlsoKnownAs").Value = txtKnownEdit.Value 
     Rst("AlsoKnownAs").Value = RstRecSet("AlsoKnownAs") 
     Rst("DateChanged").Value = Date 
     End If 
     If RstRecSet("PlanStartDate").Value <> txtStartDateEdit.Value Then 
     Rst("GroupName").Value = txtGroupNameEdit.Value 
     Rst("GroupNum").Value = txtGroupNrEdit.Value 
     RstRecSet("PlanStartDate").Value = txtStartDateEdit.Value 
     Rst("PlanStartDate").Value = RstRecSet("PlanStartDate") 
     Rst("DateChanged").Value = Date 
     End If 
     If RstRecSet("CanDate").Value <> txtCanDateEdit.Value Then 
     Rst("GroupName").Value = txtGroupNameEdit.Value 
     Rst("GroupNum").Value = txtGroupNrEdit.Value 
     RstRecSet("CanDate").Value = txtCanDateEdit.Value 
     Rst("CanDate").Value = RstRecSet("CanDate") 
     Rst("DateChanged").Value = Date 
     End If 
     If RstRecSet("PopulationType").Value <> txtGroupTypeEdit.Value Then 
     Rst("GroupName").Value = txtGroupNameEdit.Value 
     Rst("GroupNum").Value = txtGroupNrEdit.Value 
     RstRecSet("PopulationType").Value = txtGroupTypeEdit.Value 
     Rst("PopulationType").Value = RstRecSet("PopulationType") 
     Rst("DateChanged").Value = Date 
     End If 
     If RstRecSet("CDHFinancialPartner").Value <> cmbCDHEdit.Value Then 
     Rst("GroupName").Value = txtGroupNameEdit.Value 
     Rst("GroupNum").Value = txtGroupNrEdit.Value 
     RstRecSet("CDHFinancialPartner").Value = cmbCDHEdit.Value 
     Rst("CDHFinancialPartner").Value = RstRecSet("CDHFinancialPartner") 
     Rst("DateChanged").Value = Date 
     End If 
     If RstRecSet("MemberLevelBenefits").Value <> chkMembBeneEdit.Value Then 
     Rst("GroupName").Value = txtGroupNameEdit.Value 
     Rst("GroupNum").Value = txtGroupNrEdit.Value 
     RstRecSet("MemberLevelBenefits").Value = chkMembBeneEdit.Value 
     Rst("MemberLevelBenefits").Value = RstRecSet("MemberLevelBenefits") 
     Rst("DateChanged").Value = Date 
     End If 
     If RstRecSet("Other").Value <> chkOtherEdit.Value Then 
     Rst("GroupName").Value = txtGroupNameEdit.Value 
     Rst("GroupNum").Value = txtGroupNrEdit.Value 
     RstRecSet("Other").Value = chkOtherEdit.Value 
     Rst("Other").Value = RstRecSet("Other") 
     Rst("DateChanged").Value = Date 
     End If 
     If RstRecSet("ClerkID").Value <> txtClerkIDEdit.Value Then 
     Rst("GroupName").Value = txtGroupNameEdit.Value 
     Rst("GroupNum").Value = txtGroupNrEdit.Value 
     RstRecSet("ClerkID").Value = txtClerkIDEdit.Value 
     Rst("ClerkID").Value = RstRecSet("ClerkID") 
     Rst("DateChanged").Value = Date 
     End If 
     If RstRecSet("COC").Value <> chkCOCEdit.Value Then 
     Rst("GroupName").Value = txtGroupNameEdit.Value 
     Rst("GroupNum").Value = txtGroupNrEdit.Value 
     RstRecSet("COC").Value = chkCOCEdit.Value 
     Rst("COC").Value = RstRecSet("COC") 
     Rst("DateChanged").Value = Date 
     End If 
     If RstRecSet("CDHProdOptions").Value <> chkCDHEdit.Value Then 
     Rst("GroupName").Value = txtGroupNameEdit.Value 
     Rst("GroupNum").Value = txtGroupNrEdit.Value 
     RstRecSet("CDHProdOptions").Value = chkCDHEdit.Value 
     Rst("CDHProdOptions").Value = RstRecSet("CDHProdOptions") 
     Rst("DateChanged").Value = Date 
     End If 
     If RstRecSet("Comments").Value <> txtCommentsEdit.Value Then 
     Rst("GroupName").Value = txtGroupNameEdit.Value 
     Rst("GroupNum").Value = txtGroupNrEdit.Value 
     RstRecSet("Comments").Value = txtCommentsEdit.Value 
     Rst("SpecialConsideration").Value = RstRecSet("Comments") 
     Rst("DateChanged").Value = Date 
     End If 
     If RstRecSet("BCBS").Value <> chkBCBSEdit.Value Then 
     Rst("GroupName").Value = txtGroupNameEdit.Value 
     Rst("GroupNum").Value = txtGroupNrEdit.Value 
     RstRecSet("BCBS").Value = chkBCBSEdit.Value 
     Rst("BCBS").Value = RstRecSet("BCBS") 
     Rst("DateChanged").Value = Date 
     End If 
     If RstRecSet("GroupName").Value <> txtGroupNameEdit.Value Then 
     Rst("GroupName").Value = txtGroupNameEdit.Value 
     Rst("GroupNum").Value = txtGroupNrEdit.Value 
     RstRecSet("GroupName").Value = txtGroupNameEdit.Value 
     Rst("GroupName").Value = RstRecSet("GroupName") 
     Rst("DateChanged").Value = Date 
     End If 
    Rst.Update 
    RstRecSet.Update 
End If 
+0

코드가 사용자가 설명하는 것과 일치하지 않는 것 같습니다. 당신이 확인한 것처럼 보입니다. "다른 무엇입니까?" 그렇다면 실제로 레코드 편집 외에도 새 레코드를 추가하십시오. 나는 당신이 실제로 무엇을 요구하고 있는지 확신하지 못한다. – enderland

+0

감사 테이블에 대해서만 추가 레코드에주의를 기울이지 마십시오. 너와 같은 작품들은 그것을 분명하게했다. "다른 것은 다른 것입니까? 그때 다른 것을 바꾸십시오". 문제는 "KnownAs"가 "아무 것도 다르지 않은가?"라는 방아쇠를 당기지 않은 기록에 아무것도 없다는 것을 말합니다. 성명 (나는 그것이 null로 생각하기 때문에), 그것은 단지 그것이라고 가정합니다. – SaladSnake

+0

null 값은 비교 중에 이상한 결과를 초래할 수 있으므로 레코드 세트 필드가 Null인지 확인해야합니다. 즉 'RstRecSet ("GroupName") 인 경우 Value & ""<> txtGroupNameEdit.Value & "".... –

답변

0

null 값은 비교 중에 이상한 결과를 초래할 수 있습니다.

If RstRecSet("GroupName").Value & "" <> txtGroupNameEdit.Value & "" Or ... 
0

을하지만 당신의 저장 버튼은이 코드 한 줄 필요가있다 : 다음과 같이 뭔가를 시도

을하면 me.dirty 다음 me.dirty =

왜 당신이 모든 다른 필요합니까 거짓 코드와 수표? 액세스 양식에서 데이터를 편집 할 때 데이터 저장을 허용 할 때까지 데이터가 변경되거나 테이블에 커밋되지 않습니다. 컨트롤이 변경되지 않으면 컨트롤의 이벤트 코드가 실행되지 않습니다. 따라서 실제로 필요하지 않을 때 많은 양의 코드를 작성하는 것은 시간 낭비입니다.

그리고 업데이트하기 전에 양식에 값과 날짜를 확인하는 추가 코드를 배치 할 수 있습니다. 이 이벤트는 양식의 데이터가 테이블에 작성되기 전에 발생하므로 빈 텍스트 상자를 테스트하는 코드를 추가하거나 테이블에 데이터 BACK을 쓰기 전에 데이터를 테스트하기위한 복잡한 코드와 규칙을 사용할 수 있습니다.

여기서는 아무 것도 쓰지 않고 바퀴를 다시 발명하고 귀중한 개발자 시간을 낭비합니다. 저장 버튼은 데이터를 저장하기 위해 위의 한 줄의 코드 만 필요합니다.

저장을 방지하기 위해 업데이트하기 전에 양식에 테스트 및 인증 코드를 넣을 수 있으며 사용자가 데이터를 편집하지 않으면 해당 이벤트가 실행되지 않습니다. 아마도 데이터 문제의 검증이 무엇인지 설명 할 수 있습니다. 저장 버튼은 필요하지 않으며 ctrl-s, ctrl-f4 및 다른 많은 수의 다른 키가 데이터를 저장하지만 모든 경우에 업데이트 전 이벤트의 테스트 코드가 실행되고 실행된다는 점에 유의하십시오.

+0

Hello Albert, 사용자가 양식의 데이터를 변경했는지 확인하기 위해 코드 검사가 필요합니다. 설명하겠습니다. 양식이로드되면 레코드 세트의 데이터가로드되고 A라고 말합니다. 그런 다음 사용자는 데이터를 편집 할 수있는 옵션을 제공 한 후 "저장"을 클릭 할 수 있습니다. 레코드 업데이트 전에 검사는 사용자가 실제로 텍스트 상자의 값을 변경했음을 확인하기위한 것입니다. 불행히도 많은 코드가 추가되었습니다. 시간을내어 주셔서 감사 드리며 더러운 물건에 대해 알려 주시면 솔직히 존재하지 않는다고 생각합니다. 감사합니다. – SaladSnake

관련 문제