Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 5 058

/ вопрос закрыт /

Здравствуйте!
Подскажите, пожалуйста, как из DBGrid вытащить данные и раскидать их по Edit'ам? Иными словами есть таблица, при каждом запросе количество строк в ней меняется, но больше 7 быть не может. Нужно из определенных полей этой таблицы (всего и 40, но нужны только 3(FIO, DR, GOROD)) вытянуть данные и занести их в Edit'ы. Как я понимаю, тут нужно задать какой-то цикл, но никак не соображу как:(
Заранее спасибо.

Приложение:
  1. Delphi 2010


UnHoly Вопрос закрыт (ответы не принимаются, мини-форум закрыт)

Вопрос задал: 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™

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

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

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

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

UnHoly (статус: Посетитель), 1 марта 2011, 15:31 [#12]:

Вадим К: Спасибо огромное! буду пробовать..
Vic

Vic (статус: 1-ый класс), 1 марта 2011, 19:37 [#13]:

А почему не хотите еще один DBGrid использовать с нужными
Вам полями
вместо обычных полей?

3 мая 2011, 21:46: Вопрос закрыт (решение принял автор вопроса — UnHoly): вопрос решен

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 29 мая 2023, 14:08
Выполнено за 0.03 сек.
Рейтинг@Mail.ru