Kita ingin membuat ComboBox berdasarkan tabel ‘Kategori’ dari database. Bentuk tabelnya adalah sebagai berikut:
| Id | Nama_Kategori |
| 1 | Kategori Utama |
| 2 | Kategori A |
| 3 | Kategori B |
| 4 | Kategori C |
| 5 | Kategori D |
Tugas yang ingin dikerjakan adalah:
- Mengisi ComboBox dengan semua data dari field ‘Nama_Kategori’,
- Saat memilih item di ComboBox, field ‘Id’ yang terkait juga ikut terpilih secara otomatis.
Form diharapkan akan berbentuk seperti berikut:
Variabel yang dibutuhkan sebelum bagian Implementation:
var sComboItemId1 : String; sComboItemName1: String; aComboItemId1 : Array of String;
sComboItemId1 dan sComboItemName1 masing-masing untuk menyimpan ‘Id’ dan ‘Nama_Kategori’ yang kita pilih. aComboItemId1 akan digunakan untuk menampung semua data dari field ‘Id’ dari tabel ‘Kategori’.
Selanjutnya membuat prosedur sebagai berikut, tetapi ada prosedur yang tidak saya uraikan disini seperti SQLCount dan SQLSelect agar menghemat tempat. Silakan ganti kedua prosedur tersebut dengan prosedur anda sendiri.
procedure TfrmJalan.ComboBox1DropDown(Sender: TObject); var i,j : Integer; begin {Menghitung jumlah data. Hasilnya akan disimpan di variabel SQLRowCount} SQLCount('Select Count(id) From Kategori'); {Ambil semua data field 'Id' dan 'Nama_Kategori'} SQLSelect('Select * From Kategori Order By Id'); {Reset / kosongkan array} SetLength(aComboItemId1, 0); {Simpan jumlah baris data ke j} j := SQLRowCount; {Set lebar dynamic array} SetLength(aComboItemId1, j); if j > 0 then begin ComboBox1.Clear; for i := 0 to j - 1 do begin {Simpan 'Id' ke array} aComboItemId1[i] := SQLQuery.FieldValue(0,False); {Simpan 'Nama_Kategori' ke ComboBox} ComboBox1.AddItem(SQLQuery.FieldValue(1,False),Self); SQLQuery.Next; end; end; end;
procedure TfrmJalan.ComboBox1Select(Sender: TObject); var i: Integer; begin {Simpan Item Index dari 'Nama_Kategori' yang kita pilih lewat ComboBox ke i} i := ComboBox1.ItemIndex; {Ambil nilai 'Id' yang disimpan oleh array setelah diketahui array tersebut menyimpan 'Id' di index i} sComboItemId1 := aComboItemId1[i]; {Gunakan prosedur anda sendiri untuk refresh grid} RefreshGrid('Select * From Detail_Kategori'+ 'Where Kategori_ID = '+sComboItemId1); end;
Dulu, pertama kali saya menemukan teknik ini , rasanya sudah seperti expert
Semoga bermanfaat dan silakan kritik sarannya.