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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.03.2016, 02:01   #31
OTGB
Форумчанин
 
Аватар для OTGB
 
Регистрация: 06.05.2015
Сообщений: 120
По умолчанию

Dvoishnik скажите потом откуда эта процедура.)
Цитата:
SelTablFi
OTGB вне форума Ответить с цитированием
Старый 29.03.2016, 09:54   #32
Dvoishnik
Форумчанин
 
Регистрация: 12.02.2011
Сообщений: 808
По умолчанию

Цитата:
Сообщение от Dvoishnik Посмотреть сообщение
Код:
// добавляем запрос в 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));
П.С. лучше будет написать процедуру и вызывать ее в событиях.

вот так лучше будет
Код:
 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.ADOQuery1AfterScroll(DataSet: TDataSet);
begin
if  MyTab<>'' then
   SelTablFi ;
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;
я ее раза три приводил. как вы читаете??

Процедуры и функции 1
Процедуры и функции 2
Терпение!Дежурный экстрасенс скоро свяжется с вами!

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

Dvoishnik
Код:
procedure SelTablFI
будет без параметра?
OTGB вне форума Ответить с цитированием
Старый 29.03.2016, 11:17   #34
Dvoishnik
Форумчанин
 
Регистрация: 12.02.2011
Сообщений: 808
По умолчанию

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

Dvoishnik Вот написал. Но всё равно изменений не вижу.
Код:
 private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  MyTab : UTF8String;


implementation


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

procedure SelTablFi ;
   begin
     with Form1.ADOQuery5 do
     begin
       Close;
       SQL.Clear;
       SQL.Add('select * From ' + MyTab + ' where id_prep ='+ intToStr(Form1.ADOQuery1.FieldByName('id_prep').AsInteger));
       Open;
     end;
   end;



  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 ïðåïîäàâàòåëü 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 ADOQuery5 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.FormCreate(Sender: TObject);
begin
 MyTab := Trim(ComboBox1.Text);
with ADOQuery5  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 ADOQuery5  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.N9Click(Sender: TObject);
begin
Form7.Caption:='Ðåäàêòèðîâàòü';
  form1.ADOQuery1.Append;
  Form1.Visible:=false;
Form7.Show;
end;

procedure TForm1.PageControl1Change(Sender: TObject);
begin
case PageControl1.ActivePageIndex of
0:begin MyTab:='äèïëîì'; SelTablFi ; end;
1:begin MyTab:='àòòåñòàò'; SelTablFi ; end;
2:begin MyTab:='íàãðàäû'; SelTablFi ; end;
end;
 end;

 


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

все DbGrid за исключением первого подключите к ADOQuery2
Я так за вас всю работу сделаю
Пока не получу свой архив с построчным комментарием отказываюсь помогать дальше.
Терпение!Дежурный экстрасенс скоро свяжется с вами!
Dvoishnik вне форума Ответить с цитированием
Старый 29.03.2016, 12:05   #37
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

OTGB, Вы когда-нибудь научитесь включать на клавиатуре русскую раскладку, прежде чем скопировать текст программы в буфер обмена?!!
Неужели это сложно?
или Вам "Ðåäàêòèðîâàòü" нравится?!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 29.03.2016, 12:15   #38
OTGB
Форумчанин
 
Аватар для OTGB
 
Регистрация: 06.05.2015
Сообщений: 120
По умолчанию

Dvoishnik у вас
Код:
DBGridTitl(Form1.DBGrid2,MyTab);
ошибка 128 строка.
OTGB вне форума Ответить с цитированием
Старый 29.03.2016, 12:20   #39
Dvoishnik
Форумчанин
 
Регистрация: 12.02.2011
Сообщений: 808
По умолчанию

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

Dvoishnik вот текст ошибки
Изображения
Тип файла: jpg 1111111.jpg (13.9 Кб, 149 просмотров)
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