DelphiのTComboBoxについての質問

このQ&Aのポイント
  • DelphiのTComboBoxを使用してSQLの検索結果を格納する際、重複データを避ける方法はあるか
  • DelphiのTComboBoxにSQLの検索結果を追加する際、重複データを防ぐ方法はあるか
  • DelphiのTComboBoxに重複データを格納しない方法はあるか
回答を見る
  • ベストアンサー

Delphi のTComboBoxについて

DelphiのTComboBoxについて質問があります。 SQLを走らせて検索結果をTComboBoxに格納しようと考えています。 例えばTComboBoxのNameをTCMBとしたとして -------------------------------- SQL発行 while 検索データEOF do begin TCMB.add(検索結果); 次のデータ見る(Fetch); end; -------------------------------- と上記のようになります。 しかし検索結果が同じデータがあった場合もTComboBoxに格納してしまいます。 TComboBoxには重複データを格納したくありません。 そこでいい方法というかTComboBoxの特徴(プロパティやらメソッドやら)あります でしょうか? ちなみにSQLはDISTINCTなどは使えず常に同じものを取得するようになっています。

質問者が選んだベストアンサー

  • ベストアンサー
  • honiyon
  • ベストアンサー率37% (331/872)
回答No.1

こんにちは、honiyonです。   色々な方法があると思いますが、簡単なのは IndexOfメソッドを使用する事だと思います。   TCMB.Items.IndexOf('HOGE') とすると、「リスト中に'HOGE'は上から何番目にあるか」の結果を返してくれます。 なければ -1が返ってきます。   これを利用して重複チェックが出来ます。   参考になれば幸いです(..

jyopper
質問者

お礼

できました。ありがとうございました。 またよろしくお願いいたします。

関連するQ&A

  • FirebirdへのDelphiによるデータ入力

    Deldhi2010とFirebird2.5を使っています。 下記のコードでデータを入力しているのですが、実行中の他のプログラムで入力済みのデータが見えません。また、二つのPCで入力していくとTest_Noが二重に登録されます。入力したデータがデータベースに反映されていないように見えます。しかし、表示コードにもトランザクションを適応すると問題は解決しますが、理由がわかりません。ご指導よろしくお願いいたします。 (入力コード) procedure TForm.ButtonRegClick(Sender: TObject); var I:Integer; begin if not TIBTransaction.InTransaction then IBTransaction.StartTransaction; try with TIBQuery do begin Close; SQL.Clear; SQL.Add('select max(Test_No) from TESTDB'); Open; I:=FieldByName('max').AsInteger; // Close; SQL.Clear; SQL.Add('insert into TESTDB (Test_No,TempText) values (:TN,:TT)'); ParamByName('TN').AsInteger:=I+1; ParamByName('TT').AsString:='Test'; ExecSQL; end; IBTransaction.Commit; except IBTransaction.Rollback; ShowMessage('Reg Error !!'); end; (表示コード) with TStringGrid do begin RowCount:=1; Rows[0].Clear; end; with TIBQuery do begin Close; SQL.Clear; SQL.Add('select * from TESTDB order by Test_No'); Open; I:=0; First; while not Eof do begin inc(I); TStringGrid.RowCount:=I; TStringGrid.Cells[0,I-1]:=IntToStr(FieldByName('Test_No').AsInteger); TStringGrid.Cells[1,I-1]:=FieldByName('TempText').AsString; Next; end; end;

  • 複数レコードを1変数にセットするには

    以下、ご回答、よろしくお願いします。 ストプロで、カーソルに格納したレコードを、1変数にセットしたく思います。 (この変数を本文にして、メールをはき出します。) AccessVBAでは -------------------------- Do Until rs.EOF   strBody = strBody & rs!受注コード & ":" & rs!明細コード & vbCrLf   rs.MoveNext Loop -------------------------- とするところを、sqlのストプロで -------------------------- WHILE @@FETCH_STATUS = 0 BEGIN  select @strBody = (@受注コード + @明細コード) + char(13) + char(10)  FETCH NEXT FROM cur_cust  INTO @受注コード, @明細コード end -------------------------- 等としても、1レコード分のデータしか渡りません。(あたり前ですね。) 現在に手詰まりの状態です。 ご教授、よろしくお願いします。

  • 【VB】コンボボックスにデータベースから取り出した値を入れたい

    VB2005です。 表題の通りですがやり方がよくわかりません。 データベースに接続し、 SQLで重複しない値を取り出すところまではできています。 SQL=SELECT DISTINCT FieldName FROM TableName VB6の時はこんなソースでした Do Until rs.EOF    Combo1.AddItem.Fields("FieldName")    rs.MoveNext Loop VB2005ではどう書くのでしょう? よろしくご教授ください。

  • 1つのテーブル・2つの列を結合して1つの検索結果に

    あるテーブルAがあり、そこにINT型の列bと列cがあるとします。 |b|c| |1|2| |1|3| とデータが格納されているとき、ここから[1,2,3]という風に、重複のない結合結果を出すにはどういったSQLを書けば良いでしょうか。 2列だとDISTINCTも使えず、簡単そうなのに自分ではできませんでした。出力後に結合するのでは色々と不都合なことがあったため、この出力が一発で出せれば便利だと思い質問させていただきました。ご回答よろしくお願いいたします。

  • Delphi .net ListBoxで上下キーで移動したい

    Delphi .net WEB版での作成です。 LISTBOXを作成するソースがあります。 --- while 条件 do begin LstBox1.Items.Insert(Row,Text); LstList.Items.Item[Row].value := LstValue; end; --- リストボックスは作成されますが、 上下キーで項目の移動ができません。 この作成をPage_Load の度に行えばできるのですが 作成処理は重いので、作成は1回のみで行いたいです。 どのようにすればよろしいのでしょうか?

  • (Delphi) 例外の再生成について

    例外の再生成のことで質問があります。 Delphi の Ini ファイルを操作するクラス TCustomIniFile には、 ReadDate や ReadFloat といったメソッドがありますが、 このメソッドのソースコードを拝見すると、例外処理を行っている部分で EConvertError 例外以外の時は else 節の raise で同じ例外を再生成しているのですが、 この else 節は無くても同じ気がするのですが、どうしてわざわざ else 節で キャッチした例外を再生成しているのでしょうか? EConvertError 例外以外は例外処理しなければそのままメソッド呼び出し元に伝わりますが、 あえて raise で再生成していることに何か意図はあるのでしょうか? 以下は ReadFloat メソッドのソースコードです。 1 と 2 の部分がなくても結果は同じではないのでしょうか? function TCustomIniFile.ReadFloat(const Section, Name: string; Default: Double): Double; var  FloatStr: string; begin  FloatStr := ReadString(Section, Name, '');  Result := Default;  if FloatStr <> '' then  try   Result := StrToFloat(FloatStr);  except   on EConvertError do    // Ignore EConvertError exceptions   else ←―――――――――――――― 1    raise; ←―――――――――――――― 2  end; end;

  • mysql_fetch_array関数について

    お世話になります。 mysql_fetch_array(結果セット,受け取り配列タイプ) についてなのですが。 たとえばSQLの結果が複数件ある場合。 while($dtRec=mysql_fetch_array("select * from ***",MYSQL_ASSOC){ $result = $dtRec['aaaaa']; } 解説書には一件づつ受け取る結果の配列を 数値による配列で受け取るなら「MYSQL_NUM] フィールド名をキーとした配列で受け取るなら 「MYSQL_ASSOC」を指定、 両方なら「MYSQL_BOTH」を指定すると 書いてあるのですが、配列の意味が分かりません。 $resultにはEOFになるまで毎回、$dtRec['aaaaa'] の内容が格納されるのではないでしょうか? それとも、$resultにexplode関数のように 配列で件数分格納されるのでしょうか? 現在は、自分で配列に格納しようとしているので・・ (うまくいってません) いくら解説書を読んでも、MYSQL_NUM 、MYSQL_ASSOCの意味がよく理解 できません。 宜しくお願い致します。

    • ベストアンサー
    • MySQL
  • 検索したときなにも無かった場合

    プログラム初心者です sqlをselectして結果がなかった場合、mysqli_fetch_assocを使うより先に判定する場合はどうすればいいのでしょうか? if(ここがわかりません){ echo '検索結果がありません'; } while($row = mysqli_fetch_assoc($recordSet)){ print $row['id']; } よろしくお願いします

    • ベストアンサー
    • PHP
  • SQL 複数のテーブルから重複なしでデータを取得

    同じフィールド名[名前]を持つテーブルが複数個あります。 仮にテーブル名を、A、B、C、Dの4個だとします。 それらのテーブルから、フィールド名[名前]のデータを重複なしで取得したいのですが、SQL文が思いつきません。 取得するフィールドは[名前]だけです。 select distinct(名前) from A union select distinct(名前) from B union select distinct(名前) from C union select distinct(名前) from D だと、各表に同じ名前が存在する場合は結果も重複してしまい、期待する結果が得られませんでした。 環境はOracle 9iです。 SQL文を教えてください。よろしくお願いします。

  • accessクエリでのデータ重複について

    お世話になります。 ACCESSクエリにてデータが重複してしまします。 SQL表示にて、SELECTの後、DISTINCTやDISTINCTROWを 加えましたが、それでも重複してしまいます。 何故なのでしょうか。 どなたか良い解決方法をお教え頂きたく宜しくお願い 致します。

専門家に質問してみよう