Шустрый

Профиль
Группа: Участник
Сообщений: 54
Регистрация: 3.12.2007
Репутация: нет Всего: нет
|
Всем привет! Помогите пожалуста! Нужно написать компонент по отбражению содержимого таблиц аксес. Компонет должен иметь свойство- имя бд(оно должно выбираться путем стандарного открытия через opendialog скажем) и свойство-имя таблицы(соответсвено имя таблицы вывбраной бд). В рантайме даныные отбражаются нормально тоесть ямогу выбирать дюбую бд и любую таблицу. Но в дизигнтайме так здеалть неполучается, имется ввиду что я хочу сделать так же как при обычном размещение ADOconnection ADOtable ADodatasurse и DBgride(тоесть что бы я мог менять свойств в инспекторе и сразу видеть резулятат). У меня получилось сделать редактор свойст для получения файла бд. И дальше продвинутся не получется. После поисков по инету посетила такая мысля... Что редактор на Tabls стоит разместить в том же модуле что и DBname(так получится что я смогу сразу изменить свойство Tabls) Тость как заполнить их я примерно понял. Но не мне не понятно как сделать так чтоб при выборе определеной таблици в Tabls(естествено уже после выбора DBname) срузу отбразились даные в Grid-е в дезигн тайм. Как я выще уже писал при звязки компонентов ADOconnection ADOtable ADodatasurse и DBgrid при изменение поля ADOtable.Tablename, DBgrid отбражает имено тут таблицу которая в ADOtable.Tablename. Вот такое же эфект я пытаюсь реализовать. Подскажите пожалуста как это реализовать (теорией или кодом, хоть как нибуть) | Код |
unit grcom;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, DBgrids, ADODB, DB;
type TTabName= set of (s,c,g);
TDBFilename = type string;
tgrcom = class(TCustomControl) private FDBname:TDBFilename; FTabls:TStringlist; procedure ConnectADO(var Con:TADOConnection;var Tab:TADOTable;var Data:TDataSource;var Grid:TDBGrid;var cmbox1,cmbox2:Tcombobox); protected btn:TButton; cmbox1,cmbox2:Tcombobox; Rabut1,Rabut2:TRadioButton; Connect:TADOConnection; namefile:TLabel; dilalog:TOpenDialog; procedure BtnClick(Sender:TObject); procedure cmbox1change(Sender:TObject); procedure Paint; override; public Table:TADOTable; Sourse:TDataSource; Grid:TDBGrid; constructor Create(AOwner:TComponent);override; destructor Destory; published property DBname:TDBFilename read FDBname write FDBname; property Tabls:TStringlist read FTabls write FTabls ; end;
procedure Register;
implementation
procedure Register; begin RegisterComponents('GGG', [tgrcom]); end;
{ tgrcom }
procedure tgrcom.BtnClick(Sender: TObject); var Filename:string; begin PromptForFileName(Filename, 'Acccec 2003|*.mdb|Acccec 2007 |*.accdb|DB files | *.mdb;*.accdb', '', 'Âûáåðèòå âàøó ÁÄ', 'C:\', False); FDBname:=Filename; namefile.Caption:=ExtractFileName(FDBname); if FDBname<>'' then ConnectADO(Connect,Table,Sourse,Grid,cmbox1,cmbox2); end;
procedure tgrcom.cmbox1change(Sender: TObject); begin Table.Active:=false; Table.TableName:=cmbox1.Text; Table.Active:=true;
Table.GetFieldNames(cmbox2.Items); cmbox2.Text:=cmbox2.Items[0];
Rabut1.Checked:=true; end;
procedure tgrcom.ConnectADO(var Con: TADOConnection; var Tab: TADOTable; var Data: TDataSource; var Grid: TDBGrid;var cmbox1,cmbox2:Tcombobox); begin con.Connected:=false; con.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+FDBname+';Persist Security Info=False'; con.LoginPrompt:=false; con.Connected:=true;
con.GetTableNames(cmbox1.Items,false); cmbox1.Text:=cmbox1.Items[0];
Tab.Connection:=con; Tab.TableName:=cmbox1.Items[0]; Tab.Active:=true;
Tab.GetFieldNames(cmbox2.Items); cmbox2.Text:=cmbox2.Items[0];
Rabut1.Checked:=true;
Sourse.DataSet:=Tab;
Grid.DataSource:=sourse; end;
constructor tgrcom.Create(AOwner: TComponent); begin inherited create(AOwner); SetBounds(0, 0, 451, 211);
btn:=tbutton.Create(self); btn.Parent:=self; btn.SetBounds(10,10,80,21); btn.Caption:='Îòêðûòü ÁÄ'; btn.Name:='ok'; btn.OnClick:=btnclick;
namefile:=TLabel.Create(self); namefile.Parent:=self; namefile.SetBounds(300,12,120,21); if FDBname<>'' then namefile.Caption:=ExtractFileName(FDBname) else namefile.Caption:='Áàçà íåâûáðàíà';
cmbox1:=Tcombobox.Create(self); cmbox1.Parent:=self; cmbox1.Text:=''; cmbox1.SetBounds(100,10,170,21); cmbox1.OnChange:=cmbox1change;
cmbox2:=Tcombobox.Create(self); cmbox2.Parent:=self; cmbox2.Text:=''; cmbox2.SetBounds(10,41,150,21);
Rabut1:=TRadioButton.Create(self); Rabut1.Parent:=self; Rabut1.Caption:='Ïî âîçðàñòàíèþ'; Rabut1.SetBounds(200,40,110,21); Rabut1.Checked:=true;
Rabut2:=TRadioButton.Create(self); Rabut2.Parent:=self; Rabut2.Caption:='Ïî óáûâàíèþ'; Rabut2.SetBounds(320,40,110,21);
Connect:=TADOConnection.Create(self); Table:=TADOTable.Create(self); Sourse:=TDataSource.Create(self); Sourse.DataSet:=Table;
Grid:=TDBGrid.Create(self); grid.Parent:=self; grid.SetBounds(10,70,430,130); end;
destructor tgrcom.Destory; begin inherited; end;
procedure tgrcom.Paint; begin Canvas.Lock; Try inherited Paint; Canvas.Pen.Color:=clbtnhighlight; Canvas.MoveTo(0,0); Canvas.LineTo(0,ClientRect.Bottom-1); Canvas.MoveTo(0,0); Canvas.LineTo(ClientRect.Right-1,0);
Canvas.Pen.Color:=cl3ddkshadow; Canvas.MoveTo(ClientRect.Right-1,ClientRect.Bottom); Canvas.LineTo(ClientRect.Right-1,-1); Canvas.MoveTo(ClientRect.Right,ClientRect.Bottom-1); Canvas.LineTo(-1,ClientRect.Bottom-1);
finally Canvas.UnLock; end; end;
end.
|
Код: редактора свойст | Код | unit pro;
interface
uses DesignIntf,DesignEditors,Classes,Messages; const WM_MyMessagee = WM_USER+1000; type
Tmepro = class(TPropertyEditor) private public procedure Edit; override; function GetAttributes: TPropertyAttributes; override; function GetValue:string; override; procedure SetValue(const Value:string); override;
end;
procedure Register;
implementation
uses GrCom, SysUtils, Dialogs;
procedure Register; begin RegisterPropertyEditor(Typeinfo(TDBFilename),NIl,'',Tmepro); end;
{ Tmepro }
procedure Tmepro.Edit; var Filename,a:string; begin PromptForFileName(Filename, 'Acccec 2003|*.mdb|Acccec 2007 |*.accdb|DB files | *.mdb;*.accdb', '', '???????? ???? ??', 'C:\', False); Value:=Filename; end;
function Tmepro.GetAttributes: TPropertyAttributes; begin result:=[padialog] end;
function Tmepro.GetValue: string; begin result:=GetStrValue; end;
procedure Tmepro.SetValue(const Value: string); begin SetStrValue(value); end;
end.
|
Это сообщение отредактировал(а) namervasek - 13.5.2009, 13:59
|