| 
| 
 | Вопрос # 5 058/ вопрос закрыт / | 
 |  Здравствуйте!Подскажите, пожалуйста, как из DBGrid вытащить данные и раскидать их по Edit'ам? Иными словами есть таблица, при каждом запросе количество строк в ней меняется, но больше 7 быть не может. Нужно из определенных полей этой таблицы (всего и 40, но нужны только 3(FIO, DR, GOROD)) вытянуть данные и занести их в Edit'ы. Как я понимаю, тут нужно задать какой-то цикл, но никак не соображу как:(
 Заранее спасибо.
 
|  |   Вопрос задал: UnHoly (статус: Посетитель)Вопрос отправлен: 1 марта 2011, 14:06
 Состояние вопроса: закрыт, ответов: 1.
 |  Ответ #1. Отвечает эксперт: Вадим К Здравствуйте, UnHoly!если есть гарантия, что едиты будут идти именно в такой последовательности, то тогда такой код.
 
 var i,j:integer;
begin
  i:= 1;
  query.first;
  while not query.eof do begin
    TEdit(FindComponent('Edit'+inttostr(i))).text := query.fieldbyname('FIO').asstring;
    TEdit(FindComponent('Edit'+inttostr(i+1))).text := query.fieldbyname('DR').asstring;
    TEdit(FindComponent('Edit'+inttostr(i+2))).text := query.fieldbyname('GOROD').asstring;
    i := i+3;
    query.next;
  end;
  // почистим незаполненные едиты
  for j := i+1 to 21 do
    TEdit(FindComponent('Edit'+inttostr(j))).text := '';
|  | Ответ отправил: Вадим К (статус: Академик)Время отправки: 1 марта 2011, 16:14
 Оценка за ответ: 5
 |  
 Мини-форум вопросаВсего сообщений: 13; последнее сообщение — 1 марта 2011, 19:37; участников в обсуждении: 5. 
|   | min@y™ (статус: Доктор наук), 1 марта 2011, 14:09 [#1]:Из DBGrid вытащить ничего нельзя, т.к. в нём данные не содержатся, а только отображаются. Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | Тов. Женька (статус: 3-ий класс), 1 марта 2011, 14:11 [#2]:Данные нужно брать не из DBGrid, а из его DataSource. И лучше сразу взять DBEdit и так же назначить им DataSource и необходимые поля. |  
|   | Вадим К (статус: Академик), 1 марта 2011, 14:12 [#3]:Данные нужно вытягивать с привязаного Table или Query Галочка "подтверждения прочтения" - вселенское зло. |  
|   | UnHoly (статус: Посетитель), 1 марта 2011, 14:18 [#4]:К Grid'у привязан Query. Пример решения приведите плиз
 |  
|   | Тов. Женька (статус: 3-ий класс), 1 марта 2011, 14:38 [#5]: Edit1.Text := Query.FieldByName('FieldName').AsString;и т.д. |  
|   | Вадим К (статус: Академик), 1 марта 2011, 14:40 [#6]: query.first;
while not query.eof do begin
  Memo1.lines.add(query.fieldbyname('FIO')+' '+query.fieldbyname('DR')+' '+query.fieldbyname('GOROD'));
  query.next;
end;И в мемо все будет. Как распхать по Вашим Edit - решайте сами.Галочка "подтверждения прочтения" - вселенское зло. |  
|   | UnHoly (статус: Посетитель), 1 марта 2011, 14:43 [#7]:Вариант с Memo я уже читал на форуме, хотелось бы как-нибудь это обойти. Но все равно спасибо. |  
|   | Вадим К (статус: Академик), 1 марта 2011, 14:47 [#8]:можно и без мемо обойтись. главное знать, как распихать по Edit. Так как я не знаю структуру Ваших Edit'ов, то я и не могу написать код.
 Галочка "подтверждения прочтения" - вселенское зло. |  
|   | Тов. Женька (статус: 3-ий класс), 1 марта 2011, 14:48 [#9]: Цитата (UnHoly): Вариант с Memo я уже читал на форуме, хотелось бы как-нибудь это обойти. Но все равно спасибо.  Тогда так:
 
 DBEdit1.DataSource := Query;
DBEdit1.DataField := 'FIO';
DBEdit2.DataSource := Query;
DBEdit2.DataField := 'DR';или настроить эти свойства через инспектор. |  
|   | UnHoly (статус: Посетитель), 1 марта 2011, 14:58 [#10]:Вадим К: структура достаточно простая. если схематично, то: _FIO____        DR__       GOROD
 1.[  edit1  ][  edit2  ][  edit3  ]
 2.[  edit4  ][  edit5  ][  edit6  ]
 3.[  edit7  ]..ну и так далее, всего 7 таких строк получается.
 |  
|   | Вадим К (статус: Академик), 1 марта 2011, 15:08 [#11]:если есть гарантия, что едиты будут идти именно в такой последовательности, то тогда такой код. 
 var i,j:integer;
begin
  i:= 1;
  query.first;
  while not query.eof do begin
    TEdit(FindComponent('Edit'+inttostr(i))).text := query.fieldbyname('FIO').asstring;
    TEdit(FindComponent('Edit'+inttostr(i+1))).text := query.fieldbyname('DR').asstring;
    TEdit(FindComponent('Edit'+inttostr(i+2))).text := query.fieldbyname('GOROD').asstring;
    i := i+3;
    query.next;
  end;
  // почистим незаполненные едиты
  for j := i+1 to 21 do
    TEdit(FindComponent('Edit'+inttostr(j))).text := '';Галочка "подтверждения прочтения" - вселенское зло. |  
|   | UnHoly (статус: Посетитель), 1 марта 2011, 15:31 [#12]:Вадим К: Спасибо огромное! буду пробовать.. |  
|   | Vic (статус: 1-ый класс), 1 марта 2011, 19:37 [#13]:А почему не хотите еще один DBGrid использовать с нужными Вам полями
 вместо обычных полей?
 |  3 мая 2011, 21:46: Вопрос закрыт (решение принял автор вопроса — UnHoly): вопрос решен Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |