Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Помогите создать ключ!!!
 
 автор: Arkadens   (10.02.2007 в 13:16)   личное сообщение
 
 

Нужно создать ключевое поле формата ([год создания анкеты]-[порядковый номер анкеты в этом году]).
Сам ничего не придумал.
Подскажите пожалуйста, как это сделать?

  Ответить  
 
 автор: Bellerofont   (10.02.2007 в 14:38)   личное сообщение
 
 

непонятно, что вы называете форматом.
Если [год создания анкеты] и [порядковый номер анкеты в этом году] поля таблицы, то ключевое поле легко создается в конструкторе таблицы: меню Вид - Индексы (View - Indexes)

  Ответить  
 
 автор: Arkadens   (10.02.2007 в 15:22)   личное сообщение
 
 

Да есть поле ДАТА СОЗДАНИЯ АНКЕТЫ
Есть поле счетчик.

Мне нужно, чтоб ключом было выражение типа

2006-1
2006-2
2006-3
2007-1
2007-2

Проблема в том, что счетчик считает все насквозь.
Надо как-то заставить счетчик сбрасываться на единицу, когда наступает новый год.

  Ответить  
 
 автор: ДрЮня   (10.02.2007 в 22:45)   личное сообщение
 
 

fфункци возвращает номер заказа в формате "номер года" / "номер заказа" - "07/01"


Public Function get_OrderNumber() As String
Dim sSQL As String, rs As ADODB.Recordset, s As String, b As Byte

On Error GoTo L_Err
get_OrderNumber = ""

Set rs = New ADODB.Recordset
sSQL = "SELECT Max(tblOrder.NumberOrder) AS MaxNum FROM tblOrder"
rs.Open sSQL, cnn
If rs.EOF Then
s = Format(Now(), "yy") & "/01_1"
Else
If Format(Now(), "yy") = Left(rs("MaxNum"), 2) Then
b = InStr(rs("MaxNum"), "_")
If b Then
s = Mid(rs("MaxNum"), 1, b) & Val(Right(rs("MaxNum"), 1)) + 1
Else
s = Val(Mid(rs("MaxNum"), 4)) + 1
s = IIf(Len(s) = 1, "0" & s, s)
s = Format(Now(), "yy") & "/" & s
End If
Else
s = Format(Now(), "yy") & "/01_1"
End If
End If

get_OrderNumber = s

L_Exit: Set rs = Nothing: Exit Function
L_Err: MsgBox Err.Description & " (" & Err.Number & ")", vbExclamation, "get_OrderNumber": GoTo L_Exit
End Function

  Ответить  
 
 автор: Arkadens   (11.02.2007 в 22:14)   личное сообщение
 
 

Прошу прощения я за тупость свою.

Как это будет выглядеть если таблица "АНКЕТА", поля "ДАТА" и "Номер"

И как потом эту функцию использовать? Что, вставлять в поле таблицы как значение по умолчанию?

  Ответить  
 
 автор: Explorer   (12.02.2007 в 00:38)   личное сообщение
 
 

довольно бессмысленно создавать такое составное ключевое поле

  Ответить  
 
 автор: Arkadens   (12.02.2007 в 05:12)   личное сообщение
 
 

этого требукт начальство - им видишь ли удобно иметь уникальный номер анкеты в виде ГОД-НОМЕР. Говорят всю жизнь так было и они привыкли.
Люди добрые, подскажите, обьясните!

  Ответить  
 
 автор: Arkadens   (12.02.2007 в 05:12)   личное сообщение
 
 

этого требукт начальство - им видишь ли удобно иметь уникальный номер анкеты в виде ГОД-НОМЕР. Говорят всю жизнь так было и они привыкли.
Люди добрые, подскажите, обьясните!

  Ответить  
 
 автор: Explorer   (12.02.2007 в 08:42)   личное сообщение
 
 

это не значит, что нужно делать такой первичный ключ в таблице

номер типа YYYY-n можно сгенерировать в запросе - не обязательно его хранить в БД

  Ответить  
 
 автор: amba-l   (12.02.2007 в 12:05)   личное сообщение
 
 

можно даже и хранить
тока ключом его делать не надо

  Ответить  
 
 автор: arkadens   (12.02.2007 в 14:51)   личное сообщение
 
 

В принципе согласен.
Я хотел сделать двойной ключ:

- Номер (счетчик)
- Год (Year(Now))

Но тогда как обнулять первое поле при наступлении нового года?

  Ответить  
 
 автор: osmor   (14.02.2007 в 08:29)   личное сообщение
 
 

попробую собрать в кучу все что насоветовали выше и добавить своего.
1. Не стоит делать ключ из двух полей, оставьте счетчик ключевым полем и не показывайте его никому
2. создайте поле "порядковый номер анкеты" - Long (не счетчик)
на событие создани новой записи считайте его так
me.[порядковый номер анкеты] = nz(dmax("[порядковый номер анкеты]","таблицаАнкет","ГодСозданияАнкеты = " & Year(date())),0) +1
3. Если очень хочется буть уверенным в уникальности пары годАнкеты+НомерАнкеты создайте уникальный индекс (НЕ КЛЮЧ)
4 ГодСозданияАнкеты я бы тоже не стал выделять отдельным полем ,а вычислял бы его в момент когда его надо показать из даты создания анкеты.

  Ответить  
 
 автор: Explorer   (14.02.2007 в 10:52)   личное сообщение
 
 

ну вот и все, собственно :)))

  Ответить  
 
 автор: Explorer   (12.02.2007 в 01:00)   личное сообщение
 
 

почему-то два раза запостилось

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList