Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.036 c
1-1105609194
Vetal
2005-01-13 12:39
2005.01.23
А как изменить цвет кнопки?


3-1103520719
EvgeniyR
2004-12-20 08:31
2005.01.23
Использование DBChart


3-1103532449
Garry_c
2004-12-20 11:47
2005.01.23
Как динамически создать представление в Interbase?


1-1104938886
m0l0doy
2005-01-05 18:28
2005.01.23
StringGrid.. выделение


4-1102227722
Dema-X
2004-12-05 09:22
2005.01.23
Ширина текста.





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