電話番号での顧客管理帳を考えています。
[電話番号] [名前] [住所]
・ ・ ・
・ ・ ・
・ ・ ・
こんな感じのDBGridです。電話番号Fieldを集合体にして新規登録の要否をinでチェックしたいのですがどうすればいいか教えて下さい。よろしくお願いします。
「電話番号Fieldを集合体」とは何のことでしょうか?
レコードを追加変更の場合は、データーベースに行うことです。TDBGridは表示する機能ですから、TDataSet側で検査して判断すれば良いでしょう。
HOtaさん早速のレスありがとうございます。
初心者なのでごめんなさい。「電話番号Fieldをソートしてその後各電話番号をStrToIntしてある集合型を作成」できれば、電話番号をキーワードinを使って登録済みかどうかをチェックでき、追記の要否を判定処理できるのではと考えたものですから投稿してみました。よろしくお願いします。
新規登録か、更新かは、対象テーブルをキーで検索すれば、判断できます。
一般的なデーターベースなら、
TQueryのSQL文に
Select *
From 対象テーブル名
Where 電話番号 = :電話番号
としておいて、
Query1.ParamByName('電話番号').asinteger := StrToInt(電話番号);
Query1.Open;
if Query1.Eof then
更新処理
else
新規登録処理;
となります。
「電話番号Fieldをソートしてその後各電話番号をStrToIntしてある集合型を作成」はデーターベースの機能ですから、そちらに任せます。
HOtaさんありがとうございます。TQueryは使っていません。
TClientDataSet -> TDataSouce -> TDBGrid
|
cust.XML
の構成ではダメですか?
あっ。TDbGridを使っているんですね。ここで入力するときに、データーは登録されていませんか?
XMLはデーターベースとなりますから、同じ扱いでいけると思います。
HOtaさんいろいろとアドバイスありがとうございました。
項目のソートもできDBGridでの表示もOKでした。
集合型は256までとゆうことも改めて再確認です。データは約7万ありますので他の方法でトライします。
ほんとうにありがとうございました。
集合型の意味は、どのようになっていますか?XMLでも、データーベースと同じように扱えますから、項目数が256でレコード数は問題ないと思います。
function TelNumberCheck(TelNo: String): Boolean;
begin
Result := True;
ClientDataSet.First;
While not ClientDataSet.Eof do
begin
if TelNo = ClientDataSet.FieldByName('電話番号').AsString Then
begin
・
・
Result := False;
break;
end else
begin
・
・
ClientDataSet.Next;
end;
end;
end;
のような関数を作成して追加の可否を判別してOK,Running Testしていますが今のところ正常動作しています。なにかありましたら書込みしますのでよろしくお願いします。
ClientDataSetのLocateを使った方が早いと思います。
if ClientDataSet.Locate('電話番号',VarArrayOf([TelNo]),[]) then
begin
//登録済みの場合の処理
end
else
begin
//未登録の場合の処理
end;
HOtaさん度々のアドバイスありがとうございます。
早速 functionを使っているところをClientDataSet.Locateに置き換えてRUNしてみました。OKです。こちらの方がよさそうです。ありがとうございました。
せっかくClientDataSetを使用しているので、ApplyUpdatesで自動更新できます。ループしていちいち更新の確認するのは効率がちょっと悪いかも。
例:
if ClientDataSet1.ChangeCount>0 then
ClientDataSet1.ApplyUpdates(-1);
ツイート | ![]() |