| おはようございますマスター(こんばんはかな)
 色々見直してみました。
 今までで問題なかったパターンと、今回問題になったパターンを
 比べてみました。
 
 //問題なく処理されるパターン:
 function XXXX(XX:XX):TDynamicArrRecordData;
 var
 i:Integer;
 begin
 ・・・(前処理)
 Result := nil;//必要ないけど書かないと気がすまない。
 ADODataSset1.CommandText := 'xxx';
 Try
 ADODataSet1.Open;
 if ADODataSet1.RecordCount > 0 then
 begin
 SetLength(Result,ADODataSet1.RecordCount);
 for i := 0 to ADODataSet1.RecordCount -1 do
 begin
 ・・・・
 Result[i].fYxxxx := ADODataSet.FieldByName('SSS').AsXxxxx;
 ・・・・
 end;
 end;
 ADODataSet1.Close;
 except
 ・・・(エラー処理)
 Result := nil;
 end;
 end;
 //Resultを条件には使う事はなかった。
 //Resultに再度値を入れなおしはしていなかった。
 これは、今まで問題は無かった。
 
 //エラーを頻発した今回のパターン:
 前述した処理で一旦Resultに値を入れた後
 再度別のデータセットを開いて
 
 if Result <> nil then
 begin
 ・・・(別のデータセットを開く)
 ADODataSet1.Open;
 if ADODataSet1.RecordCount > 0 then
 begin
 for i := 0 to ADODataSet1.RecordCount -1 do
 begin
 for j := 0 to Length(Result) -1 do
 begin
 if Result[j].fXxxx = ADODataSet1.FieldByName('YYYY').AsXxxxx then
 begin
 Result[j].fYxxxx := ADODataSet1.FieldByName('ZZZZ').AsXxxxx;
 end;
 ・・・・
 end;
 end;
 ADODataSet1.Close;
 end;
 
 //今までと異なったところ
 //まあ結果的にResultを使いまくり、判断、参照、値の入れ替え
 //何でもござれ状態でした。
 これがいけなかったのかな。
 
 マスターの言われるとおり、ローカル変数が安心ですね。
 
 以上、見直した結果報告のゴミレスです。
 
 
 
 |