|
Вопрос # 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): вопрос решен
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|