Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.06.2007, 10:05   #11
Gorin
Пользователь
 
Регистрация: 26.06.2007
Сообщений: 36
По умолчанию

Цитата:
Сообщение от Pitbull Посмотреть сообщение
ну , это и есть вычисляемое поле -)
вот тебе пример.... Вводишь 2 поля, а 3-е вычисляется=)))
Table1.Edit;
Table1field1.Value := 12;
Table1field2.Value := 2;
Table1field3.Value := Table1field1.AsInteger * Table1field2.AsInteger ;
Table1.post;

или


Table1.edit;
Table1.Fields[0].Value := 12;
Table1.Fields[1].Value := 2;
Table1.Fields[2].Value := Table1.Fields[0].AsInteger * Table1.Fields[1].AsInteger ;
Table1.Post;

Значения 1 и 2 поля можешь вводить через какие-нибудь компоненты.....
Что ж я так криво обьясняю
То, что вы привели будет работать в зависимости от положения маркера. То есть я скажем ввожу это в событие OnCalcFields и он считает. Но мне нужно другое. Давайте так, есть колонки-они идут сверху вниз есть поля они слева- направо, а есть ячейка.. Мне надо чтобы в колонке первые 2 ячейки сверху вниз я ввожу а третья вычисляется, то есть это относиться к одному Field. Более того, мне надо чтобы это делалось в независимости от положения маркера

Последний раз редактировалось Gorin; 27.06.2007 в 10:17.
Gorin вне форума Ответить с цитированием
Старый 27.06.2007, 11:21   #12
Andrei
Форумчанин
 
Регистрация: 20.06.2007
Сообщений: 270
По умолчанию

Цитата:
Сообщение от Gorin Посмотреть сообщение
Вычисляемые поля,понятно. Но мне надо, чтобы в одном поле можно было вводить и одновременно там были бы вычисляемые ячейки. То есть первые 3 ввел 4-сумма. И более того, чтобы конкретно это ячейка была ReadOnly.
IMHO: Этого в DBGrid сделать нельзя (хотя, если кому-то это удалось, пусть поделится, буду очень благодарен). Потому что он не отслеживает весь объем записей БД. В лучшем случае, для ускорения работы обрабатывает с десяток записей до и после выведенных на экране. У тебя же может возникнуть потребность обсчитать подобным образом несколько сотен записей базы данных.

Нечто подобное тому, что ты хочешь, можно замутить через DescisionCube с использованием SQL запросов. Но он создан для отображения результатов выборки и режим редактирования, кажется, не поддерживает. Сам я мало использовал этот компонент на практике . Только в ознакомительных целях и только для отображения. Но получилось!

Если данных у тебя не много, проще выгрузить ее в Excel и просматривать ее там.
-Кукушка, кукушка! Накукуй мне сто лет!
-А накукуй тебе столько?

(с) Библия. Вольный перевод с древнееврейского.
Andrei вне форума Ответить с цитированием
Старый 27.06.2007, 14:18   #13
Pitbull
детский тренер
Форумчанин
 
Аватар для Pitbull
 
Регистрация: 08.06.2007
Сообщений: 532
По умолчанию

короче я тебе подкину идею...Она карявая,конечно... но что-то работает....
вставляешь эту муть в цикл while table1.eof<>true then do......end;
и проверяешь(if then) на то, что номер строки кратный 3-м , для этого пользуйся оператором DIV..... переменную для div берешь ,например, j , которое перед этим приравниваешь к : j:=table1.recNo;
Перемещаешься по таблице table1.next; в начало table1.first....
Слепи как-то.. подумай....

А вот само тело,которое вставляешь в тело IF.... Then:
table1.MoveBy(-1);// перемещаешься на позицию перед
a:= Table1field2.Value ;//сохраняешь значение в переменную а
Table1.MoveBy(-1);// перемещаемся еще на одну позицию
b:= Table1field2.Value;//присваиваем значение....
Table1.MoveBy(2); возвращаемся в поле,куда нужно писать....
Table1.Edit;//режим редактирования табл.
Table1field2.value := a + b; // записывем
Table1.Post ;//сохранение....

Организуй принудительный выход из цыкла!!! потому-что зависать будет...
Братка, я тебе идею подал... А там решай сам....тут нужно как-то в цикле все сделать...

Можно еще воспользоваться Маркером (bookmark).... Но тут нужно думать....
В общем дерзай,братумба.....
table1.first;
while table1.eof<>true then do begin
if ...DIV... Then do begin{мой код} end;
запоминаешь позицию(bm1:=table1.bookmark) ,куда вставлял с помощью маркера и выходишь принудительно(не забудь объявить маркер bm1 : TbookmarkStr)... при следующем нажатии устанавливаешь позию на маркер: table1.bookmark := bm1;
end;


короче идея есть...Думай.... Може, я что-то и намудрил, просто времени мало ,братка... Напряги на работе.... Всех благ
Я злой и страФный серррый воФк, и в пАрАсятах знаю толк - ppp ppp pp p pp pp

Последний раз редактировалось Pitbull; 27.06.2007 в 16:45.
Pitbull вне форума Ответить с цитированием
Старый 27.06.2007, 15:22   #14
А. Долматов
Форумчанин
 
Аватар для А. Долматов
 
Регистрация: 15.02.2007
Сообщений: 183
По умолчанию

Ок. Если вопрос стоит так, то создай в своей таблице дополнительное пустое поле. Ведь, чтобы вводить и считать таблица должна быть в режиме редактирования, да и совсем забыл при перемещении по строкам грида данные автоматом записываются в таблицу, второе условие которое необходимо это обязательное заполнение обоих столбцов для подсчета, если какое-нить значение отсутствует, то ничего считаться не будет. соответственно ты вводишь в 2 колонки значения, после этого жмешь на кнопку расчитать и результаты последовательно записываешь в то самое дополнительное поле. Обновляешь таблицу путем её закрытия и открытия и вот тебе подсчет. Я дал только идею.
Знать все невозможно, в силу того, что жить бы стало неинтересно.
А. Долматов вне форума Ответить с цитированием
Старый 27.06.2007, 16:24   #15
Pitbull
детский тренер
Форумчанин
 
Аватар для Pitbull
 
Регистрация: 08.06.2007
Сообщений: 532
По умолчанию

Цитата:
Сообщение от А. Долматов Посмотреть сообщение
Ок. Если вопрос стоит так, то создай в своей таблице дополнительное пустое поле. Ведь, чтобы вводить и считать таблица должна быть в режиме редактирования, да и совсем забыл при перемещении по строкам грида данные автоматом записываются в таблицу, второе условие которое необходимо это обязательное заполнение обоих столбцов для подсчета, если какое-нить значение отсутствует, то ничего считаться не будет. соответственно ты вводишь в 2 колонки значения, после этого жмешь на кнопку расчитать и результаты последовательно записываешь в то самое дополнительное поле. Обновляешь таблицу путем её закрытия и открытия и вот тебе подсчет. Я дал только идею.
я ему уже такое предлагал..его такое не устраивает
Я злой и страФный серррый воФк, и в пАрАсятах знаю толк - ppp ppp pp p pp pp
Pitbull вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как получить доступ к ячейке DBGrid RatMir БД в Delphi 1 16.06.2008 22:35
можно ли в stringgrid задавать размер конкретной ячейки SeЯgey Помощь студентам 3 26.04.2008 18:47
Удаление конкретной строки Memo JakSon Общие вопросы Delphi 6 03.03.2008 09:35
картинка (jpeg) в ячейке Andrew999 Microsoft Office Excel 2 04.02.2008 04:49
Работа с конкретной строкой в DBGrid alikon1 БД в Delphi 1 10.12.2007 09:07