Вопрос

Я ищу способ предоставления списков в TDBlookupCombobobox в Delphi, не имея фактической таблицы на сервере базы данных для рисования этого списка. Datafield для Combo Box - это поле 1 символа, которое содержит кодированное значение, такое как «A '=' Driversiversianceence», «B '=' Passport ',' C '=' Библиотека 'и т. Д. То, что таблица содержит только A, B или C. Приложение отвечает за отображение «водителей лицензии» в GUI. Обычно база данных может иметь таблицу посмотреть вверх, но эта база данных не и не могу добавить ее. Моя идея состоит в том, что DataSource и Listsource для контроля поиска БД не должны быть одной базой данных, поэтому, если бы можно было определить небольшой стол в моей форме, которая содержит данные о поисках, то я мог бы использовать это не требует настоящей таблицы базы данных.

Кто-нибудь знает о компонент Delphi, который позволяет определить TDataset в форме, не имея никаких фактических файлов данных за ним?

Это было полезно?

Решение

Альтернативное решение состоит в том, чтобы использовать TCOMBOBOX, а не TDBlookupCombobox. Используйте TDIctionar, чтобы определить простой в поисках памяти.

type
  TMyForm = class(TForm)
    MyComboBox: TComboBox;
    MyDataset: TSimpleDataSet;
    procedure MyComboBoxChange(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    ComboLookup: TDictionary<string, Char>;
  end;

implementation

{$R *.dfm}

procedure TMyForm.FormCreate(Sender: TObject);
var
  Key: string;
begin
  ComboLookup := TDictionary<string, Char>.Create;
  ComboLookup.Add('Drivers License', 'A');
  ComboLookup.Add('Passport', 'B');
  ComboLookup.Add('Library Card', 'C');
  for Key in ComboLookup.Keys do
  begin
    MyComboBox.Items.Add(Key);
  end;
end;

procedure TMyForm.MyComboBoxChange(Sender: TObject);
begin
  // This may be wrong didn't bother to look
  //up the correct way to change a field's value in code.
  MyDataset.Fields.FieldByName('IDCard').AsString := ComboLookup[MyComboBox.Text];
end;

Вы можете использовать TCombobox.items.AddObject вместо отдельной таблицы поиска, но вам придется создать класс обертки для хранения символа в качестве TOBJECT или использовать CHR для преобразования его в целое число, а затем отбрасываю его на TOBJECT, но вышеупомянутое проще на мой взгляд.

Другие советы

Я знаю, что есть разные в памяти набор данных. Delphi поставляется с TClientDataset, который вы можете использовать, как вы хотите. Вы должны развернуть MIDAS.DLL с вашим исполняемым для работы, или вы должны включать в себя пункт MidAslib в вашем использовании, чтобы статистически связать эту библиотеку в исполняемом файле (не требуется при выполнении MIDAS.DLL).

Чтобы получить то, что вы хотите от TClientDataset, вы можете создавать поля и:

  • Храните записи в файле XML (например, с помощью другого вспомогательного инструмента, который вы сделали). При выполнении загрузите данные с помощью метода LoadFromFile TClientDataset. Кроме того, вы можете хранить этот XML в качестве ресурса с руководством $ R и управлять этим ресурсом во время выполнения, чтобы продать свой ClientDataSet с содержанием содержащихся данных, чтобы предотвратить развертывание (и возможное изменение) файла XML с вашим exe.
  • Используйте метод создания и вставьте / заполнить записи с тем, что вы хотите во время выполнения

Образец кода:

procedure TFrom1.Init;
begin
  cdsIDType.CreateDataSet;
  cdsIDType.InsertRecord('A', 'Drivers License');
  cdsIDType.InsertRecord('B', 'Passport');
  //etcetera.
end;

Используйте TCLINEDATATASET и определите поля, затем подключите к источнику данных. В событии ONCREATE из формы делают это: выполните метод создания ClientDataset, а затем заполните его с данными A, B, C.

Если вы используете jvcl, то, что вы хотите, может быть достигнуто без привлечения набора данных. Просто используйте TJVDBCombobox, используйте свойство элементов для установки значений, которые вы хотите отобразить ui, и используйте свойство значений, чтобы установить фактические значения, хранящиеся в базе данных.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top