Виртуальная библиотека Delphi - [48]
Меня интересует возможность подсчета суммы по таблицам, которые уже находятся на форме.
Есть очень простой способ — предположим, что у вас есть на форме Query1, DataSource1, DBGrid1. Добавьте на эту же форму компоненты Query2, DataSource2, DBText1. Установите property Query2.DataSource=DataSource1. В Query2.SQL напишите
>SELECT SUM(FieldName) FROM TableName
где TableName — имя той же таблицы что и у Query1, а FieldName — имя столбца по которому производится подсуммирование. Далее свяжите между собой Query2, DataSource2 и DBText1.
При изменении Query1 (если конечно Query1.RequestLive=True) Query2 будет автоматически перевыполняться. Это решение хоть и простое, но неэкономичное — особенно при большом количестве записей в исходной таблице. Более того, запрос Query2 должен иметь WHERE идентичный Query1.
Для подсчета сумм правильнее использовать событие TQuery.OnCalcFields. Хорошим примером является X:\DELPHI\DEMOS\DB\MASTAPP\MASTAPP.DPR.
8. Использование кавычек в параметризированном запросе.
Мой запрос получает параметр. Проблема в том, что строка параметра содержит " (двойную кавычку), которая приводит к Runtime Error.
Вам необходимо использовать динамический SQL-запрос, иначе при указании например
>WHERE TABLE.FIELD = 'let"ter'
вы получите ошибку.
9. Как создать отдельный компонент TTable?
Легко и просто — точно также как и обычный компонент. При этом в качестве параметра конструктору можно передавать значение nil.
>var
> MyTable: TTable;
>begin
> MyTable := TTable.Create(nil);
> try
> MyTable.DatabaseName := 'MyDB';
> MyTable.TableName := 'MyTable.db';
> Mytable.IndexName := 'MyIndex';
> MyTable.Open;
> { делать то, что надо }
> finally
> MyTable.Free;
> end;
>end;
10. Как узнать, какая ячейка при просмотре TDBGrid текущая?
Здесь процедура для сохранения текущего номера строки и колонки. Следующий код в методе MyDBGridDrawDataCell обновляет переменные Col и Row (которые не должны быть локальными для этого метода) каждый раз, когда таблица перерисовывается. Используя этот код, вы можете считать, что Col и Row указывают на текущую колонку и строку соответственно.
>var
> Col, Row: Integer;
>procedure TForm1.MyDBGridDrawDataCell(Sender: TObject; const Rect: TRect;
> Field: TField; State: TGridDrawState);
>var
> RowHeight: Integer;
>begin
> if gdFocused in State then
> begin
> RowHeight := Rect.Bottom - Rect.Top;
> Row := (Rect.Top div RowHeight) - 1;
> Col := Field.Index;
> end;
>end;
11. Как выделить цветом текущую строку в TDBGrid?
Для TDBGrid в свойстве Options установите dgRowSelect в True.
12. Как изменить цвет ячейки в TDBGrid?
Введите следующий код в обработчике события OnDrawDataCell:
>procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
> Field: TField; State: TGridDrawState);
>begin
> if gdFocused in State then
> with (Sender as TDBGrid).Canvas do
> begin
> Brush.Color := clRed;
> FillRect(Rect);
> TextOut(Rect.Left, Rect.Top, Field.AsString);
> end;
>end;
Установите свойство DefaultDrawing в True. Здесь перерисовывается только выделенная ячейка. Если установить DefaultDrawing в False, то вы должны самостоятельно перерисовать все ячейки аналогично примеру.
13. Как узнать, что пользователь перешел на другую запись, например, в TDBGrid?
Переход на новую запись — это событие, которое относится не к визуальному компоненту, а к источнику данных. Соответствующее событие называется OnDataChange и имеется у компонента TDataSource.
14. Как устанавливать собственный цвет или шрифт для столбца TDBGrid?
Выключите property DefaultDrawing, и обрабатывайте событие OnDrawDataCell:
>procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
> Field: TField; State: TGridDrawState);
>begin
> if Field.FieldName = 'Name' then DBGrid1.Canvas.Font.Style := [fsBold];
> DBGrid1.DefaultDrawDataCell(Rect, Field, State);
>end;
Это приведет к тому, что содержимое столбца 'Name' будет показываться жирным шрифтом.
В Delphi 2.0 вы можете использовать редактор столбцов для той же самой цели.
15. Почему указатель ползунка в TDBGrid не показывает текущее положение в таблице?
Дело в том, что TDBGrid предполагает многопользовательский доступ к таблице. В этом случае другие пользователи этой же таблицы могут добавлять или удалять записи, в результате информация о количестве записей на текущий момент становится неопределенной.
Конечно, в однопользовательском варианте количество записей всегда известно, но поскольку TDBGrid работает через промежуточный источник данных DataSource, ему неизвестен конкретный способ доступа к данным — навигационный или SQL. Например, для SQL существует только один способ узнать количество записей — выполнить специальный запрос с их подсчетом, а на это может потребоваться значительное время.
По всем этим причинам TDBGrid является универсальным средством для просмотра таблиц, которое работает во всех случаях и с любыми источниками данных.
16. Как установить фокус на определенное поле в TDBGrid?
Используйте код:
>DBGrid1.SelectedField := Table1SomeField;
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге собраны предания и поверья о призраках ночи — колдунах и ведьмах, оборотнях и вампирах, один вид которых вызывал неподдельный страх, леденивший даже мужественное сердце.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
…«Песнь о Нибелунгах» принадлежит к числу наиболее известных эпических произведений человечества. Она находится в кругу таких творений, как поэмы Гомера и «Песнь о Роланде», «Слово о полку Игореве» и «Божественная комедия» Данте — если оставаться в пределе европейских литератур…В. Г. Адмони.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.