Disable/EnableControls()
을 사용하면서 데이터 세트를 반복하는 동안, 즉 필드를 업데이트 할 때 몇 가지 문제가있었습니다.disablecontrols를 사용하여 올바른 데이터 게시 문제
업데이트 된 두 필드에 어떤 현상이 발생하는지는 모두 동일한 데이터를 사용하고있는 것입니다. 모든 행에 대해 게시물의 마지막 값을 입력하는 것처럼 보입니다. 그래서 우리가 1, 2, 3의 업데이트 된 값을 가지고있는 3 개의 레코드를 가지고 있다고 가정 해 봅시다. (제 경우에는 3이 모든 필드에 대해 게시됩니다) 마지막 필드에 대해 1, 2, 3을 기대했습니다.
예를 들어, 내 데이터 집합에 10 개의 레코드가 있습니다. 그리드를 볼 때이 함수를 실행하고 데이터를 지속하면 Cost
열 값이 각 행에 대해 동일하지만 getNewDataValue
함수에 시계를 넣었지만 값이 다릅니다.
NumberSelected = 0;
dataSourceItems.DataSet.DisableControls; //it this be my problem, accessing the dataset via the datasource? – I tried this and it didn’t make a difference.
while (NumberSelected < cxGridDBTableView1.Controller.SelectedRowCount) do
begin
Id = cxGridDBTableView1.Controller.SelectedRows[NoSelected]).Values[0];
if dataSourceItems.DataSet.locate('PK', Id, []) then
begin
dataSourceItems.DataSet.edit;
dataSourceItems.DataSet.fieldbyname('Cost').asfloat := getNewDataValue;
dataSourceItems.DataSet.Post;
inc(NumberSelected)
end;
dataSourceItems.DataSet.EnableControls;
end;
저는 Firebird 데이터베이스에 액세스하는 Delphi 2010, DevExpress Quantum Grid 및 FIBPlus 데이터 세트를 사용하고 있습니다.
설명서를 살펴보면, DisableControls()
이 호출 될 때 TDataSet.DataEvent
은 이벤트를 데이터 소스에 전달하지 않으며 EnableControls()
이 호출 될 때까지 모든 마스터 세부 관계가 깨졌습니다. DataSource를 통해 DataModule의 DataSet에 액세스 할 수 있습니까? 나는 이것을 시도하고 차이를 만들지 않는다.
Disable/EnableControls()
을 사용하지 않으면 속도를 사용할 수 없습니다. 대형 데이터 세트를 반복적으로 반복하는 방법에 대한 조언이나 도움이 될 것입니다. 대신 외부 루프되어야 할 때
는 데이터 세트에 게시되고 해당 행 커서가 이동하기 전에 . fieldbyname() 지정 바로 뒤에 dataSourceItems.DataSet.Post를 명시 적으로 호출하십시오. 시도해보십시오 - 문제가 해결 될 수도 있지만 어쨌든해야합니다. – MartynA
실제로 명시 적으로 게시하도록 호출하지 않았으므로 명확하게하기 위해 내 질문을 편집했습니다. 당신의 권리, 나는 지금 변화하고 시험 할 것입니다. – MrRobot
fieldbyname() 지정 직후에 게시 한 후에도 동일한 결과를 얻습니다. – MrRobot