動的に作成したMaskEditのTextをDBへ登録する際のエラーについて

解決


サンプー  2006-12-21 19:02:13  No: 24328

DL6Pro,Xp、DBはInterBaseを利用、IBDataSetを利用しています
Tag等を利用して固有の名前を付けたMsakEdit,CheckBox,LabeledEditを動的に作成し、各項目に入力後、データを更新するため、以下のコードを作成しました。
試行錯誤の結果、以下のコードで、最終的には期待どうりの結果は得られたのですが、何故、DBに書き込む前にMaskEdit LabeledEditコンポーネントのTextの値を以下のように変換する必要があるのか理解できません。
S1,S2の値をTmaskEdit(Find・・・・)で直接置き換えるとアドレス違反のエラーが発生します。
よろしくお願いします。

procedure TFrmIndSchedule.Button3Click(Sender: TObject);
 var I : Integer ;
     S,S1,S2 : String;
     const ItemName = 'Item';         //LabeledEdit共通部の名称
     const DonDayName = 'DonDay' ;    //MaskEdit共通部の名称
     Const DonCheckSche = 'CBDon';    //CheckBox共通部の名称
 begin
  for I := 0 to ItemNum -1 do    //ItemNumは動的に作成したコンポーネントの数
   begin
       case TCheckBox(FindComponent(DonCheckSche + IntToStr(I))).state of
         cbUnchecked :
           S := '0';
         cbChecked :
           S := '1';
       end;
    S1 := TLabeledEdit(FindComponent(ItemName + IntToStr(I))).Text;
    S2 := TMaskEdit(FindComponent(DonDayName + IntToStr(I))).Text;

    with DMAnshin.IBDSetScheduleMas do
     begin
      Locate('DoId',HSLDoId.Strings[I],[loCaseInsensitive]);
      Edit;
      FieldByName('DonDay').AsString := S1;    //この部分へ上のコードTLabeledEdit(FindComponent(ItemName + IntToStr(I))).Textを直接記入するとエラーとなる。TLabeledEditも同様
      FieldByName('CheckedDay').AsString := S2;
      FieldByName('DonCheck').AsString := S;
      Post;
     end;
   end;
  if Application.MessageBox('変更を保存しますか?','変更登録確認',MB_OKCANCEL,) = MB_OK then
   DMAnshin.IBDBKanri.ApplyUpdates([DMAnshin.IBDSetScheduleMas]);
end;


to-ya  2006-12-21 22:02:52  No: 24329

for I := 0 to ItemNum -1 do    //ItemNumは動的に作成したコンポーネントの数
   begin
       case TCheckBox(FindComponent(DonCheckSche + IntToStr(I))).state of
         cbUnchecked :
           S := '0';
         cbChecked :
           S := '1';
       end;
>>    S1 := TLabeledEdit(FindComponent(ItemName + IntToStr(I))).Text;
>>    S2 := TMaskEdit(FindComponent(DonDayName + IntToStr(I))).Text;

この二つが  for I := 0 to ItemNum -1 do    の外に出ているため、
IntToStr(I)が取得できていないと思われます。
したがって、TMaskEdit('DonDay')を探してしまい、コントロールがないと怒られているのではないでしょうか


to-ya  2006-12-21 22:03:58  No: 24330

あいや勘違い失礼しました(汗)


りっきぃ  2006-12-22 00:41:22  No: 24331

with 文の中でFindComponentメソッドを叩いているからデバッガは
DMAnshin.IBDSetScheduleMas.FindComponent(〜)を実行していることになります。
TFrmIndSchedule.FindComponent(Self.FindComponentでもいいかな?)と記述すれば大丈夫だと思います。


サンプー  2006-12-22 01:16:34  No: 24332

to-yaさん りっきぃさんありがとうございました
 りっきぃさんのご助言どうりのようです。
 有難うございました


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加