Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да попълните автоматично няколко таблици с DBEdit

Надявам се, че разбрах какво искате, като се имат предвид структурите на таблиците, показани на екранната ви снимка.

Кодът по-долу показва как да настроите DBLookUPComboBox за показване на град за избор за даден човек в таблица с хора. Използвах TClientDataSets, така че да е самостоятелен, така че цялата настройка да се извършва в код, а не чрез настройки на свойства в Инспектора на обекти.

Очевидно DBGrid и dbNavigator са свързани към източника на данни dsPerson.

Код

  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;

Обърнете внимание, че вместо (или както) да използвате DBLookUpComboBox, можете също да дефинирате поле за търсене в набора от данни на cdsPerson, като добавите кода по-долу преди извикването на cdsPerson.CreateDataSet. Ако го направите, cdsPerson ще има допълнителна колона CityName. Това ще се покаже в DBGrid – може да се наложи да го превъртите надясно, за да го видите – и ако щракнете върху една от клетките на CityName, ще видите, че активира падащ списък на място, от който даден град може бъдете избрани така

Когато изберете друго име на град, идентификаторът на града в записа на лицето се актуализира автоматично.

  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';

Ако разбрах правилно вашия коментар, опитайте това:

  • добавете втори DBGrid и DBNavigator и DBEdit към формуляра.

  • задайте всичките им източници на данни на dsCity и задайте DataField на DBEdit на CityName.

След това можете да добавите нов град към таблицата City и да посочите неговия CityID (в мрежата) и CityName (в мрежата или DBEdit). Забележете, че веднага след като го запишете с помощта на втория DBNavigator, можете да щракнете върху клетката CityName в мрежата на Person и новото CityName ще бъде в падащия списък. Ако искате да направите тази редакция на текущия запис от таблицата Person, можете да направите това, като добавите манипулатор на събитие AfterPost към таблицата City и добавите код към нея по следния начин:

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. Как да накарам SQLAlchemy да вмъкне правилно уникод многоточие в mySQL таблица?

  2. изтегляне на RDS моментна снимка

  3. Топ десет GUI инструмента на MySQL

  4. Работа с пространствени данни с Gorm и MySQL

  5. Knex.js предотвратява ли инжектирането на sql?