0

BDE とフラット テーブルを使用しています。2 つの同一のテーブルがtblOneありtblTwo 、あるテーブルから別のテーブルにデータをコピーしようとしています。DB全体ではなく、これを使用する特定の1つのレコードのみ:

function Tdm.CopyRecord(var tblFrom,tblTo : TTable) : Boolean;
var
  i : Integer;
begin
  Result:=False;
  try
    tblTo.Insert;
    for i:=1 to tblFrom.FieldCount-1 do
    begin
      if tblFrom.Fields[i].FieldName = tblTo.Fields[i].FieldName then
        tblTo.Fields[i].Value:=tblFrom.Fields[i].Value;
    end;
    tblTo.Post;
    Result:=True;
  finally
  end;
end;

if CopyRecord(tblOne,tblTwo) then...

これをステップ実行すると、すべての値が From テーブルの「Null」になります。

Post の後、空白のレコードが に追加されますtblTo。すべての値が Null であることは驚くべきことではありません。:)

データのコピーでどこが間違っていますか? コピー機能にはなっていません。

私はこれを数時間行っており、機能させることができません。おそらく、私が見落としている単純なものです。「var」パラメーターを追加して、違いがあるかどうかを確認しましたが、違いはありませんでした。

ところで、両方のファイルの最初のフィールドがAutoInc.

4

1 に答える 1

4

Here is how I would do it:

function CopyRecord(tblFrom, tblTo: TTable; const StartIndex: Integer=0): Boolean;
var
  i: Integer;
  FieldFrom, FieldTo: TField;
begin
  Result := False;
  for i := StartIndex to tblFrom.FieldCount - 1 do
  begin
    FieldFrom := tblFrom.Fields[i];
    FieldTo := tblTo.FindField(FieldFrom.FieldName);
    if Assigned(FieldTo) then
    begin
      FieldTo.Value := FieldFrom.Value;
      Result := True;
    end;
  end;
end;

I would not use tblTo.Insert/tblTo.Post inside the CopyRecord method. but rather use it outside e.g:

tblTwo.Append;
if CopyRecord(tblOne, tblTwo, 1) then
  tblTwo.Post
else
  tblTwo.Cancel;

This could be re-used also in Edit mode.

于 2013-03-17T22:33:49.793 に答える