Основы работы с БД

Любые обсуждения, не нарушающие правил форума.

Модератор: Модераторы

Re: Основы работы с БД

Сообщение Vadim » 29.04.2008 09:24:38

1. Если пользуешься DBGrid'ом, то DBNavigator нафиг ненужен.
2. В Lazaruse при разработке у DBGrid'а свойство Columns сделайте пустым, т.е. чтобы DataSource добавляла колонки в DBGrid автоматически.
3. В DataSource свойство AutoEdit должно быть True.
4. В MemDS свойство ReadOnly должно быть False.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Основы работы с БД

Сообщение Troublemaker » 29.04.2008 09:45:45

Vadim писал(а):Если пользуешься DBGrid'ом, то DBNavigator нафиг ненужен.
Как тогда управлять? Где можно найти комбинации клавиш? Интуитивные INS и DEL, например, у меня не работают.
Vadim писал(а):при разработке у DBGrid'а свойство Columns сделайте пустым,
Как тогда раскрасить столбцы, буде потребуется? А задать заголовки столбцов, отличающиеся от названий полей?
Vadim писал(а):В MemDS свойство ReadOnly должно быть False
Не вижу этого свойства ни у memds, ни у datasource, только у самого грида. В гриде оно false.

В любом случае, меня в первую очередь смущает, что не смотря на наличие данных, грид выводится пустым.
Аватара пользователя
Troublemaker
постоялец
 
Сообщения: 292
Зарегистрирован: 16.04.2008 13:00:44
Откуда: Биробиджан, Дальний Восток

Re: Основы работы с БД

Сообщение Vadim » 29.04.2008 11:28:24

Troublemaker писал(а):Как тогда управлять? Где можно найти комбинации клавиш?

А не лучше ли самому назначить, чтобы интуиция не подводила? В событии OnKeyDown, т.е. "после назажатия клавиши" ставите свою последовательность действий.
Troublemaker писал(а):Как тогда раскрасить столбцы, буде потребуется?

Не могу ничего по этому поводу сказать, т.к. сам совершенно не люблю раскрашивать столбцы. Может быть кто-то ещё что-нибудь по этому поводу скажет...
Заголовки - это, конечно, вещь нужная. Но их можно сделать сразу в MemDS и больше об этом не беспокоиться.
Troublemaker писал(а):Не вижу этого свойства ни у memds, ни у datasource

Про datasource я другое свойство говорил, а у memds действительно нет, это я перепутал.
Troublemaker писал(а):В любом случае, меня в первую очередь смущает, что не смотря на наличие данных, грид выводится пустым.

Остаётся только выяснить:
1. memds точно открыт (проверить свойство Active).
2. Сколько строк в memds (проверить ShowMessage(IntToStr(memds.RecordCount)) ).
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Основы работы с БД

Сообщение Troublemaker » 29.04.2008 12:05:01

Vadim писал(а):
Troublemaker писал(а):Как тогда управлять? Где можно найти комбинации клавиш?

А не лучше ли самому назначить?
Не лучше. Учитывая полное отсутствие документации, я даже предположить не могу, сколько времени уйдет на написание обработчика. :(
Должно же быть какое-то следование стандартам? Или ВСЕ пишут свои обработчики клавиш?
Vadim писал(а):Как тогда раскрасить столбцы, буде потребуется? - Не могу ничего по этому поводу сказать, т.к. сам совершенно не люблю раскрашивать столбцы.
В этом и проблема: не могу пока разобраться, как же работать со свойствами столбцов в реалтайме. Например, ни

Код: Выделить всё
DBGrid1.Columns[a].DisplayName:=UpperCase(mds.Fields[a].Name);


ни

Код: Выделить всё
DBGrid1.Columns[a].DisplayName:=UpperCase(mds.Fields.Fields[a].Name);


не выдают ошибку но и никак не изменяют заголовки столбцов - они так и остаются . ("а" идет в цикле от 0 до fieldscount-1). Понятно, что это я где-то что-то упускаю, что-то неочевидное, но необходимое. Знать бы еще, что?
Vadim писал(а):1. memds точно открыт (проверить свойство Active).
2. Сколько строк в memds (проверить ShowMessage(IntToStr(memds.RecordCount)) ).
Открыт. mds.active=true. Это выставлено еще в дизайнере - без активного dset-a его поля не появляются в свойствах dsource и грида.

Строк столько, сколько я создаю в цикле:
Код: Выделить всё
  for a:=1 to 20 do begin
      mds.Append;
      mds.SetFields([true,chr(Random(27)+65),Random(10)]);
      //mds.FieldValues['b1']:=Random(2)-1;
      //mds.FieldValues['int1']:=Random(10);
      //mds.FieldValues['s1']:=chr(Random(27)+65);
      mds.Post;
  end;
то есть, 20. И в соотв. контроле именно это число и отображается, изменяясь при изменении числа записей при помощи дбнавигатора (STRecordCount.Caption:=IntToStr(mds.RecordCount);).

То есть, повторюсь, доступ к memds есть, но его данные почему-то не отображаются, и редактирование ничего не дает.

Посмотрите, пожалуйста, аттач? Может на вашей версии лазаря всё заработает, тогда я буду обновлять свою.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Troublemaker
постоялец
 
Сообщения: 292
Зарегистрирован: 16.04.2008 13:00:44
Откуда: Биробиджан, Дальний Восток

Re: Основы работы с БД

Сообщение Padre_Mortius » 29.04.2008 14:54:14

Код: Выделить всё
DBGrid1.Columns[a].DisplayName:=UpperCase(mds.Fields[a].Name);


Вопрос уже поднимался на сайте. http://freepascal.ru/forum/viewtopic.php?f=5&t=3320
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Re: Основы работы с БД

Сообщение Sergei I. Gorelkin » 29.04.2008 15:12:59

Наверное, вместо Field.Name нужно использовать Field.FieldName. Свойство Name - это имя компонента, для автоматически созданных полей оно скорее всего будет пустым. Свойство FieldName - имя поля в таблице, оно пустым быть не может.

Кроме того, можно попробовать менять свойства самих полей:
DisplayLabel - отображаемое имя поля, должно быть эквивалентно DbGrid.Columns[x].DisplayName, но изменение Field.DisplayLabel будет видно сразу во всех гридах, если их несколько штук.
Visible - если установить в False, соотв. колонка грида будет скрыта.
DisplayFormat - есть только у числовых полей. Для адекватного отображения денежных сумм, например, без присвоения '0.##' не обойтись.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1405
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: Основы работы с БД

Сообщение Troublemaker » 29.04.2008 16:19:35

Sergei I. Gorelkin писал(а):Наверное, вместо Field.Name нужно использовать Field.FieldName.

Padre_Mortius писал(а):Вопрос уже поднимался на сайте.
Спасибо, буду разбираться.

Ну а как быть с тем, что в гриде ничего не показывается?
Аватара пользователя
Troublemaker
постоялец
 
Сообщения: 292
Зарегистрирован: 16.04.2008 13:00:44
Откуда: Биробиджан, Дальний Восток

Re: Основы работы с БД

Сообщение Vadim » 29.04.2008 17:33:26

Troublemaker писал(а):Ну а как быть с тем, что в гриде ничего не показывается?

А вот что интересное обнаружилось... :)
Если создать объект типа TMemDataset программно и так же программно заполнить его значениями, то эти значения благополучно существуют и их можно просмотреть в DBGrid'е Но только просмотреть...
Если же воспользоваться копонентом установленным из пакета, то вместо работы с ним получаете фигу-дрыгу - нельзя делать ничего. Программно этот компонент заполняется, но значение DataSize после заполнения показывает 0, что говорит о том, что все данные ушли в космос.
Отсюда вывод - у TMemDataset пока что не сделано на нормальном уровне именно его свойство как DataSet и полноценно взаимодействовать с визуальными компонентами (через DataSource) он не может.
Хотя чисто программными методами работать с ним можно. Вот такие вот пироги...
Может кто двинет мудрую мысль по этому поводу?
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Основы работы с БД

Сообщение Attid » 29.04.2008 17:51:17

Vadim писал(а):Может кто двинет мудрую мысль по этому поводу?

Алекса надо спросить, он с ним работает. должен знать.
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Re: Основы работы с БД

Сообщение Troublemaker » 30.04.2008 06:08:46

Vadim писал(а):Если создать объект типа TMemDataset программно и так же программно заполнить его значениями, то эти значения благополучно существуют и их можно просмотреть в DBGrid'е Но только просмотреть...
То есть, править содержимое мемдатасета нельзя в любом случае?

Добавлено спустя 6 минут 35 секунд:
А никто не проверял, с новыми сборками лазаря/фп как дело обстоит? У меня временно не работает халявный диалап (уже почти неделю не могу поставить на закачку новую убунту), а тащить "чиста на пробу" полсотни мегов DSL-ем не могу себе позволить, ибо дорого.
Аватара пользователя
Troublemaker
постоялец
 
Сообщения: 292
Зарегистрирован: 16.04.2008 13:00:44
Откуда: Биробиджан, Дальний Восток

Re: Основы работы с БД

Сообщение Vadim » 30.04.2008 12:02:05

Troublemaker писал(а):То есть, править содержимое мемдатасета нельзя в любом случае?

Нельзя править именно в DBGrid'e или работая с любым визуальным компонентом через DataSource. А править программно, т.е. изменить текущее значение - пожалуйста, никаких проблем.
Troublemaker писал(а):А никто не проверял, с новыми сборками лазаря/фп как дело обстоит?

Я проверял со сборкой Лазаруса 20080426 - вот про него я и написал. Похоже что компонент memds там давно не менялся. И поскольку проблема там лежит отнюдь не на поверхности, то самостоятельно ковырять его для приведения к стандартному поведению DataSet нет особого смысла.
Если ты хочешь использовать именно memds и ничто другое, то вот что можно сделать:
1. Отказаться от DBGrid и, соответственно, от DataSource.
2. DBNavigator сдесь будет как раз в самую точку. :) Однако придётся использовать обычные (не DB) компоненты - CheckBox, Edit и т.п. Увы, передачу данных в\из них придётся организовывать вручную.
Код: Выделить всё
Заносим:
EditInt.Text:=mds.FieldByName('int1').AsString;
EditS.Text:=mds.FieldByName('s1').AsString;
CheckBox.Checked:=mds.FieldByName('b1').AsBoolean;

Передвижение по строкам таблицы осуществляется,Э соответственно, с помощью DBNavigator'а.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Основы работы с БД

Сообщение Troublemaker » 30.04.2008 12:28:07

Vadim писал(а):Передвижение по строкам таблицы осуществляется,Э соответственно, с помощью DBNavigator'а.
Спасибо за исследования и объяснения. Но ведь навигатору вроде тоже нужен датасет?

Есть где-нибудь нормальный туториал по работе с обычными гридами?

В кларионе всё довольно прозрачно: создается двусвязный список (queue) и он становится свойством List-a, аналога грида. Моя задача сводится к тому, чтобы напихать в queue данные, а list сам их отобразит.

В терминах паскаля очередь выглядит примерно так
TQueue:class(Tobject)
private prev:^TQueue
private next:^TQueue
public data:record...
end

С этой очередью я могу работать как с обычной таблицей БД, разве что индексы строить нельзя, зато могу отсортировать ее по любой комбинации полей, что в какой-то мере может заменить индекс.

А как это реализуется в дельфи/обжп? Как _я_ понимаю - теми самыми датасетами. А как насчет подробностей?
Цены на книги всем прекрасно известны, поэтому прошу помочь со ссылкой на толковый учебник по дельфи в электронном виде (желательно - НЕ djvu), где подобные моменты разжевывались бы, а не объяснялись на уровне вроде "заинклюдь пятый хэдер в нужный сырец".
Аватара пользователя
Troublemaker
постоялец
 
Сообщения: 292
Зарегистрирован: 16.04.2008 13:00:44
Откуда: Биробиджан, Дальний Восток

Re: Основы работы с БД

Сообщение Sergei I. Gorelkin » 30.04.2008 13:12:27

Для обычных гридов датасет не нужен.
Эти обычные гриды бывают двух типов: TStringGrid и TDrawGrid.
TStringGrid имеет свойство Cells[x,y] - двумерный массив, в которых записываются строки. Хранится именно копия данных (и именно в виде строк), ссылаться на уже готовое нельзя. При большом количестве ячеек имеют место тормоза и расход памяти. Я бы рекомендовал вообще никогда не использовать этот компонент.
TDrawGrid - "виртуальный" грид, умеет только рисовать. У него нужно назначать обработчик события OnDrawCell, в который передаются номера строки, столбца и координаты соотв. прямоугольника. Количество строк и столбцов задается свойствами RowCount и ColCount. В обработчике OnDrawCell берем откуда угодно нужные данные, и в этом прямоугольнике самостоятельно рисуем что угодно. Поскольку грид вызывает OnDrawCell только для тех ячеек, которые видны на экране, можно без тормозов отображать таблицы каких угодно размеров.
Чтобы обеспечить возможность редактирования - пишем обработчики OnGetEditText и OnSetEditText, и в свойстве Options устанавливаем goEditing = True.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1405
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: Основы работы с БД

Сообщение Vadim » 30.04.2008 13:45:48

Troublemaker писал(а):Спасибо за исследования и объяснения. Но ведь навигатору вроде тоже нужен датасет?

Ну ясен перец, что нужен. :) Так я, вроде бы, отказываться от DataSet'а и не предлагал...
Troublemaker писал(а):поэтому прошу помочь со ссылкой на толковый учебник по дельфи в электронном виде

Можно взять здесь, например:
http://www.delphiplus.org/downloads/doc/delphi7/d7_self-tuition_beg.zip - Иллюстрированный самоучитель по Delphi 7 для начинающих.
http://www.delphiplus.org/downloads/doc/delphi7/d7_self-tuition_prof.zip - 03 Иллюстрированный самоучитель по Delphi 7 для профессионалов.
Это они так называются, а вовсе не для определённых категорий... :) В формате HTML.
Первая весит 6 мег, вторая 3 мега. Можно было бы порекоммендовать ещё пару книжек, но к дежавю у тебя стойкая идиосинкразия, а pdf-ные книжки весят начиная от 30 мег и выше.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Основы работы с БД

Сообщение Troublemaker » 30.04.2008 14:20:55

Vadim писал(а): Troublemaker писал(а):Спасибо за исследования и объяснения. Но ведь навигатору вроде тоже нужен датасет?
Ну ясен перец, что нужен. :) Так я, вроде бы, отказываться от DataSet'а и не предлагал...

Я оговорился: навигатору нужен dataSOURCE, одним из свойств(?) которого является датасет. Или я что-то не так понял?

Vadim писал(а):к дежавю у тебя стойкая идиосинкразия,
Формат без полнотекстового поиска я не считаю удобным для книг, с которыми приходится активно работать. Для художественной литературы - вполне приемлемо, для деловой и учебной - туговато.
Я знаю, что есть композеры для djvu, позволяющие превращать эти файлы в шедевры с удобной навигацие и т.п., но, положа руку на сердце, ты много видел книг такого качества в djvu?

Понимаю, что уже подзадрал вопросами на уровне чайника, но я и есть чайник в дельфи. И честно пытаюсь разобраться с новой для меня идеологией разработки.
Аватара пользователя
Troublemaker
постоялец
 
Сообщения: 292
Зарегистрирован: 16.04.2008 13:00:44
Откуда: Биробиджан, Дальний Восток

Пред.След.

Вернуться в Потрепаться

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

Рейтинг@Mail.ru