Вопрос № 94468: Здравствуйте уважаемы эксперты, сейчас уже рассматривается один мой вопрос на минифоруме, но чтобы не путать задачи я хотел бы вам задать вопрос по другой проблемке в отдельном минифоруме т.к. этот вопрос отличается от предыдущего. DBGrid отображает ...Вопрос № 94517: Здравствуйте! Я установила QReport для создания отчетов. Отчеты на основе статичных запросов я успешно реализовала (размещая текст запроса в св-ве SQL в редакторе
свойств). Сейчас мне необходимо формировать отчет, запрос для которого формируется в пр...Вопрос № 94573: здраствуйте Уважаемые,
подскажите мне книги для изучения InterBase/Firebird/Yaffil
я практически ничего не знаю по этим базам.
короче мне надо с нуля изучать.
...
Вопрос № 94.468
Здравствуйте уважаемы эксперты, сейчас уже рассматривается один мой вопрос на минифоруме, но чтобы не путать задачи я хотел бы вам задать вопрос по другой проблемке в отдельном минифоруме т.к. этот вопрос отличается от предыдущего. DBGrid отображает данные по нужному документу из таблицы РК1111 (так она названа в Access) в поле DBGrid я редактирую строки. сейчас у меня выводятся все столбцы и получается чтото типа редактора для моей программы, но для удобства мне нужно чтобы допустим при нажатии на Button выводились
данные с тойже таблицы (уже отредактированной) но только тех столбцов в строчках которых есть записи. т.е. я ввожу поиск строки по какомуто столбцу Например: столбец "Номер" а строка 218621 это у меня уже работает, но вот остальные столбцы, которые не заполнены мне не нужны. Это все происходит во время выполнения программы а не при написании кода, где можно заранее ввести отображение нужных столбцов. Буду очень презнателен если вы мне поможите. Заранее с
пасибо.
писать имена полей таблицы которые нужно отобразить в DBgrid
select поле1,поле2,поле3 fromPK1111 where Номер=218621
при этом сразу в запросе полям можно давать имена
select поле1 as Номер,поле2 as ЧтоТоЕще,поле3 as ЧтоНибудь fromPK1111 where Номер=218621
а второй способ
кликнуть по DBGrid правой кнопкой мыши и там есть в меню Columns Editor в нем еще на этапе проектирования задаются столбцы для отображения в DBGrid их имена и ширина
после создания колонки нужно указать FieldName - это и будет название колонки из запроса т.е. в случае первого моего запроса поле1 а во втором Номер
--------- Я знаю что ничего не знаю, но я знаю больше, чем тот кто думает что знает все
Ответ отправил: Кэр Лаэда (статус: Студент)
Ответ отправлен: 09.07.2007, 13:35
Отвечает: Виктор Пырлик
Здравствуйте, Мишин Станислав Михайлович!
Ваша задача не совсем тривиальна (и мне не понятно зачем это), поэтому, я предложу два этапа:
1. Нам надо управлять видимостью колонками (столбцами) DBGrid, следовательно, необходимо создать форму – небольшого размера, например, 350 х 350, на эту форму положить компонент CheckListBox и добавить кнопку для закрытия этой формы.
2. В событии OnShow этой формы написать процедуру заполнения листбокса
************** это наша дополнительная форма ********************
// щелкая по строкам ческлистбокса – мы упарвляем видимостью колонок
procedure TForm1.CheckListBox1ClickCheck(Sender: TObject);
begin
DBGrid1.Columns[CheckListBox1.ItemIndex].Visible := CheckListBox1.Checked[CheckListBox1.ItemIndex];
end;
// в этой процедуре мы заносим все поля в ческлистбокс
procedure TForm1.FormCreate(Sender: TObject);
var i:integer;
s:string;
begin
CheckListBox1.Clear;
for i:=0 to DBGrid1.Columns.Count-1 do
begin
s := DBGrid1.Columns[i].Title.Caption;
CheckListBox1.Items.Add(s);
CheckListBox1.Checked[CheckListBox1.Items.IndexOf(s)] := DBGrid1.Columns[i].Visible;
end;
end;
*****************************************************************
Для решения основной задачи – придется решить круг вопросов
Таблица – DBGrid, будет отображать все записи, за все время, и, если нет сегодня записей в колонках, то «вчера» и т.д. могут быть, следовательно – надо использовать фильтр на сегодняшний день (например). Тогда, можно использовать цикл:
// тут, по событии кнопки, мы делаем не видимыми колонки пустые, таблица должна быть отфильтрована на
// нужные нам записи
procedure TForm1.BitBtn1Click(Sender: TObject);
var i:integer;
begin
for i:=0 to DBGrid1.Columns.Count-1 do
begin
if(DBGrid1.Columns.Items[i].Field.AsString = '')then
DBGrid1.Columns[i].Visible := false
else
DBGrid1.Columns[i].Visible := true;
CheckListBox1.Checked[i] := DBGrid1.Columns[i].Visible;
end;
end;
это основная идея, поработав, вы поймете – DBGrid это не просто «редактор», этот компонент подчиняется правилам базы данных, и следовательно, решение задачи в той постановке что вы задали можно, но требует дополнительных усилий и не понятно зачем.
--------- Если ничего не помогло - надо читать инструкцию
Ответ отправил: Виктор Пырлик (статус: 6-ой класс)
Ответ отправлен: 09.07.2007, 15:01
Вопрос № 94.517
Здравствуйте! Я установила QReport для создания отчетов. Отчеты на основе статичных запросов я успешно реализовала (размещая текст запроса в св-ве SQL в редакторе свойств). Сейчас мне необходимо формировать отчет, запрос для которого формируется в программе, отбираются данные по признаку, указываемому пользователем. QReport не хочет работать с TQuery, у которого не прописано свойство SQL, пишет, что "SQL statement no aviliable". Как можно обойти такую проблему?
Отправлен: 09.07.2007, 20:22
Вопрос задала: Mammka (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 3)
Отвечает: Shveps
Здравствуйте, Mammka!
Перед выполнением запроса советую в свойстве SQL вашего компонента от TQuery прописать скрипт сформированного вами запроса. Например:
Query1.Active := false; //закрываем запрос
//присваиваем значение переменной типа string, в которой хранится ваш запрос
Query1.SQL.Text := SQLScript;
Query1.Active := true; //открываем запрос
Советую обратится к компонентам типа ADO. В них горахдо гиче функционал. Хотя, вроде бы, QReport не работает с ними. Во всяком случае попробовать стоит :)
Есть более продвинутая альтернатива QReport. Это FastReport.
--------- Пиво ф топку !!! Водку Тоже !!!
Ответ отправил: Shveps (статус: 5-ый класс)
Ответ отправлен: 10.07.2007, 07:49
Вопрос № 94.573
здраствуйте Уважаемые,
подскажите мне книги для изучения InterBase/Firebird/Yaffil
я практически ничего не знаю по этим базам.
короче мне надо с нуля изучать.
Отвечает: Виктор Пырлик
Здравствуйте, Волошин В.В.!
Очень хорошая книга по Firebird:
«Firebird руководство разработчика баз данных» Хелен Борри, Санкт-Петербург, «БХВ-Петербург»
В дополнение, можно взять:
Мир Interbase Архитектура, администрирование и разработка приложений баз данных в Interbase Firebird Yaffil, А.Н. Ковязин С.М. Востриков Москва, КУДИЦ-ОБРАЗ
Если вы не знакомы с теорией баз данных, то, желательно почитать теорию, например (но не обязательно)
БАЗЫ ДАННЫХ модели, разработка, реализация
УЧЕБНИК Т. Карпова Санкт-Петербург, ПИТЕР.
--------- Если ничего не помогло - надо читать инструкцию
Ответ отправил: Виктор Пырлик (статус: 6-ой класс)
Ответ отправлен: 10.07.2007, 10:32
Отвечает: sir henry
Здравствуйте, Волошин В.В.!
Поскольку рассылка называется "СУБД и Дельфи", то Вам необходимы книги не только по БД, но и по взаимодействию БД и Дельфи.
1. Книга Хелен Борри. Firebird: руководство разработчика баз данных.
По полноте описания FireBird вне конкуренции. На books.ru:
http://www.books.ru/shop/books/490929
2. Что касается взаимодействия Дельфи и FireBird, то книг много и однозначно выбрать что-либо трудно. Вот например:
- Шкрыль. Разработка клиент-серверных приложений в Delphi (+ CD).
http://www.books.ru/shop/books/357724
- Фаронов. Программирование баз данных в Delphi 7. Учебный курс
Эта книга скорее справочник, а не учебник. По крайней мере я ею пользуюсь именно как справочником. :)
http://www.books.ru/shop/books/84772
Ответ отправил: sir henry (статус: Академик) Россия, Красноярск ---- Ответ отправлен: 10.07.2007, 11:02