Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > как вывести содержимое таблицы


Автор: z006 22.10.2010, 01:12
Добрый день.
давно учил делфу,все забыл начисто,последних лет 6 все пхп да яваскрипт.
стала задача написать приложение,которое будет работать с базой данных на удаленном сервере.база-мускл.
нашел компонент для делфы под это дело Direct MySQL Objects
коннектится,получает данные на ура.стал вопрос за выводом данных в табличном виде.и тут засада.нашел что для этого по-идее подходит компонент dbgrid,но что-то не пойму как мне из моих полученных данных,вида MySQLResult.FieldValueByName('*****') перетянуть данные в дбгрид?
полазив по инету нашел что еще надо ставить компонент datasource,и его указать в dbgrid,а в самом datasource указать тот компонент,который получает у нас данные из базы.но у него список компонентов пуст,а при попытке насильно скормить ему MySQLClient ругается матом.
прошу помощи,объясните пожалуйста,как мне вывести эти данные?
это срочно,первую версию должен был показать вчера(((((

Автор: bems 22.10.2010, 01:31
Если этот MySQLClient не унаследован от TDataSource ничего не выйдет и придется использовать обычный TStringGrid
Но можно же использовать TSQLQuery + TSQLConnection c Driver = MySQL

Автор: z006 22.10.2010, 02:06
Цитата(bems @ 22.10.2010,  01:31)
Если этот MySQLClient не унаследован от TDataSource ничего не выйдет и придется использовать обычный TStringGrid

а подвязать никак не выйдет,да?

Автор: Dom 22.10.2010, 07:48
MySQLClient унаследован от TObject.
Проще всего пожалуй выводить таки результаты в StringGrid. Создаешь число колонок по числу полей и выводишь данные построчно как-то так
Код

StringGrid.ColCount := MySQLResult.FieldCount;
MySQLResult.First;
while not MySQLResult.EOF do
begin
  for i := 0 to MySQLResult.FieldCount - 1 do
    StringGrid.Cells[i, MySQLResult.RecNo].FieldValue(i);
  MySQLResult.Next;
end;


Можно еще в первой строке вывести заголовки полей, тогда весь вывод сместится на 1 строку вниз.
Пишу по памяти, поэтому где-то могут быть ошибки в названиях свойств, и еще не помню что означает RecNo, по моему номер текущей записи.

Автор: Frees 22.10.2010, 07:55
можно взять компоненты другие ADO или Zeos... и использовать DB контролы (TDBGrid, TDBEdit, ...)

Автор: z006 22.10.2010, 18:33
Dom, ,не могу,к сожалению,поднять репутацию,поэтому просто говорю СПАСИБО!!!!!!!!!!!

код подправил,конечно:

Код

StringGrid1.ColCount := MySQLResult.Fieldscount;
MySQLResult.First;
while not MySQLResult.EOF do
begin
  for i := 0 to MySQLResult.FieldsCount - 1 do
    StringGrid1.Cells[i, MySQLResult.RecNo]:=MySQLResult.FieldValue(i);
  MySQLResult.Next;
end;


теперь такой вопрос,можно-ли возле каждой записи поставить какую-то кнопку?просто надо чтоб возле каждой записи был какой-то баттон,чтоб нажать,и по нему открылась новая форма,с возможностью манипулирования записью.вобщем все это понятно как делать,интересует сама возможность подпихнуть баттоны в StringGrid.он такое позволяет?

Автор: Dom 22.10.2010, 21:39
Да, реально мой код забавный. Хотя бы прочел перед отправкой. Но хорошо, если он смог натолкнуть на нужные мысли.
Спасибо вполне достаточно.

Вопрос про кнопки лучше отдельным топиком. Один топик - один вопрос.
По StringGrid'у не знаю, кажется можно, но не просто. Думаю поиск даже по этому форуму может помочь. Точно такое можно делать в VirtualStringTree. Но если прога нужна на вчера, то времени на освоение компонента может и не быть.

Автор: z006 22.10.2010, 23:42
ага,тему создал.
по поводу "на вчера"-мне удалось до понедельника выкроить время.но в понедельник надо уже показать рабочий вариант.

Автор: superVad 23.10.2010, 01:37
Лучше бы нормальные компоненты и грид заюзал. Чем эти костыли.
Так с БД не работают.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)