Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.52 MB
Время: 0.025 c
9-1073144322
DDS
2004-01-03 18:38
2005.02.20
Где хранить ресурсы?


3-1106078305
Eraser
2005-01-18 22:58
2005.02.20
Восстановление базы данных mdb (Access)


4-1105350722
Дармидон
2005-01-10 12:52
2005.02.20
Как из службы запустить программу?


14-1107183401
Cosinus
2005-01-31 17:56
2005.02.20
Подскажите программу для разводки плат...


1-1107760505
Homa_Programer
2005-02-07 10:15
2005.02.20
инсталлятор