|
|
|
| все в производстве - уникальный индекс не поставить и чтобы дальше не повторялось эта чехарда как при вводе новой записи проверить по нескольким полям что данные уже есть? например, в таблице анкета это поля: фамилия, имя, отчество, дата рождения и в случае совпадения не вводить с выдачей соответствующего сообщения пользователю (vba) Хорошо бы пример. | |
|
| |
|
|
|
| Перед сохранением посчитать количество записей в таблице с фильтром по четырем полям. | |
|
| |
|
|
|
| спасибо! но увы не умею в vba - просматривать все- ужас.Наверное есть конструкция - но какая - подскажи. Может быть Dcount()/как правильно написать. | |
|
| |
|
|
|
| Как-то так:
Private Const SQLDATE As String = "\#mm\/dd\/yyyy\#"
Private Sub Form_BeforeUpdate(Cancel As Integer)
Dim strFilter As String
strFilter = "Фамилия='" & Me!Фамилия & "' AND Имя='" & Me!Имя & "' AND Отчество='" & Me.Отчество & "' AND ДеньРождения=" & Format$(Me!ДеньРождения, SQLDATE)
If DCount("*", "Сотрудники", strFilter) > 0 Then
MsgBox "Такой уже имеется"
Cancel = 1
End If
End Sub
|
| |
|
| |
|
|
|
| без использования даты все работает а при включении даты что-то не так Вот ваш код с моими изменениями
Private Const SQLDATE As String = "\#mm\/dd\/yyyy\#"
Private Sub Form_BeforeUpdate(Cancel As Integer)
Dim strFilter As String
strFilter = "Фамилия='" & Me!фамилия & "' AND Имя='" & Me!имя & "' AND Отчество='" & Me.отчество & "' "
If DCount("*", "анкета", strFilter) > 0 Then
MsgBox "Такой уже имеется"
Cancel = 1
Else
Parent.[подчиненная форма список членов семьи].Requery
Parent.[подчиненная форма ДЕТЕЙ ЗАПРОС].Requery
End If | |
|
| |
|
|
|
| что-то с датой не так.Все остальное работает. В таблице она как краткий формат даты и вид dd.mm.yyyy Выдает ошибку синтаксиса.Убираю дату - все работает. Помогите исправить. | |
|
| |
|
|
|
| Проверь формат даты,
возможно прийдется конвертировать для совместимости
CStr([ТвояДата])-конвертирует в строку | |
|
| |
|
|
|
| Во блин такую проблему я уже пытался решать. Таких примеров уже куча.
Спасибки за код. | |
|
| |
|
|
|
| Можно получить строку на каждого сотрудника
и ее сверять
Trim$(CStr([Фамилия])) & Trim$(CStr([Имя])) & Trim$(CStr([Отчество]))& Trim$(CStr([ДатаРождения]))
| |
|
| |
|
|
|
| В таком случае:
1. Иванов Иван Иванович 01.01.1950
и
2. ИвановИ ванИ ванович 01.01.1950
будут давать одинаковые строки: "ИвановИванИванович01.01.1950", а
данные то в полях разные.
К тому-же, зачем лишние функции (16 штук) там, где и без них можно обойтись? | |
|
| |
|
|
|
| У нас товарисч работает по имени "Абу Валид"
и если с имени нечаянно поставить два пробела то его можно внести дважды
Предлагаю очень извратный способ: составной ключ
Но это жестоко
на самом деле есть уникальные данные
например
табельный номер, номер паспорта | |
|
| |
|
|
|
| Спорить можно до уср.
Все сложно. Потому и выбрал метод отсева из списка. Ввод в разные поля что бы ошибок не было да по маске ввода, что бы на регистр не смотреть. Фамилия Инициалы ДатаРождения - уже фильтр хороший. Далее если список пуст, то стало быть нет товарища и его добавляем запросом. Если есть, то запрос не срабатывает. Ну и форма для работы с ним открывается.
Но это я так сделал. Видимо неподдерживается идея. А пользователям так очень понравлось.
ludmil, Лукас мне подобный код на запрос давал. Тоже поначалу с датой проблемка была. Адаптировал слегонцухи под себя. Вот получилось:
Private Sub ПолеСоСписком13_AfterUpdate()
Dim stDocName As String
Dim stLinkCriteria As String
Me![Список10].Requery
Me.Requery
If Me.Список10.ListCount = 0 Then
If MsgBox("Введенный: " & [ПолеСоСписком2] & " " & [ПолеСоСписком4] & " " & [Поле6] & " г.р." & " отсутствует в базе. Добавить?", vbOKCancel) = vbOK Then
Const SQLDATE As String = "\#mm\/dd\/yyyy\#"
strSQL = "INSERT INTO Пациенты ( Фамилия, Инициалы, ДатаРождения, Пол ) Values ('" & Me.ПолеСоСписком2 & "', '" & Me.ПолеСоСписком4 & "', " & Format$(Me.Поле6, SQLDATE) & ", '" & Me.ПолеСоСписком13 & "');"
CurrentDb.Execute strSQL
Response = acDataErrAdded
DoCmd.Close acForm, "Поиск ввод пациентов"
Ну и там дальше нагромождено. (Я не пограммер) но все работает блин как надо. | |
|
| |