![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Переход к записи по щелчку мыши в DBGrid'e [D7, Paradox]
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;
Это так Квери назвал?