Delphi는 누락 된 열이있는 행을 삽입 할 수 없지만 해당 필드에 대한 트리거 및 생성기가있는 것입니다.

StackOverflow https://stackoverflow.com/questions/9021397

문제

문제는 간단합니다. 각 삽입물에서 열 자동 증가를 만들기 위해 Firebird 2.1.4 데이터베이스에 트리거 및 생성기가 있습니다.

시스템의 아키텍처는 다음과 같습니다.

TSQLConnection > TSQLDataSet -> TDataSetProvider -> (DataSnap) -> TClientDataSet -> TDataSource
.

그러나 일부 누락 된 열과 함께 내 TClientDataSet에 업데이트를 게시하려고하면 Delphi는 다음과 같이 불평합니다.

Field 'XXX' must have a value
.

해당 필드가 누락 된 SQL INSERT 문을 사용하면 행이 삽입되고 트리거 및 생성기가 예상대로 작동합니다.

어떻게 델파이 (dbx, datasnap, s case)를 어떻게 만들려고합니까 (그것을 허용하려고하는지 이해하고 있습니다.

편집

@ mj2008의 주석을 기반으로 한 자세한 정보를 제공합니다.이 TclientDataSet은 clonecursor 메소드를 사용하여 런타임에 생성됩니다.clonecursor를 호출 한 후이 필드의 필수 속성을 false로 설정했습니다.이 문제에 도움이되지 않습니다.예 :

myCds.CloneCursor(otherCds, True);
myCds.FieldByName('XXX').Required := False;
.

이렇게하면 동일한 예외가 발생합니다.

도움이 되었습니까?

해결책

I had to set the TSQLDataset's Required property to False too. That solved the issue.

다른 팁

Just to complement: when you do a TClientDataset setting, the updates are in the end sent to the data access component, in this case TSQLDataset, so even if the TClientdataset doesn't require the field's value, if the data access component requires it the error is raised.

It'll be the same even if data come from a TADODataset, TIbDataset, or whatever.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top