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

Вниз

Сортировка в DBGrid   Найти похожие ветки 

 
Alex34 ©   (2009-04-10 10:55) [0]

Всем доброго времени суток! Подскажите пожалуйста как сделать сортировку по щелчку на зоголовок колонки в DBGridе. спасибо!


 
Ega23 ©   (2009-04-10 12:03) [1]

Отсортировать связанный с DBGrid набор данных. Как - зависит от природы потомка TDataSet


 
Alex34 ©   (2009-04-10 15:13) [2]

Если можно по подробней. DBGrid связана с базой через DataSource. База Access


 
MsGuns ©   (2009-04-10 15:39) [3]

ADODataSet.Sort :=DBGrid.Columns[индекс "кликнутой" колонки].Field.FieldName //+" D"

Выполнять по клику на заголовке грида


 
Amoeba ©   (2009-04-10 15:40) [4]


> DBGrid связана с базой через DataSource.

И ежу понятно, что других вариантов нет.

Вас спрашивают, что используется: TADOTable, TADOQuery или TADODataSet?


 
Ega23 ©   (2009-04-10 15:56) [5]


> Вас спрашивают, что используется: TADOTable, TADOQuery или
> TADODataSet?


Или вообще не ADO  :)


 
Alex34 ©   (2009-04-13 09:20) [6]

Сапасибо за помощь. А кто нибудь пожет помочь со связями таблиц.


 
Ega23 ©   (2009-04-13 10:03) [7]


> А кто нибудь пожет помочь со связями таблиц.


Inner Join + F1


 
Alex34 ©   (2009-04-13 10:29) [8]

А если по русски и для не особо одаренных.
Имеются две таблицы
Реклама
ID
idконтакт
Текст
Стоимость

Контакт
ID
ФИО
ИНН и так далее
необходимо чтобы  в idконтакт отображался ID записи таблицы контакт.


 
Ega23 ©   (2009-04-13 10:36) [9]


> необходимо чтобы  в idконтакт отображался ID записи таблицы
> контакт.


Он и так там будет отображаться.


 
Alex34 ©   (2009-04-13 10:48) [10]

Его там нет. Вернее доже так, он там есть, если  в DataSours главной сделать таблицу Контакт, но тогда получается в таблице Реклама показывается только та запись которая относится к ID выбранного контакта. Получается фильтр, а нужно что бы idконтакт просто отображался, без фильтра.


 
Ega23 ©   (2009-04-13 10:58) [11]


> Его там нет. Вернее доже так, он там есть, если  в DataSours
> главной сделать таблицу Контакт, но тогда получается в таблице
> Реклама показывается только та запись которая относится
> к ID выбранного контакта. Получается фильтр, а нужно что
> бы idконтакт просто отображался, без фильтра.


Телеатор сегодня не работает. Оиши задачу, опиши, что ты делешь в данный момент, какой результат получаешь и то, что ты хотел бы получить.
Опиши подробно и нормальным языком, так, чтобы человеку со стороны было понятно.


 
Anatoly Podgoretsky ©   (2009-04-13 11:33) [12]

> Alex34  (13.04.2009 10:29:08)  [8]

Добавь в список отображаемых полей.


 
Alex34 ©   (2009-04-13 11:42) [13]

Извиняюсь, если чтото не понятно. Пишу программу на диплом. Задача состоит в автоматизации работы с рекламой. База Access, в ней таблицы: -Реклама, Контакт, таблицы Прайс, Доппрайс, Рекламодатель используются как справочники. Это задача максимум. Я хочу сделать так: запись в таблице Реклама должна хранить дату, стоимость, текст и ссылку на таблицу Контакт, содержащей ФИО или Наименование подавших объявление. Сейчас получается наоборот в DBGrid (Контак) выбираю подавшего объявление в DBGrid (Реклама) появляется соответствующая запись.


 
MsGuns ©   (2009-04-13 15:19) [14]

Связь в общем случае делается так:
Определяется "основная" таблица (в дальнейшем "Master")
Определяется "дополнительная" таблица (в дальнейщем "Detail")

Связь между масетром и деталом должна быть по одному или нескольким полям, содержимое которых имеется в обеих таблицах (например "ФИО" и/или "Наименование")

Дальше идем одним из 2-х способов:

1. Используем связку DataSource детального датасета, в которой указываем мастер и в качестве связующих полей - нужные. Связка будет проиходить автоматически - при перемещении по масету в детал будут "подкачиваться" записи, ключи которых совпадают с ключами текущей записи мастера

2. Вместо TADOTable используем запросы (что, впрочем, корректно и более грамотно будет и для 1) По событию AfterScroll Мастера делаем переоткрытие детального датасета, подставляя "вручную" в параметры запроса значение ключей мастера. Эффект будет тот же, но переоткрытие будет выполняться кодом.


 
Ega23 ©   (2009-04-13 15:36) [15]


> 1) По событию AfterScroll Мастера делаем переоткрытие детального
> датасета, подставляя "вручную" в параметры запроса значение
> ключей мастера. Эффект будет тот же, но переоткрытие будет
> выполняться кодом.


Нельзя на AfterScroll завязываться. TDataSource.OnDataChange
Иначе событие обновления Detail будет срабатывать всегда, даже в случае Master.DisableControls


 
Alex34 ©   (2009-04-13 15:57) [16]

Именно так, по 1 способу, все и делаю. В мастер вношу ID таблицы Реклама, в детал Idреклама таблицы Контакт. Но  ничего не получается!!!!


 
MsGuns ©   (2009-04-13 17:05) [17]

>Ega23 ©   (13.04.09 15:36) [15]
>Нельзя на AfterScroll завязываться. TDataSource.OnDataChange
>Иначе событие обновления Detail будет срабатывать всегда, даже в случае >Master.DisableControls

Это уже нюансы - я показал технологию, дальше "сама, сама, сама" :)

>Alex34 ©   (13.04.09 15:57) [16]
>Именно так, по 1 способу, все и делаю. В мастер вношу ID таблицы Реклама, в детал Idреклама >таблицы Контакт. Но  ничего не получается!!!!

Значит, не так


 
Ega23 ©   (2009-04-13 17:10) [18]


> Это уже нюансы - я показал технологию, дальше "сама, сама,
>  сама" :)


Фигасе "нюансы"!
Вещь-то принципиальная...


 
Alex34 ©   (2009-04-14 11:35) [19]

Я так думаю со связями все нормально. Дело скорее всего в коде. Новые данные нужно записа в таблицу Реклама, а уже потом ID будет заносится в таблицу Контаткт. Кажется как-то так. Наверное.


 
sniknik ©   (2009-04-14 12:15) [20]

> По событию AfterScroll Мастера делаем переоткрытие детального датасета, подставляя "вручную" в параметры запроса значение ключей мастера.
нафига? связь мастер - детайл и так это делает, и завязки на AfterScroll/OnDataChange(тоже нехорошо, т.к. будут лишние вызовы).
т.е. только первый вариант и все, но однозначно с заменой TADOTable, чтобы сделать мастер - детайл на запросах.


 
sniknik ©   (2009-04-14 13:17) [21]

блин, опечатка, надо
... и завязки на ... -> ... и без завязки на ...


 
Alex34 ©   (2009-04-15 15:06) [22]

Наконец разобрался. Дело было не в связях, а в коде. Нужно было сначала сохранять таблицу Реклама, а потом потом таблицу Контакт. Всвязи с этим новый вопрос возник. Как сделать чтобы ADODataSet.Edit редактировал последнюю введенную запись.


 
Anatoly Podgoretsky ©   (2009-04-15 15:21) [23]

> Alex34  (15.04.2009 15:06:22)  [22]

Предварительно встать на нее.


 
Alex34 ©   (2009-04-15 15:57) [24]

Подскажи как. Пытался перейти и на первую, и на предъидущую запись, может не туда ставлю.


 
Anatoly Podgoretsky ©   (2009-04-15 16:32) [25]

> Alex34  (15.04.2009 15:57:24)  [24]

Скажи, что такое последнея для тебя запись?


 
Alex34 ©   (2009-04-15 16:37) [26]

Последняя в DBGridе.


 
clickmaker ©   (2009-04-15 16:54) [27]

> Последняя в DBGridе

последняя видимая или вообще последняя?

последняя в наборе данных - DataSet.Last


 
sniknik ©   (2009-04-15 18:45) [28]

> Последняя в DBGridе.
если записей больше чем влазит в DBGrid то последняя в нем <> последняя в DataSet-е.


 
Alex34 ©   (2009-04-16 08:14) [29]


> последняя видимая или вообще последняя?

Вообще последняя.


 
Anatoly Podgoretsky ©   (2009-04-16 09:34) [30]

> Alex34  (16.04.2009 8:14:29)  [29]

Тогда что такое "Вообще последняя."


 
sniknik ©   (2009-04-16 09:38) [31]

> Вообще последняя.
тема называется "Сортировка в DBGrid" т.е. данные на локальном рекордсете меняют порядок в зависимости от выбранной сортировки...
т.е. при обратной сортировке по автоинкременту (пример), последняя введенная будет стоять первой, а "Вообще последняя."  в рекордсете будет всегда самой старой записью с минимальных значением автоинкремента...

так куда ты хочешь переходить?


 
Alex34 ©   (2009-04-16 10:35) [32]


> так куда ты хочешь переходить

Перейти нужно на запись которая была введена последней, чтобы Edit редактировал её, а не создавал новую запись.


 
Jeer ©   (2009-04-16 11:17) [33]


> Alex34 ©   (16.04.09 10:35) [32]
Перейти нужно на запись которая была введена последней,


Ну и запомни ее идентификатор, затем Locate


 
sniknik ©   (2009-04-16 12:49) [34]

> Перейти нужно на запись которая была введена последней, чтобы Edit редактировал её, а не создавал новую запись.
при добавлении записи в датасет она становиться текущей. т.е. никуда переходить не надо.


 
Anatoly Podgoretsky ©   (2009-04-16 13:15) [35]

Он что-то нам не хочет говорить.


 
Alex34 ©   (2009-04-16 15:43) [36]

Я вам готов все рассказать, только это будет много текста.
Картина следующая. Форма1 в которой вносятся данные нового объявления, при выборе типа рекламодателя (например физическое лицо), вызывается Форма2 для внесения данных о рекламодателе, при открытие формы2 добовляю запись (Append), при закрываю формы2 сохраняю запись (Post) в таблице Контакт, далее в форме1 добавляю дату, стоимость сохраняю запись (Post)  в таблице Реклама. Дальше сомое интересное. Нужно ID таблицы Реклама записать в Idреклама таблицы Контакт. Я делаю следующим образом:
при нажатии конпки
DataModule1.KontDataSet.Edit;
DataModule1.KontDataSet.Post;
Вот вроде как-то так.


 
Alex34 ©   (2009-04-18 10:32) [37]

Ау. Есть кто живой?


 
topS   (2009-04-18 11:27) [38]

все подохли от вашего диплома


 
korneley ©   (2009-04-18 12:28) [39]


> Anatoly Podgoretsky ©   (16.04.09 09:34) [30]
> > Alex34  (16.04.2009 8:14:29)  [29]Тогда что такое "Вообще
> последняя."

Видимо: -3 наносекунды ("нано", это модно сейчас:) от падения головной части БР на объект (субъект?), диплом пишущий. :))) Хотя... И после этого сдавали...


 
Alex34 ©   (2009-04-21 13:32) [40]


> все подохли от вашего диплома

Вместо того чтобы хамить лучше бы помогли, то-же мне МАСТЕРА.



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

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

Наверх




Память: 0.55 MB
Время: 0.008 c
2-1240241532
Sitnic
2009-04-20 19:32
2009.06.07
Как поюзать ClientSocket из консольного приложения?


15-1238588488
Кое кто
2009-04-01 16:21
2009.06.07
Интересная задача


2-1240556887
Vladislav
2009-04-24 11:08
2009.06.07
Как внести программу в контекстное меню Windows


2-1240393863
IceBeerg
2009-04-22 13:51
2009.06.07
TStringList...IndexOf и Find


2-1240312554
ZeroCrash
2009-04-21 15:15
2009.06.07
Поиск поля для ввода текста и его замена





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