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

Вниз

сдвиг данных в dbgrid e на 1 вверх   Найти похожие ветки 

 
kate158   (2008-08-19 09:08) [0]

Уважаемые мастера!Помогите справиться с такой задачей.На форме есть 2 dbgrida.
В одном-таблица из access"a с 8 столбцами (подключаюсь через ado).Во втором нужно изобразить ту же таблицу, что и в первом,только данные должны быть сдвинуты вверх на 1.Последняя запись = разности 2 последних ячеек из 1 таблицы.
допустим,в первой таблице числа:
1
2
5
во второй должны быть:
2
5
3
Может,у кого-нибудь есть идеи как это реализовать?


 
Vlad Oshin ©   (2008-08-19 09:15) [1]

first
DataSet.Delete;
DataSet.Append;


 
oldman ©   (2008-08-19 09:15) [2]


> Последняя запись = разности 2 последних ячеек из 1 таблицы.


С этого места начинай думать...

Какая к черту запись?


 
oldman ©   (2008-08-19 09:16) [3]


> Vlad Oshin ©   (19.08.08 09:15) [1]


Да вы шутник...
При "листании" первого грида, второй сойдет с ума.


 
{RASkov} ©   (2008-08-19 09:19) [4]

В файлах таблиц записи хранятся в произвольном порядке. При отображении в гридах, их можно сортировать, фильтровать - как угодно, по каким-либо определенным правилам. А вот сдвигать нет смысла.... Можно конечно и сдвиг съэмулировать добавочным столбцом по которому произвести сортировку и расчитать "последнюю" запись.....
Но может стоит пересмотреть задачу? И, например, при малом количестве записей в первой таблице, формировать стринггрид "по правилу сдвига"...
В общем задачу, я думаю, нужно пересмотреть...


 
kate158   (2008-08-19 09:25) [5]

в первой таблице 56000 строк.


 
{RASkov} ©   (2008-08-19 09:26) [6]

А если тупо, то нет проблем:

T1.First;
T1.Next;
T2.Очистить;
while not T1.EOF do begin
T2.ДобавитьДанныеИз(T1);
T1.Next;
end;
T2.ПоследняяЯчейка:=T2.ПоследняяЯчейка + T2.ПредпоследняяЯчейка;

Но это не даст ни какой гарантии, что данные будут отображаться как нужно.... В общем это фуфло)


 
oldman ©   (2008-08-19 09:27) [7]


> Последняя запись = разности 2 последних ячеек из 1 таблицы.


если весь сыр-бор именно из-за этого, использовать второй грид неправильно.

Можно ведь и тремя TLabel обойтись :)


 
{RASkov} ©   (2008-08-19 09:30) [8]

> [5] kate158   (19.08.08 09:25)

Не мало.... Что-то тогда все это странно с последней ячейкой)

В прочем, скопировать первую таблицу один в один во вторую.
Затем во второй удалить "первую" запись, и сделать "финт ушами" с последними...


 
Vlad Oshin ©   (2008-08-19 09:32) [9]

1. select a from b order by с
2. insert into #temp select a from b order by с

2 отображения таблицы, кто с ума сойдет?


 
oldman ©   (2008-08-19 09:34) [10]


> Vlad Oshin ©   (19.08.08 09:32) [9]


После прокрутки первого грида хотя бы на строку вниз, во втором надо убрать все, что туда insert )))


 
Sergey13 ©   (2008-08-19 09:37) [11]

> [0] kate158   (19.08.08 09:08)
> Может,у кого-нибудь есть идеи как это реализовать?

1. В первую очередь надо уйти то ексельного мЫшления. Строчки, ячейки, сдвинуть.
2. Думать больше о функционале программы, а не о дизайнерских "изысках". По крайней мере идти от функционала к дизайну, а не наоборот.

> Последняя запись = разности 2 последних ячеек из 1 таблицы.

А зачем для этого другая таблица? Вычисляемое поле в первой с разностью нужных полей.


 
Vlad Oshin ©   (2008-08-19 09:38) [12]

мне, кстати, очень понравились комментариии, по ctrl+alt+стрелка
фигурные скобки имеют ерундовину, а тут удобно, выделил,  ctrl+alt+стрелка и все закомментилось со сдвигом, ctrl+alt+стрелка вторая и все комменты сняты, сдвиг вернулся


 
Vlad Oshin ©   (2008-08-19 09:39) [13]

[12]  не сюда, извините


 
Vlad Oshin ©   (2008-08-19 09:45) [14]


> После прокрутки первого грида хотя бы на строку вниз

второй прокручивается с ним вместе :)

ладно,

> 1. В первую очередь надо уйти то ексельного мЫшления. Строчки,
>  ячейки, сдвинуть.

вот это да. 100%

Но, если спрашивают как заточить карандаш именно кирпичом


 
kate158   (2008-08-19 09:53) [15]


> Sergey13 ©   (19.08.08 09:37) [11]

нужно,как бы так правильно выразиться,сделать "скользящее окно".при запуске проги на форме должны быть 2 таблицы.в первой набор чисел в 8 столбцах с фиксированным количеством строк(56000).во второй данные из первой таблицы должны быть сдвинуты вверх на 1 строку.во второй таблице тоже 8 столбцов.строка с номером 56000 остается пустой,ее нужно заполнить числами,равными разности последних двух ячеек из первой таблицы.
По поводу ексельного мышления.Пытаюсь описать проблему максимально понятной,чтобы найти правильное решение..ладно,попробую
> Vlad Oshin ©   (19.08.08 09:15) [1]


> {RASkov} ©   (19.08.08 09:26) [6]

спасибо!


 
{RASkov} ©   (2008-08-19 10:06) [16]

T2.ДобавитьВсёИз(T1);
T2.First;
T2.Delete;
T2.Last;
N1:=T2.Ячейка; //Последняя Ячейка;
T2.Prior;
N2:=T2.Ячейка; //Предпоследняя
T2.Добавить(N1-N2); //не инсерт)
T2.Perekrestitsya;
О, боже :)


 
{RASkov} ©   (2008-08-19 10:12) [17]

> [15] kate158   (19.08.08 09:53)
> чтобы найти правильное решение..ладно,попробую

В первую очередь попробуй найти решение без второй таблицы... Ибо она не нужна, так как в ней новой информации - ноль.


 
Vlad Oshin ©   (2008-08-19 10:19) [18]

http://rsdn.ru/article/delphi/dbcontrols.xml


 
Sergey13 ©   (2008-08-19 10:22) [19]

> [15] kate158   (19.08.08 09:53)
> По поводу ексельного мышления.Пытаюсь описать проблему максимально
> понятной,чтобы найти правильное решение

Для этого нужно плясать от смысла того, что тебе нужно, а не от картинки на экране.

> при запуске проги на форме должны быть 2 таблицы

Учи терминологию! Таблицы в БАЗЕ. На экране наборы данных, которые опираются (или НЕ опираются) на физические таблицы, которые в БАЗЕ.

> в первой набор чисел в 8 столбцах с фиксированным количеством строк(56000)
Это вообще к делу не относится. Хоть 888 столбцов (которые отбражают ПОЛЯ ЗАПИСЕЙ в ТАБЛИЦАХ которые в БАЗЕ) и стотыщмильенов строк (которые зовутся ЗАПИСЯМИ которые в ТАБЛИЦАХ которые в БАЗЕ).

> во второй данные из первой таблицы должны быть сдвинуты вверх на 1 строку
это опять картинка, а не смысл. Данные во "второй таблице" откуда берутся? Это отдельная таблица в БД или что?

> ее нужно заполнить числами,равными разности последних двух ячеек из первой таблицы.
что такое "2 последние ячейки"? По вертикали? По горизонтали? По диагонали?


 
kate158   (2008-08-19 10:42) [20]


> Sergey13 ©   (19.08.08 10:22) [19]

Хорошо,о мастер!Я буду следовать Вашим советам и выучу терминологию.


 
Sergey13 ©   (2008-08-19 11:04) [21]

> [20] kate158   (19.08.08 10:42)

1. Я не мастер.
2. Ты можешь сколько угодно иронизировать, но решение вопроса, так нормально и не заданного, нужно тебе, а не мне.


 
kate158   (2008-08-19 11:28) [22]

Да,решение мне действительно нужно.

> Sergey13 ©   (19.08.08 10:22) [19]


> это опять картинка, а не смысл.

Во втором наборе данных те же поля записей,что и в первом,только удалено первое поле записи;в поле записи с номером 65000 числа,полученные при вычитании значений полей записей первого набора данных с номерами 65000 и 64999(к примеру).Без второго набора данных можно и обойтись,с другой стороны для удобства пользователя было бы неплохо предусмотреть и его.

> что такое "2 последние ячейки"?

это поля записей первого набора данных с номерами 65000 и 64999.


 
oldman ©   (2008-08-19 11:32) [23]


> Без второго набора данных можно и обойтись,с другой стороны
> для удобства пользователя было бы неплохо предусмотреть
> и его.


Что там удобного?
Первый набор данных на экране:
2
3
4
5
6
7
второй:
3
4
5
6
7
13

Так?
То есть, во втором наборе дубль первого с добавленной суммой?
Так покажи ее в первом наборе и не парься.


 
Sergey13 ©   (2008-08-19 11:45) [24]

> [22] kate158   (19.08.08 11:28)
> Во втором наборе данных те же поля записей,что и в первом

Второй набор данных - это фактически та-же таблица, но с одним вычисляемым полем вместо физического? Так?

Насколько оправдан вывод всех 65000 (или 56000 как было первоначально)? Никакой пользователь за целый день не пролистает даже такой объем. Можно ли  ограничить вывод?


 
MsGuns ©   (2008-08-19 16:44) [25]

Если нужно "как в ёкселе", то вместо дбгридов возьмите стрингриды - там запросто можно "сдвигать" и строки и колонки.

Хотя в целом абсолютно солидарен с тезкой (Сергеем13)



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2008.09.28;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.044 c
2-1218181887
prodex
2008-08-08 11:51
2008.09.28
Закрытие сокета


2-1219302166
Fynjy
2008-08-21 11:02
2008.09.28
использовать IBQuery в разных юнитах


15-1217744147
ketmar
2008-08-03 10:15
2008.09.28
как не надо писать код


15-1217852962
Fynjy
2008-08-04 16:29
2008.09.28
ehlib4


15-1217933277
Rouse_
2008-08-05 14:47
2008.09.28
От как нужно отмывать деньги на разработках :)





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский