Форум: "Базы";
Текущий архив: 2005.01.23;
Скачать: [xml.tar.bz2];
ВнизПереход к записи по щелчку мыши в DBGrid e Найти похожие ветки
← →
cad2206 (2004-12-17 10:12) [0]Если DBGrid напрямую связан с таблицей, то по щелчку мыши на записи в нем эта запись в таблице становиться активной (текущей). А вот если DBGrid связан с SQL запросом, то такого не происходит, а надо:) Как бы это реализовать?
← →
Александр Иванов © (2004-12-17 10:14) [1]А зачем надо то?
← →
Sergey13 © (2004-12-17 10:16) [2]2cad2206 (17.12.04 10:12)
Переведи.
← →
cad2206 (2004-12-17 10:17) [3]Надо это затем, чтобы пользователь мог по нажатию правой кнопки мыши на нужной записи в DBGride (напомню, связанным с запросом) производить с ней необходимые действия (удалять, редактировать и т.п.)
← →
DenK_vrtz © (2004-12-17 10:17) [4]Начинаем изучение основ с вопросов в форуме?
Потом обижаемся как в http://delphimaster.net/view/15-1102690000/&p
Грустно все это!
← →
cad2206 (2004-12-17 10:20) [5]А в реале, на какой бы записи он не нажал, манипуляции происходят с первой записью в таблице. Такая ситуация возникает только если DBGrid связан с динамич. запросом. Если же с таблицей напрямую, то все у порядке.
← →
cad2206 (2004-12-17 10:21) [6]2 DenK_vrtz. При всем уважении, никак не могу назвать это основами.
← →
Johnmen © (2004-12-17 10:22) [7]>cad2206 (17.12.04 10:20) [5]
"Враки-каки" (с) прапорщик Задов
← →
Sergey13 © (2004-12-17 10:28) [8]2[3] cad2206
>Надо это затем, чтобы пользователь мог по нажатию правой кнопки мыши на нужной записи в DBGride ...
А в обработчике клика у тебя не встречается First или Open случайно? Иначе написаное в [5] по меньшей мере странно.
← →
msguns © (2004-12-17 10:29) [9]Что-то я не врубаюсь. Пардон, мадам, а каким пальчиком вы щипаете мышку: указательным или средним ?
← →
cad2206 (2004-12-17 10:30) [10]Не, не встречается, точно. Но факт остается фактом
← →
cad2206 (2004-12-17 10:33) [11]2 msguns: да не важно это (но если так нужно, то указательным). Важно то, что в Gride связанным с таблицей, по нажатию левой кнопки мыши на записи, она становиться текущей, а в Gride связанным с запросом - нет. Как это, я не понимаю...
← →
Плохиш © (2004-12-17 10:41) [12]
>cad2206 (17.12.04 10:33) [11]
>2 msguns: да не важно это (но если так нужно, то указательным).
>Важно то, что в Gride связанным с таблицей, по нажатию левой
>кнопки мыши на записи, она становиться текущей, а в Gride
>связанным с запросом - нет. Как это, я не понимаю...
Так, для начала разберись какую кнопку жмёшь, а то, то про правую говорищь, то про левую.
Второе, реакция на нажатия кнопок в гриде связанном с TTable не отличается от реакции в гриде связанном с TQuery
← →
Sergey13 © (2004-12-17 10:43) [13]2[11] cad2206 (17.12.04 10:33)
Не верю!!!
(с) Станиславский.
← →
cad2206 (2004-12-17 10:47) [14]Мля.
Ну незнаю как еще сказать. Может прикол в запросе? Вот запрос:
SELECT *
FROM table
... А ВСЕ!
В обработчике на нажатие кнопки в DBGride пишу:procedure TForm1.DBGrid2CellClick(Column: TColumn);
var
i:integer;
begin
i:=Form1.Table1.RecNo;
end;
При нажатии на любой записи в Гриде i=1 и все тут. Связываю Грид с таблицей: i=номер записи на которой кликнул.
???
← →
Sergey13 © (2004-12-17 10:50) [15]i:=Form1.Table1.RecNo;
Это так Квери назвал?
← →
cad2206 (2004-12-17 10:54) [16]Дык мне нужно править/удалять запись в таблице. Как я могу чтото делать с ней в запросе? Или если я допустим напишу
Query1.Delete
, в таблице она тоже удалится?
← →
Johnmen © (2004-12-17 10:55) [17]>cad2206
Ты это, не обижайся, да ? ИДИ ЧИТАЙ КНИЖКИ !
← →
DenK_vrtz © (2004-12-17 10:56) [18]>cad2206 (17.12.04 10:54) [16]
>При всем уважении, никак не могу назвать это основами
При всем уважении и основываясь на данных Ваших постов так оно и есть!
← →
ЮЮ © (2004-12-17 10:57) [19]Твой TTable - это не таблица в БД, а такой же запрос SELECT *
FROM table, только запрос написал не ты, а компонент.
Итак, ты имеешь два DataSeta, полученных из одной и той же таблицы. Они совершенно независимы. Перемещение по одной из них никак не влияет на текущую запись в другой. Более того, если ты внесешь изменения в Table1, то это никак не скажется на содержимом Query1 - тебе прийдется его переоткрывать, чтобы заметить изменения.
Отсюда совет: Table1 удалить как вредную и ненужную сущность. Редактировать же следует DataSet, отображаемый в гриде, т.е. TQuery
← →
DenK_vrtz © (2004-12-17 11:15) [20]>cad2206
Совет. Главное не обижаться. Прислушаться ко всему, что здесь написали. Народ не первый день с базами работает. Почитать книги, посмотреть примеры, попробовать сделать САМОМУ, поискать в инете решение задачи.
Если не получилось. Задавать вопрос в форуме, опираясь на ранее полученные знания.
P.S. А ведь когда-то не было инета и все читали книги.
← →
cad2206 (2004-12-17 11:17) [21]ЮЮ: Спасибо за исчерпывающий ответ.
Но возникла следующаа проблема: при попытке удалить запись:Query1.Delete
возникает сообщение об ошибке: Table is read only. Где задаютс/меняются эти параметры?
← →
DenK_vrtz © (2004-12-17 11:19) [22]>cad2206 (17.12.04 11:17) [21]
см. RequestLive
CachedUpdates
UpdateObject
← →
DenK_vrtz © (2004-12-17 11:21) [23]>cad2206 (17.12.04 11:17) [21]
или
delete from table where id = :параметр
← →
cad2206 (2004-12-17 11:24) [24]DenK_vrtz: да я не в коем случае не обижаюсь и прислушиваюсь ко всем советам. Я уважаю Ваши мнения и понимаю, что есть люди, которые умнее меня. Поэтому к Вам я и обращаюсь Я книжки читаю. Но (ты и сам наверное понимаешь), нет такой книги, где описывается решение моей задачи. Все мы учимся, и никогда не настанет такой момент, когда ты будешь знать ВСЕ. Я тоже не первый год программы пишу. Я думаю у всех нас возникают вопросы, а форумы на то и даны, чтобы находить на них ответы. Во как сказал.
← →
ЮЮ © (2004-12-17 11:25) [25]>Table is read only
А может у файла "read only" стоит?
← →
Johnmen © (2004-12-17 11:28) [26]>нет такой книги, где описывается решение моей задачи
Если твоя задача обозначена постами данной ветки, то её решение описывается в ЛЮБОМ тематическом букваре.
И еще. На самом деле ты не задаешь вопросы, а пытаешься ничего не прочитав, что-то понять. Этот путь ущербен...
← →
cad2206 (2004-12-17 11:33) [27]Johnmen: ну конечно нет.
ЮЮ: да нет, не стоит...
← →
cad2206 (2004-12-17 11:47) [28]ВСЕ!!! Всем огромное спасибо, справился с Вашей помощью.
← →
msguns © (2004-12-17 11:58) [29]>cad2206 (17.12.04 10:54) [16]
>Дык мне нужно править/удалять запись в таблице. Как я могу чтото делать с ней в запросе? Или если я допустим напишу Query1.Delete, в таблице она тоже удалится?
Надо разобраться в том, что работа с данными в дельфи (в частности) ведется не непосредственно (как, например, в парадоксе или в аксесе) с физическими таблицами-файлами, а через цепочку, в общем случае выглядящей так:
DataBase Компоненты Средства
(физические и средства визуализации
таблицы, записи, доступа и интерфейса
ключи, индексы, пользователя
ограничения,
блокировки и т.д.)
В твоем случае Query (или Table) есть не что иное, как средство доступа к БД, но не сама БД. Поэтому для того, чтобы ответить на твой вопрос, надо знать еще массу подробностей, в частности:
1. Позволяет ли выбранное тобою средство доступа корректировать данные в БД
2. Позволит ли БД внести в себя те изменения, которые запрашиваются (конфликты ключей, ссылочная целостность, нарушение уникальности и ндексов, конкурентные блокировки и т.д. - зависит от типа БД и выбранного "движка" или сервера)
3. Соответсвуют ли меняемые данные требованиям в БД и условиям, наложенным приложением (интерфейс+средство доступа) (обязательное поле, некорректный формат и т.д.)
Вот без понимания всего этого невозможно ответить на твой вопрос однозначно и, главное, правильно.
Это все равно, что едущий на автомобиле звонит своему приятелю и спрашивает, куда ему поворачивать на перекрестке: налево или направо. Хорошо еще, если хоть уточнит по какой улице едет. Без пояснения о конечной цели поездки.
В твоем примере можно, конечно сказать однозначно, что если ты используешь в качестве средства компонент типа TQuery, то редактирование напрямую невозможно, если не используются дополнительные "примочки", о которых уже здесь упоминали.
← →
cad2206 (2004-12-17 12:08) [30]msguns: спасибо, что не пожалел времени. и за ответ.
← →
bremvolk (2004-12-17 14:30) [31]//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 записи.
← →
msguns © (2004-12-17 14:33) [32]>bremvolk (17.12.04 14:30) [31]
>Ведь в grid идет движение по набору Query, а в Table1 указатель на месте стоит-на 1 записи.
ппереведи..
← →
bremvolk (2004-12-17 14:40) [33]Перевожу:
Имеем 2 набора данных: TQuery и TTAble.
Если к гриду подключен квери, то навигация происходит по нему. Соответственно RecNo TTable здесь непричем: навигации по этому набору нет и указатель стоит на 1 записи.
Я так понял объяснения молодого человека и приведенный кусок текста.
← →
msguns © (2004-12-17 15:55) [34]>bremvolk (17.12.04 14:40) [33]
Теперь понял.
Я предполагал, что у него альтернатива, т.е. отображается в гриде либо запрос либо таблица. И вот именно здесь у него якобы разница и поведении "текущей" записи (то она первая, то реально отображаемая в гриде)
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2005.01.23;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.058 c