Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.01.23;
Скачать: CL | DM;

Вниз

Переход к записи по щелчку мыши в 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://predskazanie-wunschpunsch.ru/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;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.027 c
1-1105005604
AndreySoft
2005-01-06 13:00
2005.01.23
InputQuery и PasswordChar


4-1102331451
Makuha
2004-12-06 14:10
2005.01.23
Работа с файлами с помощью ф-ций _lopen и _lread.


1-1105608718
Саня
2005-01-13 12:31
2005.01.23
Сеанс MS-DOS


1-1105482753
Creating
2005-01-12 01:32
2005.01.23
В каком месте лучшe ставить inherited ? До своего кода, после


11-1086458896
DillerXX
2004-06-05 22:08
2005.01.23
Почему в конечном файле не работает хот кей?