Tableの文字列一部置換について

解決


サンプー  2005-04-01 09:37:47  No: 14065

何時も利用させて頂いています。
初歩的な悩みですが、どなたかご教示下さい
DLPro,XP2Pro、BDEで初歩的なデータベースを作成中です
モジュールにTQUERYを配置し、SQLを発行してデータモジュールのONCREATE時にUser3テーブルから、Memo03にあるTEXTをListboxに追加しています。
この、Memo03のTextの一部を変更しようと試みていますが、うまくいきません。コードは、以下の通りに記載しています。どなたか、ご教示願います。
ちなみに、やりたいことは、例えば、User03Tableのmemo03に’今日は快晴’と記載されていたものを’昨日は快晴’と変更したい場合です。
初心者なので、うまく説明できませんが、よろしくお願いします。

procedure TFormSub.Button1Click(Sender: TObject);
 var S1,S2,S3 : String;
 N : Integer;
 begin
 S1 := Edit1.Text;
 S2 := Edit2.Text;
 DMSyaken.User3Table.Active := True;
 DMSyaken.User3Table.Open;
 DMSyakenManager.DMSyaken.User3Table.First;
 for N:= 0 to DMSyaken.User3Table.RecordCount-1 do
 begin
  DMSyaken.User3Table.Edit;
  S3 := DMSyaken.User3Table.Fields[14].AsString;
  S3 := StringReplace(S3,S1,S2,[rfReplaceAll]);
  DMSyaken.User3Table.FieldByName('Memo03').AsString := S3;
  DMSyakenManager.DMSyaken.User3Table.Post;
  DMSyaken.User3Table.Next;
 end;
  DMSyaken.User3Table.Close;
 end;


HOta  2005-04-01 16:19:47  No: 14066

DMSyaken.User3Table.Edit;
  S3 := DMSyaken.User3Table.Fields[14].AsString;
                            ~~~~~~~~~~~なぜ?
  S3 := StringReplace(S3,S1,S2,[rfReplaceAll]);
  DMSyaken.User3Table.FieldByName('Memo03').AsString := S3;
  DMSyakenManager.DMSyaken.User3Table.Post;
         ~~~~~~~~?
  DMSyaken.User3Table.Next;
違うテーブルをPostしていませんか?
 DMSyaken.User3Table.Active := True;
 DMSyaken.User3Table.Open;
もおかしい。2度開けないと思いますが?


サンプー  2005-04-01 19:51:00  No: 14067

OHta様  いつも速いレス有難うございます
UserTable3.Fields[14]は、UserTable3のインデックス14に変更する目的とするフィルドがあります。その意味です。詳しく説明すると
UserTable3は
項目名  名前  住所・・・・・・・・memo03・・・・・
        あ    東京  ・・・・・・・今日は快晴・・・・
        い    大阪  ・・・・・・・今日は曇り・・・
といった、テーブルになっています。
別のフォームにEdit1,Edit2,Button1,ListBoxを配置してあります。
Edit1には、TQueryを利用して、変更する語句のリストを作成してあり、リスト項目をクリックするとEdit1に項目が入るようにしています。
Edit2に変更後の語句を記入し、button1を押すとUserTable3のMemo03項目の値を変更するようなコードを記載する目的で上記コードを記載したのですが、変更できません。

>DMSyaken.User3Table.Active := True;
> DMSyaken.User3Table.Open;
もおかしい。2度開けないと思いますが?
1行削除しました

 >DMSyakenManager.DMSyaken.User3Table.Post;
  DMSyaken.User3Table.Post;
に変更しました。
結果は、同じです


HOta  2005-04-01 20:19:58  No: 14068

S3の内容は、希望通りに変更できていますか?


サンプー  2005-04-07 09:30:00  No: 14069

データベースの考え方を誤解していたようです。
何とか、下記のコードで期待どうりの結果が得られました。

procedure TFormSub.Button1Click(Sender: TObject);
 var S1,S2,S3,S4 : String;
 begin
 try
 DMSyaken.User3Table.DisableControls;
 DMSyaken.User3Table.Close ;
 S1 := Edit1.Text;
 S2 := Edit2.Text;
 DMSyaken.User3Table.Exclusive := False;
 DMSyaken.User3Table.Open ;
 DMSyaken.User3Table.First;
 while not DMSyaken.User3Table.Eof do
 begin
  DMSyaken.User3Table.Edit;
 if DMSyaken.User3Table.FieldByName('Memo03').Text <> '' then
  begin
   S3 := DMSyaken.User3Table.FieldbyName('Memo03').AsString;
   S4 := StringReplace(S3,S1,S2,[rfReplaceAll]);
   DMSyaken.User3Table.FieldByName('Memo03').Text := S4;
  DMSyaken.User3Table.Post;

  DMSyaken.User3Table.Next;

   end
  else
   DMSyaken.User3Table.Next;
 end;
    DMSyaken.User3Table.ApplyUpdates;
  finally
    DMSyaken.User3Table.EnableControls;
  end;
  ShowMessage('変更が修了しました');
 end;


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

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






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