문제는 간단합니다. Firebird 2.1.4 데이터베이스에서 트리거 및 생성기를 사용하여 각 삽입에서 열 자동 증가를 만듭니다.Delphi에서는 누락 된 열이있는 행을 삽입 할 수 없지만 해당 필드에 트리거 및 생성기를 사용합니다.
TSQLConnection > TSQLDataSet -> TDataSetProvider -> (DataSnap) -> TClientDataSet -> TDataSource
을 그러나, 나는 몇 가지 누락 된 열을 내 TClientDataSet의에 업데이트를 게시하려고하면, 델파이는 다음과 같이 불평을합니다 :
Field 'XXX' must have a value
경우에는 다음과 같이
시스템의 아키텍처는 해당 필드가없는 SQL 삽입 문을 사용하면 행이 삽입되고 트리거 및 생성기가 예상대로 작동합니다.
어떻게하면 델파이 (DBX, DataSnap 등)가 무엇을하려하는지 이해할 수 있습니까?
편집
@의 mj2008의 의견에 따라 추가 정보를 제공하는이 TClientDataSet의이 CloneCursor 방법을 사용하여 런타임에 생성되고있다. CloneCursor를 호출 한 후이 필드의 Required 속성을 False로 설정했습니다. 이 문제에 도움이되지 않습니다. 예 :
myCds.CloneCursor(otherCds, True);
myCds.FieldByName('XXX').Required := False;
결과는 동일한 예외가 발생합니다.
아마도 필수 입력란이므로 Delphi에서는 값이 있다고 주장합니다. 그들을 요구하지 말라, 그러면 사라질 것이다. – mj2008
@ mj2008 그건 도움이되지 않습니다. 나는 더 많은 정보를 가지고 질문을 편집했다. – ivarec