データベースの勉強をしている所でつまずいてしまったので、質問させて下さい。
begin
Table1.Open;
Table1.Append;
Table1.FieldByName('Title').AsString := DBEdit1.Text;
Table1.FieldByName('Comment').AsString := DBEdit2.Text;
Table1.Post;
end;
という形で、自分で入力したタイトルとコメントをデータベース(Paradox)に登録し、
procedure TForm1.Button1Click(Sender: TObject);
begin
Table1.Open;
if DBEdit3.Field.AsString = Table1.FieldByName('Title').AsString then
begin
DBEdit4.Text := Table1.FieldByName('Comment').AsString;
end
else
Application.MessageBox('登録内容はありません','エラー',MB_OK + MB_ICONEXCLAMATION);
end;
タイトルを入力し、ボタンを押せばそのタイトルと一致して登録されているコメントが表示され、登録されていなかったら「登録内容はありません」というメッセージを表示するという風にしたいのですが、これではうまく行きませんでした。
if文でタイトルと一致するものを探すやり方が悪いと思うのですが、アドバイスして頂ければ幸いです。
よろしくお願いします。
自己レスですいません。 最初に書き込んでから色々調べてみてできました。
procedure TForm1.ButtonClick(Sender: TObject);
begin
Table1.Open;
Table1.First;
while not Table1.Eof do
begin
if DBEdit3.Text = Table1.FieldByName('Title').AsString then
begin
DBEdit4.Text := Table1.FieldByName('Comment').AsString;
break;
end;
Table1.Next;
end;
if DBEdit4.Text = '' then
Application.MessageBox('登録内容はありません','エラー',MB_OK + MB_ICONEXCLAMATION);
end;
if文をおかしな使い方していますが、他の初心者の方の参考になれば幸いです。
お騒がせしてすいませんでした。
解決しておられるようですが、参考になれば...
【Edit1.Textに検索したいタイトル名】
if Table1.FindKey([Edit1.Text]) then
begin
//見つかったときの処理
end
else begin
//見つからなかったときの処理
end;
または
Table1.SetKey;
Table1.FieldByName('Title').AsString := Edit1.Text;
if Table1.GotoKey then
begin
//見つかったときの処理
end
else begin
//見つからなかったときの処理
end;
>kazuさん
返事が遅くなって申し訳ありません。レスありがとうございます。
両方試してみたのですが、FindKeyの方では「'Edit1に入力した文字'は項目'Tableのキー項目'に適した整数値ではありません」というエラーが出てしまいます。
プログラミングバイブルDelphi4(Delphi6でやっているのでバージョンがあっていませんが)を参考にして、TableコンポーネントのIndexFieldNamesプロパティに適切な値を設定する必要があると書いてあったので、そこにTableのキー項目を設定したのですが、やはりうまく行きませんでした。
SetKeyの方では「項目'Title'にはインデックスが無く変更できません」というエラーが出てしまいます。
設定するプロパティが間違っているのでしょうか?インデックスの設定が間違っているのでしょうか?
よろしかったらアドバイスお願いします。
すいません、追加します。
FindKeyメソッド、SetKeyメソッドはインデックスを適切に設定されていればという条件なので、インデックスがなければLocateメソッドを使えば良いと書いてあったので、試してたらこちらでできました。
ただ、例えば「Delphi6」とデータベースに入れておいて、「Delphi」と検索しても、完全に一致していないので検索にかかってくれません。
これはFindNearestメソッドを使えばよいのでしょうか? SQLのLikeを使えばできると書いてあったので、そちらの方も試してみたいのですが、このやり方も勉強してみたいので、よろしければアドバイスお願いします。
>FindKeyメソッド、SetKeyメソッドはインデックスを適切に設定されて
>いればという条件なので、インデックスがなければLocateメソッドを
>使えば良いと書いてあったので、試してたらこちらでできました
どちらにしても、検索を行われるのがわかっているのならインデックスは
必要ですね。
>ただ、例えば「Delphi6」とデータベースに入れておいて、「Delphi」と
>検索しても、完全に一致していないので検索にかかってくれません。
>これはFindNearestメソッドを使えばよいのでしょうか?
そうですね。それでもインデックスは必要です。
>SQLのLikeを使えばできると書いてあったので、そちらの方も試してみたい
>のですが、
SQLはTQueryを使わなければならなかったと思いますが。
私は(仕事で)DBやるときは、ACCESSかPerl+DBMS(MySQLとか)なので、
SQLをたたくほうが好きですが...
データベースはアプリを作るよりも、設計の方が難しいです。(^^;
>kazuさん
レスありがとうございました。
まずインデックスの設定を調べて、試してみたいと思います。
今回はTableのみでやっているので、SQLも勉強してTQueryも使うようにしてみたいと思います。 ありがとうございました!