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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.03.2016, 14:39   #1
OTGB
Форумчанин
 
Аватар для OTGB
 
Регистрация: 06.05.2015
Сообщений: 120
По умолчанию Delphi работа с label

Ребята, прошу вашей помощи. У меня на форме находится label2 и dbgrid. Как сделать так что бы при выборе в dbgrid преподавателя в label2 отображалось его ФИО. У меня отображается только один преподаватель, при нажатии на другого label2 не меняется.
PHP код:
unit Unit1;

  function 
TableToMSWord(aDBGrid TDBGrid; const aRng Variant) : Variant;
var
  
wdTblwdRow Variant;
  
iCol 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(aRng1aDBGrid.Columns.Count);

  
//Çàïèñûâàåì øàïêó òàáëèöû.
  
wdRow := wdTbl.Rows.Item(1);
  
Col := 0;
  for 
:= 0 to DataSet.Fields.Count 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 
:= 0 to DataSet.Fields.Count 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(SenderTObject);
const
  
wdAlignParagraphCenter 1;
  
wdAlignParagraphLeft 0;
  
wdAlignParagraphRight 2;
var
  
wdAppwdDocwdRng 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.EndwdRng.End);
  
//Ýêñïîðò òàáëèöû â MS Word.
  
wdRng := TableToMSWord(DBGrid1wdRng);

  
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(SenderTObject);
begin
Form2
.Show;
Form2.frxReport1.ShowReport;
end;

procedure TForm1.N5Click(SenderTObject);
begin
   Form3
.Show;
 
Form3.frxReport1.ShowReport;
end;



procedure TForm1.Edit1Change(SenderTObject);

var 
help1help2: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(SenderTObject);
begin
Form4
.Caption:='Äîáàâèòü';
  
form1.ADOQuery1.Append;
  
Form1.Visible:=false;
Form4.Show;
end;


procedure TForm1.Button2Click(SenderTObject);
begin
form5
.show;
end;

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

procedure TForm1.N8Click(SenderTObject);
begin
form5
.Show;
end;

procedure TForm1.ComboBox1Change(SenderTObject);

var
    
MyTab UTF8String;
begin
 MyTab 
:= Trim(ComboBox1.Text);
 if (
MyTab <>''then
  begin
     with ADOQuery5 
do
     
begin
       Close
;
       
SQL.Clear;
       
SQL.Append('SELECT * FROM 'MyTab +'');
       
Open;
     
end;
  
end;

end;


procedure TForm1.FormShow(SenderTObject);
begin
ADOConnection1
.GetTableNames(ComboBox1.ItemsTrue);
end;






procedure TForm1.FormCreate(SenderTObject);
begin
dbgrid1
.DataSource:=SpisokS;
ADOQuery1.Refresh;
Form1.Label2.Caption:=form1.ADOQuery1fam.value ' 'form1.ADOQuery1ima.value +
  
' ' form1.ADOQuery1otche.value;
form1.DBNavigator1.visible:=true;
ADOQuery1.Active:=true;
end;

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

procedure TForm1.DBNavigator1Click(SenderTObjectButtonTNavigateBtn);
begin
begin

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

  
begin  
if (Button=nbPrior) or (Button=nbFirstthen
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=nbLastthen
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;

end
OTGB вне форума Ответить с цитированием
Старый 28.03.2016, 14:46   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Как сделать так что бы при выборе в dbgrid преподавателя
вешайте обработчик на событие OnAfterScroll на связанный с вашим dbgid'ом источник данных (dataset)
похоже, что у Вас с DBGrid1 связан датасет ADOQuery1
вот на него и вешайте обработчик события.

и ещё. нет смысла в методах формы Form1 писать префикс Form1.
это масло масляное!
например, вместо:
Цитата:
Код:
procedure TForm1.FormActivate(Sender: TObject); 
begin 
  Form1.Label2.Caption:=form1.ADOQuery1fam.value + ' '+ form1.ADOQuery1ima.value + 
  ' ' + form1.ADOQuery1otche.value; 
  form1.DBNavigator1.visible:=true; 
  ADOQuery1.Active:=true; 
end;
лучше написать
Код:
procedure TForm1.FormActivate(Sender: TObject); 
begin 
  Label2.Caption:=ADOQuery1fam.value + ' '+ ADOQuery1ima.value + 
  ' ' + ADOQuery1otche.value; 
  DBNavigator1.visible:=true; 
  ADOQuery1.Active:=true; 
end;
разницу видите?


p.s. а ещё, перед копированием текста на форум, включайте русскую раскладку клавиатуры.
Это поможет сохранить русский текст в вашем коде, который вы публикуете на форуме!

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

Serge_Bliznykov а если прописать код обновления Label2 в событии OnDataChange?
OTGB вне форума Ответить с цитированием
Старый 28.03.2016, 15:31   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
OnDataChange
А прописать и проверить?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 28.03.2016, 16:01   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

согласен с Аватар!

я бы предположил, что onDataChange вызывается только при изменении данных.
Но утверждать это не берусь.
Проверить это Вам быстрее, чем вопрос на форум писать!
и тем более ждать ответов.
и тем более, если эти ответы не дадут 100% гарантию!

p.s. а если не секрет, то чем Вам не понравилось событие OnAfterScroll ?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 28.03.2016, 16:06   #6
OTGB
Форумчанин
 
Аватар для OTGB
 
Регистрация: 06.05.2015
Сообщений: 120
По умолчанию

Serge_Bliznykov Только не смейтесь)))) я не могу найти событие OnAfterScroll. Я не такой опытный ещё.

кстати, на форуме тема есть - один в один ваш вопрос: http://programmersforum.ru/showthread.php?t=285596

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

а почему не использовать вместо Label - DBText?
и не нужно никаких обработчиков писать.
Терпение!Дежурный экстрасенс скоро свяжется с вами!
Dvoishnik вне форума Ответить с цитированием
Старый 28.03.2016, 16:09   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

выделите в дизайнере ADOQuery1, в инспекторе вкладка Events,
там ищите...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 28.03.2016, 16:09   #9
Dvoishnik
Форумчанин
 
Регистрация: 12.02.2011
Сообщений: 808
По умолчанию

Цитата:
Сообщение от OTGB Посмотреть сообщение
Serge_Bliznykov Только не смейтесь)))) я не могу найти событие OnAfterScroll. Я не такой опытный ещё.
в ADOTable1 или в ADOQuery1 ищите
Терпение!Дежурный экстрасенс скоро свяжется с вами!
Dvoishnik вне форума Ответить с цитированием
Старый 28.03.2016, 16:31   #10
OTGB
Форумчанин
 
Аватар для OTGB
 
Регистрация: 06.05.2015
Сообщений: 120
По умолчанию

Serge_Bliznykov спасибо вам, а также тем кто писал. Всё работает.)
OTGB вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с Label Серёга0629 Microsoft Office Excel 7 19.07.2011 22:22
работа с label.... L.A.M.E.R. Помощь студентам 1 20.11.2010 21:01
Работа с Label MAZADA Помощь студентам 6 11.11.2010 17:23
работа с label miki131 Общие вопросы Delphi 6 07.07.2010 08:44
Работа с label niva622 Помощь студентам 11 06.09.2007 17:49