名前 題名 ▼ Syakeさん > おはようございますマスター(こんばんはかな) > > 色々見直してみました。 > 今までで問題なかったパターンと、今回問題になったパターンを > 比べてみました。 > > //問題なく処理されるパターン: > 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を使いまくり、判断、参照、値の入れ替え > //何でもござれ状態でした。 > これがいけなかったのかな。 > > マスターの言われるとおり、ローカル変数が安心ですね。 > > 以上、見直した結果報告のゴミレスです。 > GIF,JPEG,PNG画像ファイル及びLZH,ZIPファイルをアップロードできます.600 x 1200 ピクセルを超える画像は縮小表示されます(画像クリックで拡大表示). (上限122000(120k)バイト) 削除キー Link