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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.04.2012, 11:14   #1
fezilk25
Форумчанин
 
Регистрация: 01.08.2010
Сообщений: 124
По умолчанию Данные из БД (dataset) в tstringgrid

Необходимо из DataGrid скопировать полностью всю таблицу в tstringgrid, помогите, пожалуйста, как это сделать?

еще.. в DataGrid отображается 5 строк + 1 строка-хеадер и 2 колонки, но процедура dbgrid1.DataSource.DataSet.Fields.C ount возвращает 3.. почему?
fezilk25 вне форума Ответить с цитированием
Старый 30.04.2012, 11:20   #2
=master=
Форумчанин
 
Регистрация: 26.03.2012
Сообщений: 665
По умолчанию

Потому что в датагриде данных нет, а в датасете есть.
Грид показывает то что ему сказали, а датасет имеет то что имеет.
=master= вне форума Ответить с цитированием
Старый 30.04.2012, 11:33   #3
fezilk25
Форумчанин
 
Регистрация: 01.08.2010
Сообщений: 124
По умолчанию

да, но Fields.Count берется из датасета, а не из дбгрида

понял: в бд 3 колонки, а dbgrid не отображал одну из них.
Но как все-таки запихать эти данные из БД в TSTringGrid ?

Последний раз редактировалось fezilk25; 30.04.2012 в 11:36.
fezilk25 вне форума Ответить с цитированием
Старый 30.04.2012, 11:48   #4
=master=
Форумчанин
 
Регистрация: 26.03.2012
Сообщений: 665
По умолчанию

Код:
dbgrid1.DataSource.DataSet.DisableControls;
dbgrid1.DataSource.DataSet.First;

  while not dbgrid1.DataSource.DataSet.Eof do
  begin
     StringGrid.RowCount := StringGrid.RowCount + 1;

    { тут перетягиваем данные из датасета в стринг грид, примерно так}
    StringGrid.Cells[0, StringGrid.RowCount - 1] := dbgrid1.DataSource.DataSet.Fields[0].AsString;
...............

    dbgrid1.DataSource.DataSet.Next;
  end;

dbgrid1.DataSource.DataSet.EnableControls;

Последний раз редактировалось =master=; 30.04.2012 в 12:27.
=master= вне форума Ответить с цитированием
Старый 30.04.2012, 12:48   #5
fezilk25
Форумчанин
 
Регистрация: 01.08.2010
Сообщений: 124
По умолчанию

Спасибо!
Подсказали еще один вариант, мб кому пригодится:
Код:
procedure TForm2.FormCreate(Sender: TObject);
var
i,d:integer;
begin
organizations.RowCount := zquery1.RecordCount + 1;
organizations.ColCount := zquery1.Fields.Count;
  for d := 1 to zquery1.RecordCount do
    begin
      for i:=0 to zquery1.Fields.Count-1 do
        begin
         organizations.cells[i,d]:=dbgrid1.DataSource.DataSet.fields[i].asstring;
        end;
      ZQuery1.RecNo := ZQuery1.RecNo + 1;
  end;
end;
organizations - имя таблицы TStringGrid,
Zquery - компонент для соединения с MySQL.
fezilk25 вне форума Ответить с цитированием
Старый 30.04.2012, 13:00   #6
=master=
Форумчанин
 
Регистрация: 26.03.2012
Сообщений: 665
По умолчанию

Это плохой вариант. На RecordCount закладываться чревато.
А что такое ZQuery1.RecNo := ZQuery1.RecNo + 1;. вообще не понятно.
=master= вне форума Ответить с цитированием
Старый 30.04.2012, 13:11   #7
fezilk25
Форумчанин
 
Регистрация: 01.08.2010
Сообщений: 124
По умолчанию

Почему чревато?
ZQuery1.RecNo := ZQuery1.RecNo + 1; это переход к след. строке
fezilk25 вне форума Ответить с цитированием
Старый 30.04.2012, 13:28   #8
=master=
Форумчанин
 
Регистрация: 26.03.2012
Сообщений: 665
По умолчанию

Потому что RecordCount не всегда равен истиному значению количества записей.
=master= вне форума Ответить с цитированием
Старый 30.04.2012, 20:43   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

=master=, когда RecordCount не равен истиному значению количества записей?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 30.04.2012, 20:48   #10
=master=
Форумчанин
 
Регистрация: 26.03.2012
Сообщений: 665
По умолчанию

http://docwiki.embarcadero.com/Libra...et.RecordCount
=master= вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
TcxGrid.DataController не обновляет данные в связанном DataSet delphicoding Общие вопросы Delphi 2 08.12.2011 18:13
Как привязать компоненту TComboBox к Button, чтобы при нажатии Button, данные из ComboBox вводились в TstringGrid Marta_ Помощь студентам 2 15.10.2011 01:02
Строку из одного DataSet в другой DataSet Abbath1349 Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate) 0 22.05.2011 19:26
Обновились ли данные в DataSet Sanprof БД в Delphi 7 27.10.2010 15:59
Как записать данные в файл из компонента TstringGrid? Николай ПН Общие вопросы Delphi 4 25.02.2010 12:49