Текущий архив: 2005.02.20;
Скачать: CL | DM;
ВнизКак значения запросы правильно расположить в ДБГРИДЕ? Найти похожие ветки
← →
Janb (2005-01-19 07:51) [0]Уважаемые мастера, у меня такой вот вопрос с помощью adoquery делаю запрос:
adoquery1.SQL.Clear;
adoquery1.SQL.Add("select *, p8-p5 as r1, p9-p6 as r2, p10-p7 as r3, p12-p11 as r4 from p1");
В принципе все работает, запрос возвращает правильные значения.
Но, вот эти вот r1, r2.. должны находится среди колонок, т.е. типа колонка1, колонка2, колонка1-колонка2,
А они у меня выходят в конце грида.
Пожалуйста очень надо. Помогите!
← →
sniknik © (2005-01-19 08:03) [1]порядок столбцов можно задать упорядочив поля в компонентах датасета(adoquery) и самого грида. ткни в adoquery двойным кликом мыши к примеру, добавь все поля, после переставляй, меняй порядок.
или в запросе все поля явно пропиши, без *, в нужном порядке.
← →
janb (2005-01-19 08:42) [2]В том то и дело что я использую один query и один дбгрид для отображения нескольких таблиц. также таблица очень большая (много колонок) второй вариант тоже не удобен.
← →
ЮЮ © (2005-01-19 08:44) [3]третьего не дано
← →
sniknik © (2005-01-19 09:06) [4]третьим можно считать переупорядочивание вручную. (то же что первый вариант но в рантайме (програмно, пишеш код на очистку/и создание полей в компонентах, упорядочиваеш, в принципе порядок можно записывать (в ini) для каждого запроса, тогда он будет настраиваемым самим юзером)
← →
Danilka © (2005-01-19 09:19) [5][2] janb (19.01.05 08:42)
> второй вариант тоже не удобен.
чем не удобен? один раз лениво перечислить необходимые поля (работы на полторы минуты)?
вообще, на мой взгляд, использовать * просто некрасиво и страшно. например, если в процессе работы понадобится еще одно поле добавить в таблицу, которое нужно для рассчетов, но не нужно для отображения, придется перерывать все исходники и крячить, крячить, крячить.. :))
← →
Danilka © (2005-01-19 09:20) [6][4] sniknik © (19.01.05 09:06)
Кажись, эхлиб так умеет, ничего дописывать не надо, сам сохраняет в реестр или ини. Правда точно не уверен.
← →
Janb (2005-01-19 11:08) [7]sniknik © (19.01.05 09:06) [4]
Можно подробнее
Danilka © (19.01.05 09:20) [5]
Для нескольких таблиц с множеством количеств полей неудобно
← →
Соловьев © (2005-01-19 11:10) [8]>В том то и дело что я использую один query и один дбгрид для
>отображения нескольких таблиц. также таблица очень большая (много
>колонок) второй вариант тоже не удобен.
Чем это обусловлено? На чем экономим?
← →
Danilka © (2005-01-19 11:12) [9][7] Janb (19.01.05 11:08)
> Для нескольких таблиц с множеством количеств полей неудобно
Очень удобно для семисот таблиц и полутора тысяч вьюх, некоторый из которых возвращают по 50-100 полей.
← →
Janb (2005-01-19 11:21) [10]А с помощью Table можно сделать такое?
← →
Janb (2005-01-19 12:29) [11]
> Соловьев © (19.01.05 11:10) [8]
> >В том то и дело что я использую один query и один дбгрид
> для
> >отображения нескольких таблиц. также таблица очень большая
> (много
> >колонок) второй вариант тоже не удобен.
>
> Чем это обусловлено? На чем экономим?
попробовал это метод но почему то запрос не возвращает значение с вычислениями (колонка1-колонка2 as к3) а показывает только те что физически существуют
← →
Соловьев © (2005-01-19 12:36) [12]>запрос не возвращает значение с вычислениями (колонка1-колонка2 as
>к3)
запрос ??? Это одно из важным умений запроса!
← →
Janb (2005-01-19 12:40) [13]Поставил несколько компонентов query
открываю sql пишу
adoquery1.SQL.Add("select *, p8-p5 as r1, p9-p6 as r2, p10-p7 as r3, p12-p11 as r4 from p1");
Делаю adoquery1.active=true
смотрю дбгрид только те поля которые существуют а r1,r2.. нет
← →
Соловьев © (2005-01-19 12:57) [14]>смотрю дбгрид
Даблклик по гриду и удалить колумны
← →
Janb (2005-01-19 13:39) [15]Спасибо помогло! только вот не по гриду а по query оказся
← →
sniknik © (2005-01-19 15:06) [16]> Можно подробнее
допустим есть запрос select * from Table1
с кучей полей (под * скрываюшимися) а нам нужно только два и запрос править не хотим... первое Dat а оно последнее в списке нужно первым и второе Name а оно первое.
описываем поля (для переменного числа можно массив сделать)
private
ADODat: TField;
ADOName: TField;
public
при старте(на создании формы к примеру) программы создаем поля в нужном порядке
ADODataSet1.Close;
ADODat:= TDateTimeField.Create(self);
ADODat.DisplayLabel:= "Дата";
ADODat.FieldName:= "Dat";
ADODat.DataSet:= ADODataSet1;
ADOName:= TStringField.Create(self);
ADOName.DisplayLabel:= "Имя (ФИО)";
ADOName.FieldName:= "Name";
ADOName.DataSet:= ADODataSet1;
ADODataSet1.Open;
все, будет в том порядке как создали, порядок должен быть гдето описан.
после того как создано менять его элементарно (по тем 2 что создали)
if ADOName.Index = 0 then ADOName.Index:= 1
else ADOName.Index:= 0;
ну и естественно сохранять этот порядок после (вместе с типом), в зависимости от индекса в полях.
> Спасибо помогло! только вот не по гриду а по query оказся
по гриду тоже можно.
← →
Danilka © (2005-01-19 15:09) [17][16] sniknik © (19.01.05 15:06)
> допустим есть запрос select * from Table1
> с кучей полей (под * скрываюшимися) а нам нужно только два
> и запрос править не хотим...
Не слишком красиво, на мой взгляд, тащить на клиента всю кучу полей, когда необходимо только 2..
← →
msguns © (2005-01-19 15:33) [18]Чтобы грид перезаполнялся полями изменившегося (нового) запроса, надо после закрытия и отсоединения старого датасета (TDBGrid.DataSource.DataSet := nil), давать Columns.RebuildColumns, а потом присваивать новый (или динамически модифицированный старый), предварительно открытый датасет. Правда, ширину и порядок колонок, стиль и тексты заголовка и т.д. придется крыжать ручками.
← →
sniknik © (2005-01-19 15:37) [19]> Не слишком красиво, на мой взгляд, тащить на клиента всю кучу полей, когда необходимо только 2..
см. условие вопроса и ход обсуждения.
и потом это пример, или ты хочеш на 128 +- 96 реальных полях обьяснять как можно поля создавать? обьясни сам тогда.
← →
Janb (2005-01-19 15:41) [20]
> Danilka © (19.01.05 15:09) [17]
Если бы мне было нужно только две я бы даже вопрос не ставил бы.
Все равно всем спасибо!
← →
Danilka © (2005-01-19 16:07) [21][19] sniknik © (19.01.05 15:37)
> потом это пример
понятно. я сразу не допер, что только 2 поля из-за того, чтобы сюда много кода с примером не фигачить. :)
тогда, могу предложить все-таки хранить, в ини или, еще где, полное описалово всех полей, иначе, предположим, юзер поудалял все поля, оставив 2, а завтра ему понадобилось еще одно, а описалова (имя столбца, размер и т.д.) больше нет.
Страницы: 1 вся ветка
Текущий архив: 2005.02.20;
Скачать: CL | DM;
Память: 0.5 MB
Время: 0.037 c