何時も利用させて頂いています。
初歩的な悩みですが、どなたかご教示下さい
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;
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度開けないと思いますが?
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;
に変更しました。
結果は、同じです
S3の内容は、希望通りに変更できていますか?
データベースの考え方を誤解していたようです。
何とか、下記のコードで期待どうりの結果が得られました。
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;
ツイート | ![]() |