Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Cara Melengkapi Otomatis beberapa Tabel dengan DBEdit

Saya harap saya mengerti apa yang Anda minta, mengingat struktur tabel yang ditampilkan di tangkapan layar Anda.

Kode di bawah ini menunjukkan cara menyiapkan DBLookUPComboBox untuk menampilkan kota yang akan dipilih untuk orang tertentu dalam tabel orang. Saya telah menggunakan TClientDataSets sehingga mandiri dan sehingga seluruh pengaturan dilakukan dalam kode daripada dengan pengaturan properti di Object Inspector.

Jelas, DBGrid dan dbNavigator terhubung ke sumber data dsPerson.

Kode

  TForm1 = class(TForm)
    cdsCity: TClientDataSet;
    cdsPerson: TClientDataSet;
    dsPerson: TDataSource;
    DBGrid1: TDBGrid;
    DBLookupComboBox1: TDBLookupComboBox;
    dsCity: TDataSource;
    DBNavigator1: TDBNavigator;
    procedure FormCreate(Sender: TObject);
  end;
  [...]
  procedure TForm1.FormCreate(Sender: TObject);
  var
    Field : TField;
  begin

    Field := TIntegerField.Create(Self);
    Field.FieldName := 'CityId';
    Field.DataSet := cdsCity;

    Field := TStringField.Create(Self);
    Field.FieldName := 'City';
    Field.Size := 40;
    Field.DataSet := cdsCity;

    cdsCity.CreateDataSet;
    cdsCity.InsertRecord([3, 'Moscow']);
    cdsCity.InsertRecord([4, 'Leningrad']);

    Field := TIntegerField.Create(Self);
    Field.FieldName := 'PersonId';
    Field.DataSet := cdsPerson;

    Field := TIntegerField.Create(Self);
    Field.FieldName := 'CityID';
    Field.DataSet := cdsPerson;

    Field := TStringField.Create(Self);
    Field.FieldName := 'Name';
    Field.Size := 40;
    Field.DataSet := cdsPerson;
    cdsPerson.CreateDataSet;

    cdsPerson.InsertRecord([1, 4, 'Ivan']);
    cdsPerson.InsertRecord([2, 3, 'Kate']);

    DBLookupComboBox1.DataField := 'CityID';
    DBLookupComboBox1.DataSource := dsPerson;
    DBLookupComboBox1.KeyField := 'CityID';
    DBLookupComboBox1.ListField := 'City';
    DBLookupComboBox1.ListSource := dsCity;

  end;

Perhatikan bahwa alih-alih (atau juga) menggunakan DBLookUpComboBox, Anda juga dapat menentukan bidang pencarian di kumpulan data cdsPerson, dengan menambahkan kode di bawah ini sebelum panggilan ke cdsPerson.CreateDataSet. Jika Anda melakukannya, cdsPerson akan memiliki kolom tambahan, CityName,. Ini akan ditampilkan di DBGrid - Anda mungkin perlu menggulirnya ke kanan untuk melihatnya - dan jika Anda mengklik salah satu sel CityName, Anda akan melihat bahwa itu mengaktifkan daftar drop-down di tempat dari mana sebuah kota dapat dipilih, seperti itu

Saat Anda memilih Nama Kota yang berbeda, ID Kota di catatan Orang akan diperbarui secara otomatis.

  Field := TStringField.Create(Self);
  Field.FieldName := 'CityName';
  Field.Size := 40;
  Field.DataSet := cdsPerson;
  Field.FieldKind := fklookUp;
  Field.LookUpDataSet := cdsCity;
  Field.LookUpKeyFields := 'CityID';
  Field.LookupResultField := 'CityName';
  Field.KeyFields := 'CityID';

Jika saya telah memahami komentar Anda dengan benar, coba ini:

  • tambahkan DBGrid dan DBNavigator kedua dan DBEdit ke formulir.

  • setel semua sumber datanya ke dsCity dan setel DataField DBEdit ke CityName.

Anda kemudian dapat menambahkan Kota baru ke tabel Kota dan menentukan ID Kota (dalam kisi) dan Nama Kota (dalam kisi atau DBEdit). Perhatikan bahwa segera setelah Anda menyimpannya menggunakan DBNavigator kedua, Anda kemudian dapat mengklik sel CityName dari grid Person dan CityName baru akan berada di daftar drop-down. Jika Anda ingin melakukan pengeditan ini pada rekaman saat ini dari tabel Person, Anda dapat melakukannya dengan menambahkan event handler AfterPost pada tabel City dan menambahkan kode seperti ini:

procedure TForm1.cdsCityAfterPost(DataSet : TDataSet);
begin
  cdsPerson.Edit;
  try
    cdsPerson.FieldByName('CityId').AsInteger := DataSet.FieldByName('CityId').AsInteger;
  finally
    cdsPerson.Post;
  end;
end;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara mengimpor dan mengekspor database MySQL

  2. Replikasi/sinkronisasi db Firebird lokal ke db online

  3. Aktifkan koneksi MySQL jarak jauh:ERROR 1045 (28000):Akses ditolak untuk pengguna

  4. Panggil pendorong ketika mysql telah berubah

  5. MySQL:Mengetik NULL ke 0