Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Переход к записи по щелчку мыши в DBGrid'e [D7, Paradox]


Страницы:   1 2

cad2206 ©   (2004-12-17 10:12:00) 

Если DBGrid напрямую связан с таблицей, то по щелчку мыши на записи в нем эта запись в таблице становиться активной (текущей). А вот если DBGrid связан с SQL запросом, то такого не происходит, а надо:) Как бы это реализовать?


msguns   (2004-12-17 15:55:00) [1]

>bremvolk   (17.12.04 14:40) [33]

Теперь понял.
Я предполагал, что у него альтернатива, т.е. отображается в гриде либозапрос либотаблица. И вот именно здесь у него якобы разница и поведении "текущей" записи (то она первая, то реально отображаемая в гриде)


bremvolk   (2004-12-17 14:40:00) [2]

Перевожу:
Имеем 2 набора данных: TQuery  и TTAble.
Если к гриду подключен квери, то навигация происходит по нему. Соответственно RecNo TTable здесь непричем: навигации по этому набору нет и указатель стоит на 1 записи.
Я так понял объяснения молодого человека и приведенный кусок текста.


msguns   (2004-12-17 14:33:00) [3]

>bremvolk   (17.12.04 14:30) [31]
>Ведь в grid идет движение по набору Query, а в Table1 указатель на месте стоит-на 1 записи.

ппереведи..


bremvolk   (2004-12-17 14:30:00) [4]

//procedure TForm1.DBGrid2CellClick(Column: TColumn);
//var
//i:integer;
//begin
//i:=Form1.Table1.RecNo;
//end;
//При нажатии на любой записи в Гриде i=1 и все тут. Связываю //Грид с таблицей: i=номер записи на которой кликнул.
//
Если эта процедура срабатывает в момент, когда к Grid подключен Query, то i всегда будет равно 1. Ведь в grid идет движение по набору Query, а в Table1 указатель на месте стоит-на 1 записи.


cad2206   (2004-12-17 12:08:00) [5]

msguns: спасибо, что не пожалел времени. и за ответ.


msguns   (2004-12-17 11:58:00) [6]

>cad2206   (17.12.04 10:54) [16]
>Дык мне нужно править/удалять запись в таблице. Как я могу чтото делать с ней в запросе? Или если я допустим напишу Query1.Delete, в таблице она тоже удалится?

Надо разобраться в том, что работа с данными в дельфи (в частности) ведется не непосредственно (как, например, в парадоксе или в аксесе) с физическими таблицами-файлами, а через цепочку, в общем случае выглядящей так:

DataBase                Компоненты           Средства
(физические              и средства           визуализации
таблицы, записи,          доступа            и интерфейса  
ключи, индексы,                              пользователя
ограничения,
блокировки и т.д.)

В твоем случае Query (или Table) есть не что иное, как средство доступак БД, но не сама БД. Поэтому для того, чтобы ответить на твой вопрос, надо знать еще массу подробностей, в частности:
1. Позволяет ли выбранное тобою средство доступа корректировать данные в БД
2. Позволит ли БД внести в себя те изменения, которые запрашиваются (конфликты ключей, ссылочная целостность, нарушение уникальности и ндексов, конкурентные блокировки и т.д. - зависит от типа БД и выбранного "движка" или сервера)
3. Соответсвуют ли меняемые данные требованиям в БД и условиям, наложенным приложением (интерфейс+средство доступа) (обязательное поле, некорректный формат и т.д.)

Вот без понимания всего этого невозможноответить на твой вопрос однозначно и, главное, правильно.
Это все равно, что едущий на автомобиле звонит своему приятелю и спрашивает, куда ему поворачивать на перекрестке: налево или направо. Хорошо еще, если хоть уточнит по какой улице едет. Без пояснения о конечной цели поездки.

В твоем примере можно, конечно сказать однозначно, что если ты используешь в качестве средства компонент типа TQuery, то редактирование напрямую невозможно, если не используются дополнительные "примочки", о которых уже здесь упоминали.


cad2206   (2004-12-17 11:47:00) [7]

ВСЕ!!! Всем огромное спасибо, справился с Вашей помощью.


cad2206   (2004-12-17 11:33:00) [8]

Johnmen: ну конечно нет.
ЮЮ: да нет, не стоит...


Johnmen   (2004-12-17 11:28:00) [9]

>нет такой книги, где описывается решение моей задачи

Если твоя задача обозначена постами данной ветки, то её решение описывается в ЛЮБОМ тематическом букваре.

И еще. На самом деле ты не задаешь вопросы, а пытаешься ничего не прочитав, что-то понять. Этот путь ущербен...


ЮЮ   (2004-12-17 11:25:00) [10]

>Table is read only

А может у файла "read only" стоит?


cad2206   (2004-12-17 11:24:00) [11]

DenK_vrtz: да я не в коем случае не обижаюсь и прислушиваюсь ко всем советам. Я уважаю Ваши мнения и понимаю, что есть люди, которые умнее меня. Поэтому к Вам я и обращаюсь Я книжки читаю. Но (ты и сам наверное понимаешь), нет такой книги, где описывается решение моейзадачи. Все мы учимся, и никогда не настанет такой момент, когда ты будешь знать ВСЕ. Я тоже не первый год программы пишу. Я думаю у всех нас возникают вопросы, а форумы на то и даны, чтобы находить на них ответы. Во как сказал.


DenK_vrtz   (2004-12-17 11:21:00) [12]

>cad2206   (17.12.04 11:17) [21]

или

delete from table where id = :параметр


DenK_vrtz   (2004-12-17 11:19:00) [13]

>cad2206   (17.12.04 11:17) [21]

см. RequestLive
   CachedUpdates
   UpdateObject


cad2206   (2004-12-17 11:17:00) [14]

ЮЮ: Спасибо за исчерпывающий ответ.
Но возникла следующаа проблема: при попытке удалить запись: Query1.Deleteвозникает сообщение об ошибке: Table is read only. Где задаютс/меняются эти параметры?


DenK_vrtz   (2004-12-17 11:15:00) [15]

>cad2206

Совет. Главное не обижаться. Прислушаться ко всему, что здесь написали. Народ не первый день с базами работает. Почитать книги, посмотреть примеры, попробовать сделать САМОМУ, поискать в инете решение задачи.
Если не получилось. Задавать вопрос в форуме, опираясь на ранее полученные знания.

P.S. А ведь когда-то не было инета и все читали книги.


ЮЮ   (2004-12-17 10:57:00) [16]

Твой TTable - это не таблица в БД, а такой же запрос SELECT *
FROM table, только запрос написал не ты, а компонент.
Итак, ты имеешь два DataSeta, полученных из одной и той же таблицы. Они совершенно независимы. Перемещение по одной из них никак не влияет на текущую запись в другой. Более того, если ты внесешь изменения в Table1, то это никак не скажется на содержимом Query1 - тебе прийдется его переоткрывать, чтобы заметить изменения.
Отсюда совет: Table1 удалить как вредную и ненужную сущность. Редактировать же следует DataSet, отображаемый в гриде, т.е. TQuery


DenK_vrtz   (2004-12-17 10:56:00) [17]

>cad2206   (17.12.04 10:54) [16]
>При всем уважении, никак не могу назвать это основами

При всем уважении и основываясь на данных Ваших постов так оно и есть!


Johnmen   (2004-12-17 10:55:00) [18]

>cad2206  

Ты это, не обижайся, да ? ИДИ ЧИТАЙ КНИЖКИ !


cad2206   (2004-12-17 10:54:00) [19]

Дык мне нужно править/удалять запись в таблице. Как я могу чтото делать с ней в запросе? Или если я допустим напишу Query1.Delete, в таблице она тоже удалится?


Sergey13   (2004-12-17 10:50:00) [20]

i:=Form1. Table1 .RecNo;
Это так Квери назвал?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо