Вставить TDataSet в форму во время разработки
Я ищу способ предоставить ListSource для TDBLookupComboBox в Delphi без фактической таблицы на сервере базы данных, из которой можно составить этот список. Поле данных для поля со списком представляет собой 1-символьное поле, которое содержит закодированное значение, например "A" = "Водительское удостоверение", "B" = "Паспорт", "C" = "Библиотечная карточка" и т. Д. что таблица содержит только A, B или C. Приложение отвечает за отображение "водительских прав" в графическом интерфейсе. Обычно база данных может иметь справочную таблицу, но в этой базе нет, и я не могу ее добавить. Моя идея состоит в том, что DataSource и ListSource для элемента управления "Просмотр БД" не обязательно должны быть одной и той же базой данных, поэтому, если бы можно было определить небольшую таблицу в моей форме, которая содержит данные поиска, я мог бы использовать это не требует реальной таблицы базы данных.
Кто-нибудь знает о компоненте delphi, который позволяет определять TDataSet в форме без каких-либо фактических файлов данных за ним?
4 ответа
Альтернативным решением является использование TComboBox, а не TDBLookupComboBox. Используйте TDictionary для определения простого поиска в памяти.
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-файлом.
- используйте метод CreateDataSet и вставляйте / заполняйте записи тем, что вы хотите во время выполнения
Пример кода:
procedure TFrom1.Init;
begin
cdsIDType.CreateDataSet;
cdsIDType.InsertRecord('A', 'Drivers License');
cdsIDType.InsertRecord('B', 'Passport');
//etcetera.
end;
Используйте TClientDataset и определите поля, затем подключитесь к источнику данных. В событии oncreate формы выполните следующие действия: выполните метод созданного набора данных из клиентского набора данных, а затем заполните его данными A,B,C.
Если вы используете jvcl, то, что вы хотите, может быть достигнуто без использования набора данных. Просто используйте TjvDBComboBox, используйте свойство Items, чтобы установить значения, которые вы хотите отобразить в пользовательском интерфейсе, и используйте свойство Values, чтобы установить фактические значения, хранящиеся в базе данных.