2012-01-26 4 views
2

문제는 간단합니다. 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; 

결과는 동일한 예외가 발생합니다.

+0

아마도 필수 입력란이므로 Delphi에서는 값이 있다고 주장합니다. 그들을 요구하지 말라, 그러면 사라질 것이다. – mj2008

+0

@ mj2008 그건 도움이되지 않습니다. 나는 더 많은 정보를 가지고 질문을 편집했다. – ivarec

답변

2

TSQLDataset의 Required 속성도 False로 설정해야했습니다. 그것으로 문제가 해결되었습니다.

0

TClientDataset 설정을 수행하면 데이터 액세스 구성 요소 (이 경우 TSQLDataset)로 업데이트가 전송되므로 TClientdataset에 필드 값이 필요하지 않은 경우에도 데이터 액세스 구성 요소를 사용하려면 오류가 발생해야합니다.

데이터가 TADODataset, TIbDataset 등에서 온 경우에도 동일합니다.