델파이 10 시애틀 TFDQuery
을 TFDMemTable
으로 복제하고 TFDMemTable
의 변경 사항을 데이터베이스에 유지하려고합니다.TFDQuery에서 복제 된 TFDMemTable에 대한 변경 사항을 데이터베이스로 다시 보낼 수 있습니까?
memtable 변경 사항은 쿼리에 표시되지만 DB로 끝까지 이동하지는 않습니다. 쿼리의 값을 직접 수정하면 데이터베이스에 저장됩니다.
델파이 10 시애틀 TFDQuery
을 TFDMemTable
으로 복제하고 TFDMemTable
의 변경 사항을 데이터베이스에 유지하려고합니다.TFDQuery에서 복제 된 TFDMemTable에 대한 변경 사항을 데이터베이스로 다시 보낼 수 있습니까?
memtable 변경 사항은 쿼리에 표시되지만 DB로 끝까지 이동하지는 않습니다. 쿼리의 값을 직접 수정하면 데이터베이스에 저장됩니다.
흥미로운 q. MergeDataSet
을 사용하여 공백을 그렸습니다.
그러나 나는 너무 많은 식사를하려고하지 않는지 궁금해했습니다.
procedure TForm1.btnCopyToMemTableClick(Sender: TObject);
begin
FDMemTable1.CloneCursor(FDQuery1);
end;
procedure TForm1.btnSaveBackClick(Sender: TObject);
var
Errors : Integer;
begin
Errors := FDQuery1.ApplyUpdates;
FDQuery1.Close;
// need to close FDMemTable1 before re-opening FDQuery1, otherwise the
// call to FDQuery1 provokes a complaint about a duplicated column.
FDMemTable1.Close;
FDQuery1.Open;
FDMemTable1.CloneCursor(FDQuery1);
end;
: 오히려 놀랍게도, 다음 작품은 나를 위해 찾아, 그리고 FDMemTable에서 변경이 데이터베이스에 다시 유지됩니다 (는 MS의 저자 테이블을 사용하여 MS SQL 서버 2014 데이터베이스, 델파이 시애틀 술집)
query
이 닫히기 전에 코드에 query.ApplyUpdates(0)
이없고, 코드에 표시된 오류를 피하기 위해 query
을 다시 열려고 시도하기 전에 memtable.close
을 호출 한 것으로 보입니다.
이 경우 KISS가 적용되는 것으로 보이지만 MergeDataSet
을 사용하여 동일한 결과를 얻을 수있는 방법이 있는지 알고 싶습니다. TFDQuery에
var
query : TFDQuery;
memtable : TFDMemTable;
begin
// Using the MS pubs demo database
query := FDQuery1;
query.SQL.Text := 'select * from authors';
query.CachedUpdates := True;
query.Open;
{ clone query into memtable }
memtable := FDMemTable1;
memtable.CloneCursor(query);
{ go to the same record in query and memtable }
memtable.First;
query.First;
Assert(memtable.Fields[0].Value = query.Fields[0].Value);
{ edit the record in the memtable from ABC to XYZ }
//Assert(memtable[''] = 'ABC');
memtable.Edit;
memtable['Phone'] := '666';
memtable.Post;
{ verify record also changed in query }
Assert(query['Phone'] = '666');
// Added
query.ApplyUpdates(0);
{ has the change gone through to the database? }
query.Close;
// Added
// need to close memtable before re-opening query, otherwise the
// call to query provokes a complaint about a duplicated column.
memtable.Close;
query.Open;
query.First;
Assert(query['Phone'] = '666'); // assertion succeeds
의 ApplyUpdates는 작업을해야한다 :
는, BTW 다음은 코드의 작은 변화가 내 테스트 베드에 적응하는 것입니다. 시도 할 때 코드를 공유 할 수 있습니까? –
필자는 먼저 MemTable과 Query 둘 다 호출해야한다고 생각합니다. 첫 번째 호출은 레코드를 변경되지 않은 것으로 표시하고 두 번째 호출은 업데이트 할 레코드가 없었습니다. – LachlanG