Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ошибка TADODataSet.Locate! проверено в Delphi 6,7,9 
:(
    Опции темы
Петрович
Дата 26.7.2005, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

Репутация: 6
Всего: 55



Цитата(SergeBS @ 26.7.2005, 12:52)
Я тебе еще один косяк аналогичный изложу:
...

Ну и думаешь удивил smile. Эта фича уже давно известна. Здесь две причины:
1. Это мелкософт так в драйвер русской раскладки заложил. Если установлен режим "латинский" то эта клавиша продуцирует код символа '.' (точка), а если тек.регистр "русский" то продуцируется код ',' (запятая). Это если драйверок не патченный smile.
2. Компонент DBEdit построен на базе TCustomMaskEdit (я его просто ненавижу smile). А у него сделано фильтрование ввода.

Цитата(SergeBS @ 26.7.2005, 12:52)
Самое залихватское при этом, что выставление сепаратора в "." на текущем запуске программы не скажется, только на следующем.

Не там ставишь. Надо делать сразу после begin проргаммы, до первого Application.CreateForm.

Цитата(SergeBS @ 26.7.2005, 12:52)
Поэтому я при запуске проверяю значение разделителя, и если не мое, принудительно выставляю в ".".

Ну я это уже проходили. Раньше тоже так делали. Но, нехорошо пользователя напрягать. Если он хочет видеть в качестве разделителя ',', то плохо когда программа принудительно показывает (и требует от него ввода) разделителя '.'.

На самом деле, есть два решения.
Первое - патчить tMaskEdit. Там помимо этого есть еще ошибка (http://forum.vingrad.ru/index.php?showtopi...ndpost&p=476796)
Второе - вешать доп.обработку на свою форму. Это попутно поправить работу всех компонентов на форме, включая например DBGrid. Делается так:

1. У формы ставим свойство KeyPreview в True

2. У формы описываем поле LastKeyDown:
Код

...
  private
    LastKeyDown :Word;
...


3. Назначаем обработчик на событие OnKeyDown формы:
Код

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  LastKeyDown := Key;
end;


4. Назначаем обработчик на событие OnKeyPress формы:
Код

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
  if  (LastKeyDown = VK_DECIMAL) and (Key in ['.',',']) then
    Key := DecimalSeparator;
end;


Причем, чтобы не писать так в каждой форме, можно сделать в одном, базовом классе формы, а все остальные формы в программе наследовать от него. Вот и все.



--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
Петрович
Дата 26.7.2005, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

Репутация: 6
Всего: 55



Цитата(SergeBS @ 26.7.2005, 13:03)
Совсем простой вопрос: у тебя что, автоинкрементных полей в MS SQL нет? Если есть - так сам понимаешь, как твоя проблема с поиском именно той записи, что ты правил, решается "на раз".
И чем букмарки не нравятся?

Это когда ты знаешь с какой таблицей работаешь.
Я столкнулся с этим в процедуре работающей с абстрактным tDataSet о котором ничего неизвестно. В этой процедуре нужно закрыть датасет и потом открыть его снова. При этом, надо по возможности сохранить позицию в датасете на той-же записи на которой он был спозиционирован до закрытия.
А закладки (букмарки) не годятся. В большинстве наследников tDataSet, закладки реализуются в виде порядкового номера записи в наборе. Соответственно, поскольку перечень записей и даже их количестко в таблице может измениться после close/open, то и закладка может спозиционировать не туда. Проверено практикой. Где то в хелпах даже читал о том что значение Bookmark действительно только пока Dataset не закрыт, хотя, что-то сходу не нашел где.




--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
Akella
Дата 11.8.2005, 09:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Цитата
действительно только пока Dataset не закрыт

не всегда, я меняю количество товара, например, закрываю НД, открываю и закладка позиционируется нормально. Да записей я не добавляю в этом случае, поэтому, наверное, и нормально работает.
PM MAIL   Вверх
Страницы: (3) Все 1 2 [3] 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0428 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.