Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2005.02.20;
Скачать: [xml.tar.bz2];

Вниз

Как значения запросы правильно расположить в ДБГРИДЕ?   Найти похожие ветки 

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.042 c
8-1099136406
Tatarin
2004-10-30 15:40
2005.02.20
MP2 MP3


14-1106407474
Беспечный_Ангел
2005-01-22 18:24
2005.02.20
DelphiWorld


6-1102415874
Prankster.
2004-12-07 13:37
2005.02.20
Получение файла из сети


1-1107280449
SaveDialog123
2005-02-01 20:54
2005.02.20
SaveDialog


1-1107764733
Dmitriy A
2005-02-07 11:25
2005.02.20
злобная формула





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский