Topic: Запрет дублирующей записи в базе.

Добрый день. Возможно ли в проекте скриптом или как-то еще сделать так, чтобы при добавлении новой записи, программа сверялась с уже существующими и в случае, если такая запись уже есть, выдавало сообщение типа Такая уже существует и запрещало сохранить повторно.

Буду очень признателен.Спасибо.

Re: Запрет дублирующей записи в базе.

Приветствую,


скачайте пожалуйста данный пример
http://myvisualdatabase.com/forum/misc. … download=1

Dmitry.

Re: Запрет дублирующей записи в базе.

Спасибо большое!!!

Можете еще подсказать чтобы еще по дате фильтровал?..

CheckDublicate(Form6.dbAction, 'main', 'birthday', Form6.DateTimePicker2.Date, Form6.Button2.dbGeneralTableId) AND

так не получилось...

Re: Запрет дублирующей записи в базе.

Тогда будет так


procedure frmEmployee_Button2_OnClick (Sender: string; var Cancel: boolean);
begin
     if CheckDublicate(frmEmployee.dbAction, 'employees', 'lastname', frmEmployee.edLastName.Text, frmEmployee.ButtonSave.dbGeneralTableId) AND
        CheckDublicate(frmEmployee.dbAction, 'employees', 'firstname', frmEmployee.edFistName.Text, frmEmployee.ButtonSave.dbGeneralTableId) AND
        CheckDublicate(frmEmployee.dbAction, 'employees', 'dateofbirth', FormatDateTime('yyyy-MM-DD 00:00:00.000', frmEmployee.dtDateOfBirth.Date), frmEmployee.ButtonSave.dbGeneralTableId)
     then
     begin
          ShowMessage('Person already exists.');
          Cancel := True;
     end;
end;
Dmitry.

5 (edited by jazzitcool 2015-01-27 21:04:53)

Re: Запрет дублирующей записи в базе.

Приветствую! Кстати по теме, случается иногда дублируются записи, создаёшь  одну, а видишь потом три последовательно. Сегодня был даже такой глюк открыл 230 запись оформленную несколько дней назад, закрыл и она продублировалась каким то чудом под номером 268 и 282. на счётчике стоит read only, так что подмена числа вручную исключена. Скажите сталкивались ли вы с таким глюком?  Работает четыре компа по локалке, и один компьютер работает удалённо через VPN с помощью hamachi и у него такие глюки чаще бывают чем у тех кто работает по локалке. Но периодически такое бывает на каждом компе.

завтра попробую этот скрипт, может решит проблему.

Re: Запрет дублирующей записи в базе.

И вот вопрос, можно ли как то реализовать поиск одинаковых записей? Создать кнопку и написать к ней скрипт, только как это лучше сделать?

Re: Запрет дублирующей записи в базе.

jazzitcool wrote:

И вот вопрос, можно ли как то реализовать поиск одинаковых записей? Создать кнопку и написать к ней скрипт, только как это лучше сделать?

С поиском к сожалению не подскажу, но можно все одинаковые записи сгруппировать при выводе их в компонент TableGrid, используя GROUP BY в SQL запросе, например


SELECT * FROM tablename GROUP BY field1, field2, field3

field1, field2, field3 - это перечисление всех полей, кроме record_count, так как он у вас получается разный и его учитывать не нужно

Dmitry.

Re: Запрет дублирующей записи в базе.

Спасибо огромное за поддержку!!!

Такой еще вопрос, если вам не сложно...
В проекте надо добавлять много записей в базу. Можно ли сделать так, чтобы при нажатии на кнопку сохранить форма очищалась для ввода новых данных? У меня сейчас когда нажимаю сохранить, запись сохраняется, но данные приходиться удалять и вписывать новые.

Спасибо.

Re: Запрет дублирующей записи в базе.

И можно ли сделать другую иконку для приложения?))

Re: Запрет дублирующей записи в базе.

kudarec wrote:

Спасибо огромное за поддержку!!!

Такой еще вопрос, если вам не сложно...
В проекте надо добавлять много записей в базу. Можно ли сделать так, чтобы при нажатии на кнопку сохранить форма очищалась для ввода новых данных? У меня сейчас когда нажимаю сохранить, запись сохраняется, но данные приходиться удалять и вписывать новые.

Спасибо.

Обычно форма очищается автоматически, если она вызывается для создания новой записи кнопкой с действием "Новая запись" видимо добавление новой записи у вас организовано не стандартно.


В таком случае форму придется очистить скриптом, например создав событие OnAfterClick у кнопки для сохранения записи, где можно написать:

Form2.Edit1.Clear; // для текстовых полей
Form2.ComboBox1.dbItemID:=-1;// для ComboBox


на счет иконки, пока не знаю, возможно ли это реализовать.

Dmitry.

Re: Запрет дублирующей записи в базе.

Спасибо.

Re: Запрет дублирующей записи в базе.

Помогите! Что не так в скрипте? Не могу справиться с запретом дублирования записей в таблицу. Ошибок не выдаёт, но и не работает.

function CheckDublicate (Action, sTable, sField, sValue: string; id: integer;): boolean;
var
   s: string;
begin
     result := False;
     if Action = 'NewRecord' then
     begin
          s := SQLExecute ('SELECT Count(*) FROM '+sTable+' WHERE '+sField+' LIKE "' + sValue + '"');
          if StrToInt(s) > 0 then result := True;
     end;

end;


procedure Form1_Button3_OnClick (Sender: string; var Cancel: boolean);
begin
     if CheckDublicate(Form1.dbAction, 'main', 'text', Form1.Edit1.Text, Form1.Button3.dbGeneralTableId) then
     begin
          ShowMessage('Такая запись уже существует.');
          Cancel := True;
     end;
end;
Post's attachments

Attachment icon 2015-06-30_222058.bmp 230.5 kb, 713 downloads since 2015-06-30 

Не боги горшки лепят!

Re: Запрет дублирующей записи в базе.

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

Dmitry.

Re: Запрет дублирующей записи в базе.

DriveSoft wrote:

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

Post's attachments

Attachment icon NoDuplicate.rar 3.02 kb, 477 downloads since 2015-07-01 

Не боги горшки лепят!

Re: Запрет дублирующей записи в базе.

Поправил, у кнопки сохранения не было создано событие OnClick, также добавление записи происходит на главной форме, поэтому форма не имеет действия "NewRecord" (if Action = 'NewRecord' then ...)

Post's attachments

Attachment icon NoDuplicate_fixed.zip 4.29 kb, 498 downloads since 2015-07-01 

Dmitry.

Re: Запрет дублирующей записи в базе.

Спасибо, Дмитрий!

Не боги горшки лепят!