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

Вниз

Как отучить от автодобавления записи   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.016 c
3-70988
Egor111
2002-07-31 09:37
2002.08.22
Помогите по Access


14-71368
al2002
2002-07-23 15:10
2002.08.22
Quark переносы


1-71237
Groove
2002-08-11 15:21
2002.08.22
help


3-70959
Noname123
2002-08-02 23:18
2002.08.22
Execl в Delphi 6


3-70986
ППавел
2002-07-31 10:24
2002.08.22
Ячейки Базы данных