Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.03.2016, 17:56   #11
Dvoishnik
Форумчанин
 
Регистрация: 12.02.2011
Сообщений: 808
По умолчанию

пробуйте эту ссылку

П.С, у меня все скачивается нормально и по предыдущей ссылке.
Терпение!Дежурный экстрасенс скоро свяжется с вами!
Dvoishnik вне форума Ответить с цитированием
Старый 28.03.2016, 18:19   #12
OTGB
Форумчанин
 
Аватар для OTGB
 
Регистрация: 06.05.2015
Сообщений: 120
По умолчанию

Ребята можете мне разобрать код? Что за что отвечает? Мне просто интересно.
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, DB, ADODB, Grids, DBGrids;

type
  TForm1 = class(TForm)
    DBGrid1: TDBGrid;
    DBGrid2: TDBGrid;
    ADOConnection1: TADOConnection;
    ADOQuery1: TADOQuery;
    ADOQuery2: TADOQuery;
    DataSource1: TDataSource;
    ComboBox1: TComboBox;
    DataSource2: TDataSource;
    procedure ComboBox1Change(Sender: TObject);
    procedure ADOQuery1AfterScroll(DataSet: TDataSet);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  MyTab : UTF8String;
implementation

{$R *.dfm}

procedure TForm1.ComboBox1Change(Sender: TObject);
begin
 MyTab := Trim(ComboBox1.Text);
 if (MyTab <>'') then
  begin
     with ADOQuery2 do
     begin
       Close;
       SQL.Clear;
       SQL.Add('select * From ' + MyTab + ' where id_prep ='+ intToStr(ADOQuery1.FieldByName('id_prep').AsInteger));
       Open;
     end;
  end;
end;

procedure TForm1.ADOQuery1AfterScroll(DataSet: TDataSet);
begin
if  MyTab<>'' then
with ADOQuery2  do
 BEGIN
   Close;
   SQL.Clear;
   SQL.Add('select * From ' + MyTab + ' where id_prep ='+ intToStr(ADOQuery1.FieldByName('id_prep').AsInteger));
   ExecSQL;
   Open;
 end;
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
 MyTab := Trim(ComboBox1.Text);
with ADOQuery2  do
 BEGIN
   Close;
   SQL.Clear;
   SQL.Add('select * From ' + MyTab + ' where id_prep ='+ intToStr(ADOQuery1.FieldByName('id_prep').AsInteger));
   ExecSQL;
   Open;
 end;
end;

end.
OTGB вне форума Ответить с цитированием
Старый 28.03.2016, 18:32   #13
Dvoishnik
Форумчанин
 
Регистрация: 12.02.2011
Сообщений: 808
По умолчанию

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, DB, ADODB, Grids, DBGrids;

type
  TForm1 = class(TForm)
    DBGrid1: TDBGrid;
    DBGrid2: TDBGrid;
    ADOConnection1: TADOConnection;
    ADOQuery1: TADOQuery;
    ADOQuery2: TADOQuery;
    DataSource1: TDataSource;
    ComboBox1: TComboBox;
    DataSource2: TDataSource;
    procedure ComboBox1Change(Sender: TObject);
    procedure ADOQuery1AfterScroll(DataSet: TDataSet);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  MyTab : UTF8String;
implementation

{$R *.dfm}
// событие возникает при использовании ComboBox1
procedure TForm1.ComboBox1Change(Sender: TObject); 
begin
 MyTab := Trim(ComboBox1.Text);// присваиваем в глобальную переменную имя выбранной таблицы

  begin // добавляем запрос в ADOQuery2
     with ADOQuery2 do 
     begin
       Close;
       SQL.Clear;
{ADOQuery1.FieldByName('id_prep').AsInteger - индекс преподавателя в основной таблице 
запрос выбирает все поля из таблицы указанной в ComboBox1 соответствующие  выбранному преподавателю } 
       SQL.Add('select * From ' + MyTab + ' where id_prep ='+ intToStr(ADOQuery1.FieldByName('id_prep').AsInteger)); 
       Open;
     end;
  end;
end;
//все тоже самое что и выше событие - изменение активной записи
procedure TForm1.ADOQuery1AfterScroll(DataSet: TDataSet);
begin
if  MyTab<>'' then   //если переменная не пуста
with ADOQuery2  do
 BEGIN
   Close;
   SQL.Clear;
   SQL.Add('select * From ' + MyTab + ' where id_prep ='+ intToStr(ADOQuery1.FieldByName('id_prep').AsInteger));
   ExecSQL;
   Open;
 end;
end;

// все тоже самое при создании формы 
procedure TForm1.FormCreate(Sender: TObject);
begin
 MyTab := Trim(ComboBox1.Text);
with ADOQuery2  do
 BEGIN
   Close;
   SQL.Clear;
   SQL.Add('select * From ' + MyTab + ' where id_prep ='+ intToStr(ADOQuery1.FieldByName('id_prep').AsInteger));
   ExecSQL;
   Open;
 end;
end;

end.
П.С. лучше будет написать процедуру и вызывать ее в событиях.

вот так лучше будет
Код:
 procedure SelTablFi ;
   begin
     with Form1.ADOQuery2 do
     begin
       Close;
       SQL.Clear;
       SQL.Add('select * From ' + MyTab + ' where id_prep ='+ intToStr(Form1.ADOQuery1.FieldByName('id_prep').AsInteger));
       Open;
     end;
   end;
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
 MyTab := Trim(ComboBox1.Text);
   SelTablFi ;
  end;

procedure TForm1.ADOQuery1AfterScroll(DataSet: TDataSet);
begin
if  MyTab<>'' then
   SelTablFi ;
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
 MyTab := Trim(ComboBox1.Text);
   SelTablFi ;
end;
Терпение!Дежурный экстрасенс скоро свяжется с вами!

Последний раз редактировалось Dvoishnik; 28.03.2016 в 18:39.
Dvoishnik вне форума Ответить с цитированием
Старый 28.03.2016, 18:33   #14
OTGB
Форумчанин
 
Аватар для OTGB
 
Регистрация: 06.05.2015
Сообщений: 120
По умолчанию

Ошибка выскакиевает после того как я прописал код который был в той программе.
Код:
private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  MyTab : UTF8String;

implementation


{$R *.dfm}
uses Unit2, Unit3, Unit4, Unit5,ComObj;


  function TableToMSWord(aDBGrid : TDBGrid; const aRng : Variant) : Variant;
var
  wdTbl, wdRow : Variant;
  i, Col : Integer;
  DataSet : TDataSet;
  Bm : TBookmarkStr;
begin
  if TVarData(aRng).VDispatch = nil then Exit;

  DataSet := aDBGrid.DataSource.DataSet;
  Bm := DataSet.Bookmark; //Óñòàíîâêà çàêëàäêè íà òåêóùóþ ïîçèöèþ â òàáëèöå.

  //Ñîçäà¸ì íîâóþ òàáëèöó MS Word è ðàçìåùàåì å¸ íà ìåñòå äèàïàçîíà aRng.
  wdTbl := aRng.Tables.Add(aRng, 1, aDBGrid.Columns.Count);

  //Çàïèñûâàåì øàïêó òàáëèöû.
  wdRow := wdTbl.Rows.Item(1);
  Col := 0;
  for i := 0 to DataSet.Fields.Count - 1 do begin
    if not DataSet.Fields[i].Visible then Continue; //Ïðîïóñê íåâèäèìûõ ïîëåé.
    Inc(Col);
    wdRow.Cells.Item(Col).Range.Text := DataSet.Fields[i].DisplayName;
  end;

  //Ïåðåíîñèì äàííûå èç íàáîðà äàííûõ â òàáëèöó MS Word.
  DataSet.First; //Ïåðåõîä ê ïåðâîé çàïèñè â íàáîðå.
  while not DataSet.Eof do begin
    wdRow := wdTbl.Rows.Add; //Äîáàâëåíèå ñòðîêè âíèçó òàáëèöû MS Word.
    //Çàïèñü äàííûõ â ÿ÷åéêè ñòðîêè òàáëèöû MS Word.
    Col := 0;
    for i := 0 to DataSet.Fields.Count - 1 do begin
      if not DataSet.Fields[i].Visible then Continue;
      Inc(Col);
      wdRow.Cells.Item(Col).Range.Text := DataSet.Fields[i].AsString;
    end;
    DataSet.Next; //Ïåðåõîä ê ñëåäóþùåé çàïèñè â íàáîðå.
  end;
  DataSet.Bookmark := Bm; //Ïåðåõîäèì ê óñòàíîâëåííîé ðàíåå çàêëàäêå.
  Result := wdTbl.Range;
  end;

procedure TForm1.Button3Click(Sender: TObject);
const
  wdAlignParagraphCenter = 1;
  wdAlignParagraphLeft = 0;
  wdAlignParagraphRight = 2;
var
  wdApp, wdDoc, wdRng : Variant;
begin
  wdApp := CreateOleObject('Word.Application');
  wdApp.Visible := True;
  wdDoc := wdApp.Documents.Add;

  wdRng := wdDoc.Range;

  wdRng.InsertBefore('ÎÀÎ "ÑÏÁ"');
  wdRng.Font.Name := 'Times New Roman';
  wdRng.Font.Bold := True;
  wdRng.Font.Size := 14;

  wdRng.ParagraphFormat.Alignment := wdAlignParagraphCenter;
  wdRng.InsertAfter(#13#10);

  wdRng.Start := wdRng.End;
  wdRng.ParagraphFormat.Reset;
  wdRng.Font.Reset;
  wdRng.InsertAfter(#13#10#13#10);

  wdRng.InsertAfter('Òàáåëü ó÷åò ðàáî÷åãî âðåìåíè');
  wdRng.Font.Name := 'Times New Roman';
  wdRng.Font.Bold := True;
  wdRng.Font.Size := 16;

  wdRng.ParagraphFormat.Alignment := wdAlignParagraphCenter;
  wdRng.InsertAfter(#13#10);

  wdRng.Start := wdRng.End;
  wdRng.ParagraphFormat.Reset;
  wdRng.Font.Reset;
  wdRng.InsertAfter(#13#10#13#10);

  //Íàçâàíèå òàáëèöû.
  wdRng.InsertAfter('Òàáëèöà 1.');
  //Êîíåö òåêóùåãî äèàïàçîíà.
  wdRng := wdDoc.Range(wdRng.End, wdRng.End);
  //Ýêñïîðò òàáëèöû â MS Word.
  wdRng := TableToMSWord(DBGrid1, wdRng);

  wdRng.Start := wdRng.End;
  wdRng.ParagraphFormat.Reset;
  wdRng.Font.Reset;
  wdRng.InsertAfter(#13#10#13#10);

  wdRng.InsertAfter('Ðóêîâîäèòåëü ïîäðàçäåëåíèÿ');
  wdRng.Font.Name := 'Times New Roman';
  wdRng.Font.Bold := false;
  wdRng.Font.Size := 14;
  //Âûðàâíèâàíèå ïî ëåâîìó êðàþ.
  wdRng.ParagraphFormat.Alignment := wdAlignParagraphLeft;

  wdRng.Start := wdRng.End;
  wdRng.ParagraphFormat.Reset;
  wdRng.Font.Reset;
  wdRng.InsertAfter(#13#10#13#10);

  wdRng.InsertAfter('Äèðåêòîð');
  wdRng.Font.Name := 'Times New Roman';
  wdRng.Font.Bold := False;
  wdRng.Font.Size := 14;
  wdRng.ParagraphFormat.Alignment := wdAlignParagraphLeft;

end;



procedure TForm1.N4Click(Sender: TObject);
begin
Form2.Show;
Form2.frxReport1.ShowReport;
end;

procedure TForm1.N5Click(Sender: TObject);
begin
   Form3.Show;
 Form3.frxReport1.ShowReport;
end;



procedure TForm1.Edit1Change(Sender: TObject);

var help1, help2:string;
begin
help1:='%'+Form1.Edit1.Text+'%';
help2:=QuotedStr(help1);
with form1.ADOQuery1 do
begin
Close;
sql.clear;
SQL.Add('select * from prep where id_prep like'+help2+'or fam like'+help2+'or ima like'+help2+'or otche like'+help2+'Or data like'+help2+'order by id_prep');
Open;
end;
end ;



procedure TForm1.Button1Click(Sender: TObject);
begin
Form4.Caption:='Äîáàâèòü';
  form1.ADOQuery1.Append;
  Form1.Visible:=false;
Form4.Show;
end;


procedure TForm1.Button2Click(Sender: TObject);
begin
form5.show;
end;

procedure TForm1.N7Click(Sender: TObject);
begin
Form4.Caption:='Äîáàâèòü';
  form1.ADOQuery1.Append;
  Form1.Visible:=false;
Form4.Show;
end;

procedure TForm1.N8Click(Sender: TObject);
begin
form5.Show;
end;

procedure TForm1.ComboBox1Change(Sender: TObject);

var
    MyTab : UTF8String;
begin
 MyTab := Trim(ComboBox1.Text);
 if (MyTab <>'') then
  begin
     with ADOQuery2 do
     begin
       Close;
       SQL.Clear;
       SQL.Add('select * From ' + MyTab + ' where id_prep ='+ intToStr(ADOQuery1.FieldByName('id_prep').AsInteger));
       Open;
     end;
  end;

end;


procedure TForm1.FormShow(Sender: TObject);
begin
ADOConnection1.GetTableNames(ComboBox1.Items, True);
end;






procedure TForm1.FormCreate(Sender: TObject);
begin
 MyTab := Trim(ComboBox1.Text);
with ADOQuery2  do
 BEGIN
   Close;
   SQL.Clear;
   SQL.Add('select * From ' + MyTab + ' where id_prep ='+ intToStr(ADOQuery1.FieldByName('id_prep').AsInteger));
   ExecSQL;
   Open;
 end;
end;


procedure TForm1.FormActivate(Sender: TObject);
begin
Label2.Caption:=ADOQuery1fam.value + ' '+ form1.ADOQuery1ima.value +
  ' ' + ADOQuery1otche.value;
DBNavigator1.visible:=true;
ADOQuery1.Active:=true;
end;

procedure TForm1.DBNavigator1Click(Sender: TObject; Button: TNavigateBtn);
begin
begin

 DBGrid1.SelectedRows.CurrentRowSelected:=true;
if SpisokS.DataSet <> ADOQuery1 then
 Label1.Caption:=ADOQuery1fam.value + ' '+ ADOQuery1ima.value +
  ' ' + ADOQuery1otche.value;

  begin  
if (Button=nbPrior) or (Button=nbFirst) then
begin
ADOQuery1.Prior;
if ADOQuery1.bof then
begin
DBNavigator1.Controls[Ord(nbNext)].Enabled:=True;
DBNavigator1.Controls[Ord(nbLast)].Enabled:=True;
end
else
ADOQuery1.Next;
end;
if (Button=nbNext) or (Button=nbLast) then
begin
ADOQuery1.Next;
if ADOQuery1.Eof then
begin
DBNavigator1.Controls[Ord(nbFirst)].Enabled:=True;
DBNavigator1.Controls[Ord(nbPrior)].Enabled:=True;
end
else
ADOQuery1.Prior;
end;
end;
end;
end;

procedure TForm1.ADOQuery1AfterScroll(DataSet: TDataSet);
begin
dbgrid1.DataSource:=SpisokS;
ADOQuery1.Refresh;
Label2.Caption:=ADOQuery1fam.value + ' '+ ADOQuery1ima.value +
  ' ' + ADOQuery1otche.value;
DBNavigator1.visible:=true;
ADOQuery1.Active:=true;

if  MyTab<>'' then
with ADOQuery2  do
 BEGIN
   Close;
   SQL.Clear;
   SQL.Add('select * From ' + MyTab + ' where id_prep ='+ intToStr(ADOQuery1.FieldByName('id_prep').AsInteger));
   ExecSQL;
   Open;
 end;
end;

end.
Изображения
Тип файла: jpg Безымянный.jpg (16.5 Кб, 124 просмотров)

Последний раз редактировалось OTGB; 28.03.2016 в 18:38.
OTGB вне форума Ответить с цитированием
Старый 28.03.2016, 18:43   #15
Dvoishnik
Форумчанин
 
Регистрация: 12.02.2011
Сообщений: 808
По умолчанию

F7 - и смотрите где вы написали неправильно запрос.

зачем вы комбобокс заполняете из BD, запишите в ручную итемы как я сделал
или удалите отчистите свойство TExt хотя бы.
Терпение!Дежурный экстрасенс скоро свяжется с вами!

Последний раз редактировалось Dvoishnik; 28.03.2016 в 18:48.
Dvoishnik вне форума Ответить с цитированием
Старый 28.03.2016, 19:00   #16
OTGB
Форумчанин
 
Аватар для OTGB
 
Регистрация: 06.05.2015
Сообщений: 120
По умолчанию

Dvoishnik Спасибо всё работает) Хочу узнать как вы в комбобоксе1 сделали так чтобы выводил список только из 4 таблиц?
OTGB вне форума Ответить с цитированием
Старый 28.03.2016, 19:13   #17
Dvoishnik
Форумчанин
 
Регистрация: 12.02.2011
Сообщений: 808
По умолчанию

убирайте
Код:
procedure TForm1.FormShow(Sender: TObject);
begin
ADOConnection1.GetTableNames(ComboBox1.Items, True);
end;
и в свойстве items ComboBox1 прописываете таблицы которые вам нужны.
через Enter
Терпение!Дежурный экстрасенс скоро свяжется с вами!
Dvoishnik вне форума Ответить с цитированием
Старый 28.03.2016, 19:37   #18
OTGB
Форумчанин
 
Аватар для OTGB
 
Регистрация: 06.05.2015
Сообщений: 120
По умолчанию

Dvoishnik Скажите ещё, я вот сделал через комбо бокс, но в pagecontrol в каждой вкладке есть dbgrid. Как к ним это привизать?
OTGB вне форума Ответить с цитированием
Старый 28.03.2016, 23:33   #19
Dvoishnik
Форумчанин
 
Регистрация: 12.02.2011
Сообщений: 808
По умолчанию

Цитата:
Сообщение от OTGB Посмотреть сообщение
Dvoishnik Скажите ещё, я вот сделал через комбо бокс, но в pagecontrol в каждой вкладке есть dbgrid. Как к ним это привизать?
не понял что, куда привязать?

П.С. как должно все это дело выглядеть по вашему??
Терпение!Дежурный экстрасенс скоро свяжется с вами!
Dvoishnik вне форума Ответить с цитированием
Старый 28.03.2016, 23:42   #20
OTGB
Форумчанин
 
Аватар для OTGB
 
Регистрация: 06.05.2015
Сообщений: 120
По умолчанию

Dvoishnik Вот у меня в каждой вкладке находится dbgrid в которой своя таблица. Я хочу выбрать человека и переходе на другую вкладку там должна выходить только информация относящаяся к этому человеку.
Изображения
Тип файла: jpg 11111111.jpg (47.6 Кб, 139 просмотров)
Тип файла: jpg 222222.jpg (50.1 Кб, 132 просмотров)
Тип файла: jpg 3333333.jpg (41.0 Кб, 122 просмотров)

Последний раз редактировалось OTGB; 28.03.2016 в 23:56.
OTGB вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как связать несколько форм? Nefelhiem Общие вопросы Delphi 1 23.11.2011 20:37
Связать два DBGrid'a. sanchosss Помощь студентам 5 19.10.2011 20:28
связать 2 dbgrid nakazanie БД в Delphi 3 01.03.2011 11:27
связать несколько компонентов dblookupcomboboxeh между собой. D.O.G БД в Delphi 0 20.08.2010 14:27
как связать 2 DBGrid.... yulkas БД в Delphi 2 22.04.2010 15:27