|
Вопрос # 177/ вопрос открыт / |
|
Как прочитать все данные из таблици dbgrid,
в переменные
дайте подробное объяснение, а то у меня получается читать только текущую строку
Заранее всем благодарен
Ответ #1. Отвечает эксперт: Иусов Сергей Ник.
Здравствуйте, Губкин Александр Александрович!
Для того чтобы переместится к следующей записи в наборе данных исользуй метод next.
Пример сохранения данных в переменные (если честно я в не вижу в нем логики, но вопрошающему виднее)
procedure data2vars
begin
DBGrid.DataSource.DataSet.First; <- Встанем на начало набора данных
while not(DBGrid.DataSource.DataSet.Eof) do <- Будем просматривать набор данных до конца
begin
//тут ты присваеваешь своим переменным данные полек
DBGrid.DataSource.DataSet.Next; // <- переход к следующей записи
end;
end;
 |
Ответ отправил: Иусов Сергей Ник. (статус: 3-ий класс)
Время отправки: 27 ноября 2006, 08:38
|
Ответ #2. Отвечает эксперт: Alex Van Glukhman
Здравствуйте, Губкин Александр Александрович!
Как я говорил ранее TDBGrid всего лишь отображает данные хранимые в табличной форме. Сами же данные хранятся в TDataSet. В настоящий момент времени вы работаете с активной записью TDataSet.
Для навигации по записям существуют методы First, Next, Prior, Last, MoveBy(n) - где n количество строк в таблице на которые сдвигается курсор, положительное значение вниз, отрицательное вверх.
Теперь привожу пример.
В новом проекте кидаешь на форму TDBGrid - именуем его Grd, TTable - имя Tbl, TDataSource - DS и кнопку TButton - Btn.
DEMO база у Borland при установленной BDE имеет alias DBDEMOS
В Object Inspector устанавливаем property для TTable Name-Tbl; DatabaseName-DBDEMOS; TableName-country.db. Проверим подключение установив свойство Active:=true; Если ничего не выскочило особенного то всё нормально установим обратно значение в false;
Далее для TDataSource Name-DS; DataSet-Tbl
Теперь TDBGrid Name-Grd; DataSource-DS
Теперь кинем на форму TMemo Name-Mm куда будем переносить данные из таблицы.
Осталось при вызове приложения подключиться к таблице, т.е. на OnCreate формы вставляем Tbl.Active:=true;
Далее смотри пример
Приложение: Переключить в обычный режим- unit Unit2
-
- interface
-
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, DB,
DBTables, Grids, DBGrids;
-
- type
- TForm1 = class(TForm)
- Grd: TDBGrid;
- Tbl: TTable;
- DS: TDataSource;
- Mm: TMemo;
- Btn: TButton;
- procedure BtnClick(Sender: TObject);
- procedure FormCreate(Sender: TObject);
- end;
-
- var
- Form1: TForm1;
-
- implementation
-
- {$R *.dfm}
-
- procedure TForm1.BtnClick(Sender: TObject);
- var
- perem1, perem2: String;
- nomrec: integer;
- begin
- Mm.Clear;
- //Запомнили
запись где
были в
таблице
- nomrec:=Tbl.RecNo;
- //К началу
таблицы
- Tbl.First
- //Пока не
дойдём до
конца
- while not Tbl.Eof do
- begin
- //Присвоим
значения
переменным
- //Пишу
только для
наглядности
- perem1:=Tbl.Fields[0].AsString;
- perem2:=Tbl.Fields[1].AsString;
- //А теперь
заносим
значения в
Mm
- Mm.Lines.Add(Tbl.Fields[0].AsString;
- +' - '+Tbl.Fields[1].AsString;);
- //Идём к
следующей
записи
- Tbl.Next;
- end;
- //Возвращаем
курсор к
запомненной
записи
- Tbl.RecNo:=nomrec;
- end;
-
- procedure Form1.FormCreate(Sender: TObject);
- begin
- Tbl.Active:=true;
- end;
-
- end.
-
- Удачи!!!
-
 |
Ответ отправил: Alex Van Glukhman (статус: 7-ой класс)
Время отправки: 27 ноября 2006, 13:18
|
Ответ #3. Отвечает эксперт: Denisss
Здравствуйте, Губкин Александр Александрович!
Конечно, Вам уже дали ответ, но я не считаю его до конца корректным. Потому привожу Вам мою модификацию предыдущего ответа, в которой исправлены некоторые ошибки и ускорена работа. Комментарии к примеру остаются прежними (см. выше).
С большими БД всегда хочется хоть немного ускорить работу программы.
Удачи!
Приложение: Переключить в обычный режим- procedure TForm1.BtnClick(Sender: TObject);
- var
- perem1, perem2: String;
- Bookmark: TBookmark;
- begin
- Mm.Clear;
-
-
-
- Bookmark:= Tbl.GetBookmark;
-
-
-
-
-
- Tbl.DisableControls;
-
- Mm.Lines.BeginUpdate;
-
-
- Tbl.First;
-
- while not Tbl.Eof do
- begin
-
-
- perem1:= Tbl.Fields[0].AsString;
- perem2:= Tbl.Fields[1].AsString;
-
-
- Mm.Lines.Add(perem1 + ' - ' + perem2);
-
- Tbl.Next;
- end;
-
-
- Tbl.GotoBookmark(Bookmark);
-
- Tbl.FreeBookmark(Bookmark);
-
- Tbl.EnableControls;
-
- Mm.Lines.EndUpdate;
- end;
 |
Ответ отправил: Denisss (статус: 2-ой класс)
Время отправки: 27 ноября 2006, 22:48
|
Мини-форум вопроса
Всего сообщений: 6; последнее сообщение — 27 ноября 2006, 13:05; участников в обсуждении: 2.
|
Александр-446 (статус: Посетитель), 27 ноября 2006, 12:44 [#1]:
Зачем себе жизнь то усложнять, а?
Можно сделать проще:
for i:=1 to stringgrid1.rowcount do begin
m[i]:=stringgrid1.cells[1,i];
m[i]:=stringgrid1.cells[2,i];
m[i]:=stringgrid1.cells[3,i];
...
m[i]:=stringgrid1.cells[n,i];
end;
|
|
Александр-446 (статус: Посетитель), 27 ноября 2006, 12:54 [#3]:
Как "что даст"?
|
|
Иусов Сергей Ник. (статус: 3-ий класс), 27 ноября 2006, 13:01 [#5]:
Вопрос был в том как сместится на следующую запись в наборе данных (в частном случае это таблица БД), StringGrid к базам данных никакого отношения не имеет.
|
|
Александр-446 (статус: Посетитель), 27 ноября 2006, 13:05 [#6]:
согласен... ошибся...
У меня просто сразу на ум пришла эта stringgrid (c бд знаком)...
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|