Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.06.2010, 17:05   #11
Stranger333
Пользователь
 
Аватар для Stranger333
 
Регистрация: 19.05.2009
Сообщений: 98
По умолчанию

rdama, че то у меня твой код не работает, в смысле он то запускается но меседж то не выводит

Ты это код на какое событие написал, на BeforePost или другой?
Stranger333 вне форума Ответить с цитированием
Старый 15.06.2010, 04:23   #12
rdama
Форумчанин
 
Аватар для rdama
 
Регистрация: 25.07.2009
Сообщений: 533
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
  try
    ADOQuery1.ExecSQL;
  except on e:exception do
  begin
    if  e.HelpContext = 5003022 then
      ShowMessage('Вы пытаетесь ввести дублирующее значение в поле A');
  end;
  end;
end;
Маразм крепчал. Еноты пели...
R-style Dataknowlege Access Member Account (RDAMA)
rdama вне форума Ответить с цитированием
Старый 07.07.2010, 20:34   #13
Stranger333
Пользователь
 
Аватар для Stranger333
 
Регистрация: 19.05.2009
Сообщений: 98
По умолчанию

У меня поле с маскою L00. Я хочу сделать меседжи при неправильном вводе. Вот код но он че то не работает не пому почему
Код:
procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char);
var s:string;
begin
with DBGrid1.Fields[1] do
begin
  if not (key in ['a'..'z']) and (Length(Edit2.Text)=0) then  begin
key:=#0; ShowMessage('2'); end  else
  begin
  Edit2.Text := key;
   end;
  if not (key in ['0'..'9']) and (Length(Edit2.Text)=1) then begin key:=#0; ShowMessage('2'); end;
     end;
end;
Stranger333 вне форума Ответить с цитированием
Старый 08.07.2010, 06:23   #14
rdama
Форумчанин
 
Аватар для rdama
 
Регистрация: 25.07.2009
Сообщений: 533
По умолчанию

Так для начала F5 на строке
Код:
if not (key in ['a'..'z']) and (Length(Edit2.Text)=0) then  begin
И проверяем как ты проходишь все условия. И в твоем случае пытаемся понять почему проходим.
И еще может маску стоит сделать на уровне БД. Access позволяет это сделать. Ну можно еще воспользоваться MaskEdit и в нем маску вбить.
Но для маскэдита надо небольшую доводку на тему корректной обработки BackSpace
На FormShow ставим маску
Код:
MaskEdit1.EditMask:='L99;1;*';
можешь и в свойствах задать.
Объявляешь глобальную переменную K:Word;
В событии MaskEdit1KeyDown пишешь
Код:
K:=Key;
На MaskEdit1Change
Код:
  MaskEdit1.Text:=UpperCase(MaskEdit1.Text);
  if K = 8 then
    MaskEdit1.SelStart:= Length(Trim(MaskEdit1.Text))+1
  else
    if K <> 0 then
      MaskEdit1.SelStart:= Length(Trim(MaskEdit1.Text));
И у тебя в этот едит кроме как по маске ничего вводиться не будет.
Тебе надо будет только при сохранении проверять что туда ввели все элементы строки т.е. что длина строки не меньше 3 символов.
Маразм крепчал. Еноты пели...
R-style Dataknowlege Access Member Account (RDAMA)
rdama вне форума Ответить с цитированием
Старый 12.07.2010, 18:11   #15
golopjatov
Пользователь
 
Регистрация: 09.07.2010
Сообщений: 13
По умолчанию

Когда-то сталкивался с таким же вопросом.. сделайте по ключу... т.е. при разработке БД чтобы устранить дублирование записей. Почему? Да потому, что всё будет зависеть от объема записей в БД. БД своими средствами бистрее проверит на дублирование, чем вы будите прогонять ее сами (к примеру в том же цикле)

Почитайте, вспомните про, я думаю составные ключи....

Простые и составные ключи

http://ru.wikipedia.org/wiki/Первичный_ключ
Первичный ключ может состоять из единственного поля таблицы, значения которого уникальны для каждой записи. Так, например, на предприятии не может быть двух работников с одинаковыми табельными номерами, поэтому в таблице, содержащей записи о работниках, табельный номер может быть первичным ключом. Такой первичный ключ называют простым ключом.

Если таблица не имеет единственного уникального поля, первичный ключ может быть составлен из нескольких полей, совокупность значений которых гарантирует уникальность. Так, имя, фамилия, отчество, номер паспорта, серия паспорта не могут быть первичными ключами по отдельности, так как могут оказаться одинаковыми у двух и более людей. Но не бывает двух личных документов одного типа с одинаковыми серией и номером. Поэтому в таблице, содержащей записи о людях, первичным ключом может быть набор полей, состоящий из типа личного документа, его серии и номера. Такой первичный ключ называют составным ключом (англ. compound key, composite key, concatenated key).

Ну и проверку на ввод значения можете сделать (по маске). А целостность поручить лучше встроенным средствам БД.

Последний раз редактировалось golopjatov; 12.07.2010 в 18:35.
golopjatov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Добавление записей в DBGrid без сохранения Hypermaster БД в Delphi 3 23.04.2010 08:46
Выделение записей в DBGrid (многопользовательский вариант ) Paul Hindenburg БД в Delphi 14 29.09.2009 10:19
Добавление записей в DBGrid с помощью Query Droid БД в Delphi 5 21.06.2009 03:02
Выбор записей в DBGrid-e artemavd БД в Delphi 12 16.05.2009 19:45
Сохранение нескольких записей из DbGrid в базу Canadec БД в Delphi 5 06.09.2007 14:26