Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.007 c
14-71342
ArtGamer
2002-07-27 00:27
2002.08.22
Файл hiberfil.sys в WinXP


8-71267
Yaro
2002-04-11 21:23
2002.08.22
Итоги быстрой прорисовки


1-71240
V.Turecky
2002-08-11 18:29
2002.08.22
Проверка существования строки в INI файле...


1-71177
cult
2002-08-09 16:15
2002.08.22
Как сделать форму Always-on-top?


1-71236
Shrek
2002-08-11 18:33
2002.08.22
Key





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