Доброе время суток!
У меня возникла одна проблемка, а заключается она в следующем: необходимо создать собственный компонент на основе(TComboBox). В новый компонент должны быть добавлены 2 новых свойства
1 свойство — DataSet_DB — в нем должны на этапе проектирования выводиться все все наборы данных(НД) проекта.
2 свойство — Field_DB — в нем, автоматически после установки значения DataSet_DB, должен выводиться список полей выбранного НД.
И после установки пользователем этих 2-ух свойств в нашем ComboBox-e должен выводиться список значений полей из выбранного НД. В результате получается очень полезный компонент для работы с БД!
Все бы хорошо, но вот в одном месте кода возникает непонятная ошибка!
листинг:
unit comboBox_class;
interface
uses
SysUtils, Classes, QControls, QStdCtrls, Messages,
Windows, Graphics, Forms, Controls, StdCtrls, Dialogs, db;
type
tcomboBox_class = class(TComboBox)
private
{ Private declarations }
FDataEntText: TDataSet;
FFieldEntText: TCOmboBox;
protected
{ Protected declarations }
procedure SetDataEntText(value: TDataSet);
procedure SetFieldEntText(value: TCOmboBox);
public
{ Public declarations }
constructor create(AOwner: TComponent);override;
published
property FIELDS_DB:TCOmboBox read FFieldEntText
write SetFieldEntText;
property DATASET_DB:TDataSet read FDataEntText
write SetDataEntText;
end;
procedure Register;
implementation
Procedure TCombobox_class.SetDataEntText(value: TDataSet);
begin
{------------------------------------------------------}
FDataEntText:=value;
//а дальше 3 варианта и ни один не работает ???
{1 вариант для случая FIELDS_DB:TCOmboBox ???}
{ FDataEntText.GetFieldNames(self.FFieldEntText.Items);}
{2 вариант тоже для случая FIELDS_DB:TCOmboBox ???}
{
while not FDataEntText.Eof;
do
begin
FFieldEntText.Items.Add
( FDataEntText.Fields[0].AsString);
FDataEntText.Next;
end;
end;
}
{3 вариант для случая FIELDS_DB:TStrings (вверху заменить на TStrings ) ???}
//self - по усмотрению
{FDataEntText.GetFieldNames(self.FIELDS_DB);}
//или
{FDataEntText.GetFieldNames(self.FFieldEntText);}
Procedure TCombobox_class.SetFieldEntText(value: TCOmboBox);
begin
FFieldEntText:=value;
FFieldEntText.Clear;
constructor TComboBox_class.create(AOwner: TComponent);
begin
inherited create(AOwner);
// if FDataEntText<>nil then FDataEntText.GetFieldNames(self.items);
end;
procedure Register;
begin
RegisterComponents('Standard', [tcomboBox_class]);
end;
end.
24.08.04 16:12: Перенесено модератором из 'Базы данных' — Merle