Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak automatycznie uzupełnić kilka tabel za pomocą DBEdit

Mam nadzieję, że zrozumiałem, o co prosisz, biorąc pod uwagę strukturę tabel pokazanych na zrzucie ekranu.

Poniższy kod pokazuje, jak skonfigurować DBLookUPComboBox do wyświetlania miasta do wybrania dla danej osoby w tabeli osób. Użyłem TClientDataSets, aby był samowystarczalny, a więc całe ustawienie odbywa się w kodzie, a nie przez ustawienia właściwości w Inspektorze obiektów.

Oczywiście DBGrid i dbNavigator są połączone ze źródłem danych dsPerson.

Kod

  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;

Zwróć uwagę, że zamiast (lub nawet) używania DBLookUpComboBox, możesz również zdefiniować pole odnośnika w zestawie danych cdsPerson, dodając poniższy kod przed wywołaniem cdsPerson.CreateDataSet. Jeśli to zrobisz, cdsPerson będzie miał dodatkową kolumnę CityName. Zostanie to wyświetlone w DBGrid — może być konieczne przewinięcie go w prawo, aby go zobaczyć — a jeśli klikniesz jedną z komórek CityName, zobaczysz, że aktywuje to listę rozwijaną, z której miasto może być wybrany, tak jak tak

Po wybraniu innej nazwy miasta identyfikator miasta w rekordzie osoby zostanie automatycznie zaktualizowany.

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

Jeśli dobrze zrozumiałem Twój komentarz, spróbuj tego:

  • dodaj drugi DBGrid i DBNavigator oraz DBEdit do formularza.

  • ustaw wszystkie źródła danych na dsCity i ustaw DataField DBEdit na CityName.

Następnie możesz dodać nowe miasto do tabeli City i określić jego CityID (w siatce) i CityName (w siatce lub DBEdit). Zauważ, że jak tylko zapiszesz go za pomocą drugiego DBNavigator, możesz kliknąć komórkę CityName w siatce Person, a nowa CityName pojawi się na liście rozwijanej. Jeśli chcesz dokonać tej edycji w bieżącym rekordzie tabeli Person, możesz to zrobić, dodając procedurę obsługi zdarzeń AfterPost w tabeli City i dodaj do niej kod w następujący sposób:

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. niezdefiniowany indeks Nazwa

  2. Importuj wiele plików CSV do mysql

  3. Wywołanie funkcji członkowskiej addEagerConstraints() na float LARAVEL

  4. Znaczenie n:m i 1:n w projekcie bazy danych

  5. Jaka jest najlepsza struktura bazy danych do przechowywania danych wielojęzycznych?