Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по компонентам для Delphi, C++ Builder 2

Модерирует : ShIvADeSt

ShIvADeSt (20-06-2007 07:33): http://forum.ru-board.com/topic.cgi?forum=33&topic=8529  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106

   

dene14



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
hofa
Почему бы просто не сделать Query для данного стобца ???

Всего записей: 287 | Зарегистр. 06-04-2005 | Отправлено: 19:18 16-11-2006
hofa

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dene14
 
Подскажите пожалуйста, как это сделать...
Бился-бился - пока результата не добился...
 
Заранее спасибо.

Всего записей: 42 | Зарегистр. 09-10-2005 | Отправлено: 22:42 16-11-2006
SERGE_BLIZNUK

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
hofa
я не волшебник... и проверить сейчас негде. так, навскидку:
попробуйте сделать так:  
1) добавьте в ваш Query1 (или тот датасет, который вы используете все поля)
2) руками через правая кнопка \ "New field" добавьте поле, например, MyRecNo
вид ему поставьте Calculated, тип, например, "Integer"
3) в свойствах формы добавьте переменную (в public или private - в данном случае, неважно  
 например, MyPrivateNum : integer;
4) перед Query1.Open вставьте MyPrivateNum := 0 ;
а лучше это сделать в событии BeforeOpen
procedure TForm1.Query1BeforeOpen(DataSet: TDataSet);
begin
  MyPrivateNum := 0  
end;
 
5) на событии вашего Query1.OnCalcFields
 повесьте  обработчик вида  
procedure TForm1.Query1CalcFields(DataSet: TDataSet);
begin
  Inc(MyPrivateNum);
  DataSet.FieldByName('MyRecNo').AsInteger := MyPrivateNum
end;
 
вуа-ля.. у вас есть номер строк...
 
удачи.

Всего записей: 2014 | Зарегистр. 12-09-2002 | Отправлено: 05:35 17-11-2006 | Исправлено: SERGE_BLIZNUK, 05:41 17-11-2006
greenpc

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SERGE_BLIZNUK
вместо MyPrivateNum
можно Query1.RecNo

Всего записей: 401 | Зарегистр. 18-04-2003 | Отправлено: 07:46 17-11-2006
RomanTim

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
greenpc
Query1.RecNo (по крайней мере на ADODataSet) при одновременном BOF и EOF = True (это бывает если перейти в начало или в конец датасета) возвращает -1
 
SERGE_BLIZNUK
Через счетчик так в лоб не получится.  
Если все записи в грид не помещаются, то OnCalcFields вызывается при отображении записи, которой в гриде не было видно. Если перейти к последней записи, то нумерация продолжится снизу вверх.
Можно сделать  
procedure TForm1.Query1CalcFields(DataSet: TDataSet);
begin
  if if DataSet.FieldByName('Num').Value = Null then begin
    Inc(MyPrivateNum);
    DataSet.FieldByName('MyRecNo').AsInteger := MyPrivateNum
  end;
end;  
и при открытии датасета пробежать все записи - тогда они заполнятся нормальными значениями. Но это сработает на обычном датасете, адошный сбрасывает значения в 0 перед вызовом OnCalcFields
 
Добавлено:
Хотя нет, наврал, TBDEDataSet тоже чистит значения рассчитываемых полей

Всего записей: 375 | Зарегистр. 11-09-2003 | Отправлено: 09:12 17-11-2006 | Исправлено: RomanTim, 09:25 17-11-2006
Alex47



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
hofa

Цитата:
Подскажите пожалуйста такую компаненту dbgrid с возможностью добавления виртуального автоинкрементного столбца.  
То есть чтобы можно было построить таблицу в которой слева столбец выводил бы номера строк по порядку.

Если использовать DevExpress QGrid 5, то всё будет очень просто - без Calculated field в dataset.
1. Колонку номеров в QGrid надо создать как unbound, то есть не привязанную к какому-либо полю dataset.
2. В обработчике этой колонки OnGetDisplayText написать одну строку:
    if (ARecord.Index > -1) then
    AText := IntToStr(ARecord.Index + 1);
3. Удобно, что нумерация в этой колонке будет работать и при задании фильтров и сортировок по колонкам грида.

Всего записей: 366 | Зарегистр. 20-03-2003 | Отправлено: 09:55 17-11-2006 | Исправлено: Alex47, 09:58 17-11-2006
dene14



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
hofa:
 
Вот тебе пример:
 
Подробнее...

Всего записей: 287 | Зарегистр. 06-04-2005 | Отправлено: 11:04 17-11-2006 | Исправлено: dene14, 11:13 17-11-2006
SergeBS



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
RomanTim

Цитата:
при одновременном BOF и EOF = True (это бывает если перейти в начало или в конец датасета) возвращает -1  

Немного не так. В связке ADO+Delphi (5 и 7 версии, по крайней мере) ADO считает так:
№ записи реальный ->  № в ADO : 1->  -1(!!!), 2 ->  2 , 3 -> 3 ... и т.д. Так что abs(recno) и никаких проблем.

Всего записей: 272 | Зарегистр. 19-04-2005 | Отправлено: 11:27 17-11-2006
RomanTim

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
dene14
Как отобразить поле-идентификатор из таблицы я думаю вопросов ни у кого не возникает, только вот, на сколько я понял, человеку нужен порядковый номер записи в результирующем датасете.  
 
SergeBS

Цитата:
Немного не так. В связке ADO+Delphi (5 и 7 версии, по крайней мере) ADO считает так:
№ записи реальный ->  № в ADO : 1->  -1(!!!), 2 ->  2 , 3 -> 3 ... и т.д. Так что abs(recno) и никаких проблем.

Если бы все было так просто
Нажми Ctrl+End и увидишь, что для последней записи (если она в грид не помещается) тоже получается -1

Всего записей: 375 | Зарегистр. 11-09-2003 | Отправлено: 11:30 17-11-2006 | Исправлено: RomanTim, 11:32 17-11-2006
dene14



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
А кто-нибудь знает как получить значения определённых столбцов в ДатаСете для произведения с ними действий, например математических?
 
Хочется просто сделать скажем сумму всех значений в столбце... А ещё лучше было бы если это можно было сделать прямо в RxDBGrid'e... типа строка Итого: [нужные стобцы просуммированы]ю
 
Добавлено:
RomanTim
 
Хм, наверное я не так понял ... В таком случае я пас.

Всего записей: 287 | Зарегистр. 06-04-2005 | Отправлено: 11:33 17-11-2006
hofa

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всем огромное спасибо.
Буду пробовать.

Всего записей: 42 | Зарегистр. 09-10-2005 | Отправлено: 12:13 17-11-2006
RomanTim

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
dene14

Цитата:
А кто-нибудь знает как получить значения определённых столбцов в ДатаСете для произведения с ними действий, например математических?
 Хочется просто сделать скажем сумму всех значений в столбце... А ещё лучше было бы если это можно было сделать прямо в RxDBGrid'e... типа строка Итого: [нужные стобцы просуммированы]

А если средствами сервера? union select 'Итого', sum(столбец1), sum(столбец2)

Всего записей: 375 | Зарегистр. 11-09-2003 | Отправлено: 13:55 17-11-2006
royt

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Присоединяюсь к вопросу:
Цитата:
HOUPE
Подскажите плз. Компонент типа календаря только без дней, шобы месяцы и годы?
- есть что-либо еще, кроме ESBPCS?

Всего записей: 319 | Зарегистр. 18-08-2004 | Отправлено: 16:54 17-11-2006
dene14



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
RomanTim
Хм, идея, не додумался...
 
А вот про нумерацию столбцов - это интересно... Копать надо в сторону dgIndicator (опция DBGrid'a) мне кажется. Хотелось бы тоже знать как сделать чисто на будущее...
 
А ещё накопились вопросы...
 
1. Как сделать в RxDBGrid чередование фона строк? скажем одна белая, другая светло-серая.
2. Как сделать сортировку путём нажатия на имя столбца (кнопками я их сделал, а что дальше делать не знаю).
3. Как сделать чтобы не выдавало ошибку, что открыто 1000 курсоров при работе с объектами DBGrid'a или добавлением строк через обычный Insert?

Всего записей: 287 | Зарегистр. 06-04-2005 | Отправлено: 19:12 17-11-2006
lodyr



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
waik

Цитата:
Хотя конечно сейчас бывает, что гриды заставляют делать почти всё... но неверно это имхо.

Согласен. В продолжение этого.  
О "TDBAdvStringGrid" от (c) TMS Software.
Такое впечатление, что никто (из членов этого форума) это чудо не использовал для ВВОДА данных.
Если не так, то отзовитесь. Есть что обсудить. Лично мне, он очень нравится, но и крови он попил..
В результате, пришлось править исходники, а писать в суппорт, - мы нелегалы.
Думаю, не поймут..  

Всего записей: 710 | Зарегистр. 06-02-2005 | Отправлено: 22:02 17-11-2006 | Исправлено: lodyr, 22:05 17-11-2006
vidic777



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Здравствуйте Коллеги
 
Присоединяюсь к вопросам, заданным dene14. Для меня это тоже актуально.  

Всего записей: 1313 | Зарегистр. 16-02-2005 | Отправлено: 00:17 18-11-2006
RomanTim

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
lodyr
ДБгридом от TMS не пользуюсь, пользуюсь простым и по мелочи другими компонентами. Писал несколько раз в суппорт - вроде вполне внятно и оперативно отвечали, про лицензию (котрой нет ) не спрашивали

Всего записей: 375 | Зарегистр. 11-09-2003 | Отправлено: 01:14 18-11-2006
lodyr



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
RomanTim

Цитата:
 Писал несколько раз в суппорт

Значит пробовали "TDBAdvStringGrid" от (c) TMS Software в деле?

Цитата:
ДБгридом от TMS не пользуюсь

И отказались от него? Интересно по каким причинам? Ведь грид, действительно классный! Умеет очень многое и выглядит не хуже, чем DevExpress.
А, имхо, лучше  (можно использовать даже градиентную раскраску!)
Все вопросы, поднятые dene14, умеет решать, как и грид от Berg'а. Там даже в демо есть чередование фона строк.
Одно только но.. Оба  грида - вещь в себе, свойства и события (events).
Нельзя использовать имеющиеся наработки от стандартного грида, в отличие от грида Большакова. Но за качество надо платить глубоким, доскональным изучением и тестами.
 
RomanTim

Цитата:
вполне внятно и оперативно отвечали, про лицензию (котрой нет ) не спрашивали

А писали ли вы, к примеру, что использовали Demo-версию, типа того, что присматриваетесь, решаете купить, не купить?
 
 
 
 
 

Всего записей: 710 | Зарегистр. 06-02-2005 | Отправлено: 14:11 18-11-2006 | Исправлено: lodyr, 14:16 18-11-2006
RomanTim

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
lodyr

Цитата:
Значит пробовали "TDBAdvStringGrid" от (c) TMS Software в деле?
И отказались от него? Интересно по каким причинам? Ведь грид, действительно классный! Умеет очень многое и выглядит не хуже, чем DevExpress
 

Можно сказать что и не пользовался - одним глазом глянул и все, в качестве дбгрида у нас используется EhLib-овский - хватает. В суппорт писал по поводу TAdvStringGrid и TAdvPanel
 

Цитата:
А писали ли вы, к примеру, что использовали Demo-версию, типа того, что присматриваетесь, решаете купить, не купить?  

Про то каким образом он ко мне "попал" вообще не упоминал - просто написал что пак такой-то версии от такого-то числа. Писал, что в гриде течет память (летом было), ответили -  что в новой версии грида это исправлено. Потом жалился, что майская версия не работает в ДЛЛках из-за ГДИ+, сказали что думают, потом поправили (хотя и довольно спорным образом).
Но это все по поводу багов, как отреагируют на пожелания по улучшению не знаю - пробовать надо

Всего записей: 375 | Зарегистр. 11-09-2003 | Отправлено: 14:50 18-11-2006 | Исправлено: RomanTim, 14:50 18-11-2006
lodyr



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
RomanTim

Цитата:
Но это все по поводу багов, как отреагируют на пожелания по улучшению не знаю - пробовать надо

Вообще-то, это не пожелания по улучшению, а по-поводу неработоспособности режима  
EditPostMode :=epRow; (т.е. ввод всей строки) "TDBAdvStringGrid" для ввода/редактирования данных.
Может надумаю им сообщить в суппорт, раз они про лицензию (котрой нет ) не спрашивали. Писать надо на английском? Что-то не очень радует...
 
Для себя я поправил исходники, но в другом режиме:
 EditPostMode :=epCell; и заставил работать как должно быть при epRow  

Цитата:
 Из Help TMS
TEditPostMode
Unit
DBAdvGrid
TEditPostMode=(epCell, epRow);  
Description
Value        Meaning
epCell
epRow
 

Здорово?  Значит они про это знают.
Вот и нет особо желания, в открытую дверь...

Всего записей: 710 | Зарегистр. 06-02-2005 | Отправлено: 15:54 18-11-2006
   

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по компонентам для Delphi, C++ Builder 2
ShIvADeSt (20-06-2007 07:33): http://forum.ru-board.com/topic.cgi?forum=33&topic=8529


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru