Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Компонент по работе с ADO 
:(
    Опции темы
namervasek
Дата 12.5.2009, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 3.12.2007

Репутация: нет
Всего: нет



Всем привет! Помогите пожалуста! Нужно написать компонент по отбражению содержимого таблиц аксес. Компонет должен иметь свойство- имя бд(оно должно выбираться путем стандарного открытия через opendialog скажем) и свойство-имя таблицы(соответсвено имя таблицы вывбраной бд). 

В рантайме даныные отбражаются нормально тоесть ямогу выбирать дюбую бд и любую таблицу. Но в дизигнтайме так здеалть неполучается, имется ввиду что я хочу сделать так же как при обычном размещение ADOconnection ADOtable ADodatasurse и DBgride(тоесть что бы я мог менять свойств в инспекторе и сразу видеть резулятат). У меня получилось сделать редактор свойст для получения файла бд. И дальше продвинутся не получется.   smile 


После  поисков по инету посетила такая мысля... Что редактор на 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
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0382 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.