Форум: "Базы";
Текущий архив: 2002.08.22;
Скачать: [xml.tar.bz2];
ВнизКак отучить от автодобавления записи Найти похожие ветки
← →
lejik (2002-07-25 13:05) [0]Доброе время суток!
Проблемка такая, Есть таблица в InterBase при движении по ней с помощью DBGrid когда при нахождении на последней записи нажимаю "Стрелка вниз" и она переходит на несуществующую запись. Есть ли какое нибудь свойство или надо перехватывать нажатие клавиш. Заранее спасибо.
← →
Lusha (2002-07-25 13:16) [1]Последнее, разумеется... :)
← →
Алексей Петров (2002-07-25 13:25) [2]Таблица с помощью DataSet-а некого в DBGrid отображается ведь?
Вот в том DataSet сделай обработчик BeforeInsert с кодом
begin
Abort;
end;
← →
Lusha (2002-07-25 13:30) [3]>Алексей Петров © (25.07.02 13:25)
МАлАдЕц... И вообще похерим возможность добавления записи в этот НД... :)
← →
Aram (2002-07-25 13:41) [4]Попробуй так:
надо сделать перехват собятия нажатия клавиатуры на Grid-e OnKeyDown
If Key = VK_INSERT then Key = #0; // это для того чтобы при
// insert не добавлялась запись.
If Key = VK_DOWN and Table1.Eof = True then Key = #0;
← →
Johnmen (2002-07-25 13:51) [5]>Aram © (25.07.02 13:41)
Второй if неверен...На последней записи Eof<>True...
← →
Aram (2002-07-25 14:07) [6]Да, Johnmen прав. Тогда последнее условие можно переписать так:
If ((Key = VK_DOWN) and (Table1.RecNo = Table1.RecordCount)) then Key:= 0;
если конечно Table1.RecNo - работает корректно в IB.
← →
Lusha (2002-07-25 14:14) [7]>Aram © (25.07.02 14:07)
Вот так гораздо проще.... И никаких ЕСЛИ... :)
if Key = VK_DOWN then
begin
TDBGrid(Sender).DataSource.DataSet.Next;
Key := 0;
end;
← →
DmitriyT (2002-07-25 20:10) [8]в DBGrid.Options включи в True что-то вроде ReadOnly (не помню точное название, но там есть), а добавление, редактирование и т.п. делай в другой модально появляющейся форме.
← →
Proton (2002-07-26 04:49) [9]autoedit := false;
у datasource
но и редактирование (автоматическое)
отключится
думаю подход
> Алексей Петров © (25.07.02 13:25)
наиболее походящий
что то вроде
if not editflag then abort;
а за тем
editflag := true;
tablex.edit;
editflag := false;
← →
Proton (2002-07-26 04:54) [10]
> а за тем
> editflag := true;
> tablex.edit;
> editflag := false;
надо делать при добавлении при нажатии кнопки добавить (или плюсика в db_navigator"e)
вообщем если нужен пример будет пиши на мыло - поделюсь
> Lusha © (25.07.02 13:30)
> >Алексей Петров © (25.07.02 13:25)
> МАлАдЕц... И вообще похерим возможность добавления записи
> в этот НД... :)
может автору вопроса только просмотр нужен
← →
Lusha (2002-07-26 08:53) [11]>Proton © (26.07.02 04:54)
Внимательно перечитайте вопрос, рассудительный Вы наш... :)
← →
KSergey (2002-07-27 11:30) [12]>Lusha © (26.07.02 08:53)
>Proton © (26.07.02 04:54)
>Внимательно перечитайте вопрос, рассудительный Вы наш... :)
Ну я перечитал - ничего про необходимость добавлять записи (равно как и редактировать) там нету, умнющий вы наш. Так что вариант Алексей Петров © (25.07.02 13:25)самый правильный, и вот почему: он как раз по нужному месту написан. Ну а наворочить туда всякие флажки когда нельзя, а когда все-таки можно - это уже автору предлпгпется сделать самому, т.к. предполагается у него наличие соображения. И еще этот ответ правилен по фтоме для форума: кратко и самую суть.
Правилен данный метод еще и потому, что если перехватить только кнопки - этого мало. Я найду еще 280 способов добавить таки запись.
← →
Lusha (2002-07-27 13:23) [13]>KSergey © (27.07.02 11:30)
Любезный KSergey!
Внимательно перечитать означает не только прочитать, но и осмыслить прочитанное... :)
Внимательно перечитываем вопрос...
Как отучить от автодобавления записи
Автодобавление не означает вообще добавление... А какое именно добавление его не устраивает, он, автора вопроса, описал достаточно однозначно...
Вызов Append НД при нажатии стрелки вниз на последней записи есть свойство обработчика клавиатуры TDBGrid... И "лечить" его нужно соответственно, не изменяя функциональность других компонент... Именно поэтому ответ Алексей Петров © (25.07.02 13:25) я считаю некорректным...
Правилен данный метод еще и потому, что если перехватить только кнопки - этого мало.
С чего Вы взяли, что этого мало?
Я найду еще 280 способов добавить таки запись.
И тут Остапа понесло... :)
← →
KSergey (2002-07-27 15:07) [14]>Lusha © (27.07.02 13:23)
>Внимательно перечитываем вопрос...
>Как отучить от автодобавления записи
>Автодобавление не означает вообще добавление... А какое именно >добавление его не устраивает, он, автора вопроса, описал >достаточно однозначно...
Безусловно, все однозначно: автодобавление - есть добавление автомобилем. Разве я не прав?
[И да простят меня модераторы и автор вопроса за флейм]
← →
Lusha (2002-07-27 16:45) [15]>KSergey © (27.07.02 15:07)
автодобавление - есть добавление автомобилем. Разве я не прав?
И несло его долго... Более 20-ти часов к ряду... :)
За сим, с уважением...
Lusha
← →
lejik (2002-07-27 22:45) [16]Большое спасибо за участие! Конечно KEY_DOWN обрабатывать можно как предлагал(а) Lusha, я поначалу так и делал, а потом поставил себе DBGridEh и установил в нем свойство Использовать Enter как Tab, так что мно прихобится две клавиши обрабатывать, получается неудобно. Пробовал обрабатывать AfterScroll но он и при открытии срабатывает. Ума не приложу...
← →
Vlad1 (2002-07-28 15:34) [17]
if (key=VK_DOWN)and(DataSet1.State in [dsInsert]) then key:=#0
Правда, не проверял...
← →
Lusha (2002-07-30 10:28) [18]>lejik © (27.07.02 22:45)
То есть как я понимаю вся проблема в обработке клавиши TAB при добавлении? Так там лекарство то же - метод NEXT...
Например вот таким образом...
procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure DoNext;
begin
TDBGrid(Sender).DataSource.DataSet.Next;
Key := 0;
end;
begin
if Key = VK_DOWN then DoNext;
if Key = VK_TAB then
begin
if ssAlt in Shift then Exit;
if ssShift in Shift then Exit;
with TDBGrid(Sender) do
if SelectedIndex = Columns.Count - 1 then
begin
DoNext;
if not DataSource.DataSet.Eof then Key := VK_HOME;
end;
...
end;
← →
lejik (2002-07-30 20:02) [19]> Lusha
Ну не совсем так. Рассказываю популярнее. В DBGridEh есть свойство Использовать Enter как Tab. То есть при нажвтии Enter выделение ячейки перемещается в следующий столбец или в следующую строку. Когда курсор находится на последней записи в базе данных нажатие Enter приводит к тому что курсор перемещается к следующей (не существующей) записи. После нажатия Enter стоит обработчик модификации данных. Используется InterBase один из столбцов Not Null, триггер BeforeInsert не срабатывает, и вся прога счастливо вываливается с ошибкой "Двнные домена не могут быть Null"
← →
Lusha (2002-07-31 09:04) [20]>lejik © (30.07.02 20:02)
Ну не совсем так. Рассказываю популярнее.
Издеваешься, да? :)
Ну, и кто Вам, любезный, мешает написать нечто подобное (смотри Lusha © (30.07.02 10:28)) для обработки клавиши Enter... Я уже практически все разжевал.... Вам осталось только в рот положить... :(
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.08.22;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.008 c