2017-10-26 12 views
0

날짜 및 시간 필드 형식이 mm/dd/yyyy가되도록 마스크가 적용된 몇 가지 컨트롤이 있습니다. 양식에로드되는 필드 중 일부는 원본 테이블에서 비어 있으므로 SQL을 실행할 때 본질적으로 잘못된 것인가를 확인합니다. ''또는 Null을 확인합니다. as '는 날짜 번호의 텍스트로 실패하고 필드는 실제로 비어 있지 않습니다.MS 액세스 업데이트 SQL Null이지만 비어있다! (날짜 및 숫자 필드!)

 strSQL4 = "UPDATE [tblDetails] SET " & _ 
      "[Proposed] = IIF(IsNull(" & Forms!frmEdit.txtProposed.Value & "),0," & Forms!frmEdit.txtProposed.Value & "), " & _ 
      "[Multi] = IIF(IsNull(" & Forms!frmEdit.txtMulitplier.Value & "),0," & Forms!frmEdit.txtMulitplier.Value & "), " & _ 
      "[Rational] = '" & Forms!frmEdit.txtRational.Value & "' " & _ 
      " WHERE [RNumber] = '" & Forms!frmEdit.cmbUpdate.Value & "'" 
      Debug.Print strSQL4 
     dbs.Execute strSQL4 

오류는 쿼리 식 에서 기능을 사용 인수 3075 수가 잘못 'IIF (ISNULL(), 0,'

또한 자체가 다른 사이트에서 제시 한 필드를 입력 시도

 strSQL4 = "UPDATE [tblDetails] SET " & _ 
      "[Proposed] = IIF(" & Forms!frmEdit.txtProposed.Value & "='',[Proposed]," & Forms!frmEdit.txtProposed.Value & "), " & _ 
      " WHERE [RNumber] = '" & Forms!frmEdit.cmbUpdate.Value & "'" 
      Debug.Print strSQL4 
     dbs.Execute strSQL4 

동일한 오류 3075 'IIF (IsNull(), 0, [ProposedHrs]'

*** 또한 IIF를 사용하면 실패합니다. IsNull 메서드는 = ''

필자는 실패한 날짜의 예를 붙여 넣지 않았지만 같은 생각으로 null이 아니지만 공백이지만 다시 공백으로 다시 업데이트되거나 어쩌면 건너 뛰는 것처럼 보입니까?

미리 감사드립니다.

업데이트 - 1 시도에서 에릭 폰 Asmuth 코드 < - 감사합니다 btw! 예상 : 표현

업데이트-2 : 나는 첫 번째 줄에 업데이트를 이동

Set qdf = db.CreateQueryDef("", & _ 
      "UPDATE [tblDetails] SET " & _ 
      "[Proposed] = @Proposed, " & _ 
      "[Multi] = @Multi, " & _ 
      "[Rational] = @Rational " & _ 
      "WHERE [RNumber] = @RNumber") 

이 부분은 모든 빨간색과 최초의 "&는" 컴파일 오류 알림 창을 닫은 후 강조된다 그것은 작동하는 것 같습니다. 설정 QDF = db.CreateQueryDef ("", "UPDATE [tblDetails] SET"& _

내가 옆에있는 날짜 필드에이 방법을 시도하기 위하여려고하고있다

업데이트-3.과 같은 파라미터를 시도 할 때 99/99/0000으로 마스크 된 텍스트 상자; 0; _ 컬렉션에 항목이 없습니다. 몇 번이나 맞춤법을 검사했는데 모든 것이 정상적으로 보입니다. 다음 세 가지 형식을 시도 했으므로 DateRcvd 매개 변수를 설정하십시오. ? 날짜가 텍스트 상자에 대한 올바른

qdf.Parameters("@DateRcvd") = IIf(Nz(Forms!frmEdit.txtDateRcvd.Value) = "", 0, Forms!frmEdit.txtDateRcvd.Value) 
qdf.Parameters("@DateRcvd") = IIf(IsNull(Forms!frmEdit.txtDateRcvd.Value), 0, Forms!frmEdit.txtDateRcvd.Value) 
qdf.Parameters("@DateRcvd") = IIf(Forms!frmEdit.txtDateRcvd.Value = "", 0, Forms!frmEdit.txtDateRcvd.Value) 

업데이트-4 :

Dim qdf2 As DAO.QueryDef 
Set db = CurrentDb 
Set qdf2 = db.CreateQueryDef("", "UPDATE [tblDetails] SET " & _ 
      "[DateReceived] = @DateRcvd " & _ 
      "WHERE [RNumber] = @RNumber") 
      qdf.Parameters("@DateRcvd") = IIf(Nz(Forms!frmEdit.txtDateRcvd.Value) = "", 0, Forms!frmEdit.txtDateRcvd.Value) 
      qdf.Parameters("@RNumber") = Forms!frmEdit.cmbUpdate.Value 
      qdf2.Execute 

텍스트 상자 txtDateRcvd에는 입력란 99/99/0000; 0; _이 텍스트 상자의 속성 내에 설정되어 있습니다.

+0

가능한 중복 (https://stackoverflow.com/questions/43589800/syntax-error -in-into-statement-into-statement-whats-the-error) – Gustav

+0

새 문제에 대한 쿼리를 제공하십시오 (매개 변수를 지정하지 않은 것처럼 보입니다. 동일한 매개 변수 '@ DateRcvd'를 세 번 설정하고 있습니다). 또한'99/99/0000; 0;'은 유효하지 않은 날짜입니다 (날짜의 모든 부분이 유효하지 않음). Access에서 사용 가능한 가장 낮은 날짜는'01-01-0100 00 : 00'입니다. –

+0

'qdf2 = db.CreateQueryDef'를 설정했으나'qdf'가 아닌'qdf'에서 매개 변수를 변경하려고합니다 : qdf2'. 그건 네 잘못이야. 날짜 필드에 0을 삽입하면 30-12-899로 캐스팅됩니다. 대신 공백으로 남겨 두어 Null을 쓸 수 있습니다. –

답변

0

당신은 빈 문자열을 설명하고, VBA에서 대신 SQL의 IIF 문 그렇게해야 더 나은 아직

 strSQL4 = "UPDATE [tblDetails] SET " & _ 
     "[Proposed] = " & IIF(Nz(Forms!frmEdit.txtProposed.Value) = "",0, Forms!frmEdit.txtProposed.Value) & ", " & _ 
     "[Multi] = " & IIF(Nz(Forms!frmEdit.txtMulitplier.Value) = "",0, Forms!frmEdit.txtMulitplier.Value) & ", " & _ 
     "[Rational] = '" & Forms!frmEdit.txtRational.Value & "' " & _ 
     " WHERE [RNumber] = '" & Forms!frmEdit.cmbUpdate.Value & "'" 

또는, 그것을 제대로 할 당신이 이런 종류의를 얻을 수 있도록 전체 업데이 트를 매개 변수화 오류 또는 SQL 주입.제대로 작업을 수행하는 방법의

예 :

Dim db As DAO.Database 
Dim qdf As DAO.QueryDef 
Set db = CurrentDb 
Set qdf = db.CreateQueryDef("", _ 
    "UPDATE [tblDetails] SET " & _ 
    "[Proposed] = @Proposed, " & _ 
    "[Multi] = @Multi, " & _ 
    "[Rational] = @Rational " & _ 
    "WHERE [RNumber] = @RNumber" 
) 
qdf.Parameters("@Proposed") = IIF(Nz(Forms!frmEdit.txtProposed.Value) = "",0, Forms!frmEdit.txtProposed.Value) 
qdf.Parameters("@Multi") = IIF(Nz(Forms!frmEdit.txtMulitplier.Value) = "",0, Forms!frmEdit.txtMulitplier.Value) 
qdf.Parameters("@Rational") = Forms!frmEdit.txtRational.Value 
qdf.Parameters("@RNumber") = Forms!frmEdit.cmbUpdate.Value 
qdf.Execute 
[? 문에 삽입에서 구문 오류 - 오류 무엇]의
+0

신속한 답장을 보내 주셔서 감사합니다! 솔루션을 구현하려고 시도하지만 컴파일 오류가 계속 발생합니다. 기대되는 식 : 코드가 빨간색으로 강조 표시되고 첫 번째 줄에 초점을 맞 춥니 다. db.CreateQueryDef ("", & _ –

+0

사용한 선과 구현을 제공하십시오. –

+0

원래의 게시물에 코드를 추가했습니다 ..... stackoverflow comment box는 여러 개의 "@"를 허용하지 않습니다. 이전의 여러 주석 기자에게 알리려고한다고 생각합니다. ""을 (를) 이해하고 & _는 비워 둡니다. 이름, 공백, 다음 줄을 계속하고 게시물의 줄을 복사/붙여 넣기해도 여전히 오류가 발생합니다? –