Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS Access > Переход по записи в форме


Автор: Гость_Raina 14.2.2005, 22:26
Форма создана по запросу на выборку, как отключить переход к следующей записи по Scroll, и сделать автоматический переход к записи по значению поля. При вводе номера сертификата перейти на эту записи. СПАСИБОЧКИ!!!

Автор: Akina 15.2.2005, 12:14
Вопрос непонятен. Какой скролл? что за значение поля? при чем тут сертификаты?

Автор: Golden Hands 16.2.2005, 14:20
То есть тебе нужно ввести номер записи в каком-то текстовом поле и при нажатии кнопки - прыгнуть на запись под этим номером? smile
Совсем недавно я это программил. Покопаюсь в дебрях винта, напишу smile.

Автор: Golden Hands 18.2.2005, 04:03
Вот, держи:
Код

.........................
Dim a As String
Dim b As Integer
Dim cv As Integer
.........................
.........................
Private Sub Form_AfterDelConfirm(Status As Integer)
If c = 1 Then a = Form.CurrentRecord
End Sub

Private Sub Form_AfterInsert()
b = Form.CurrentRecord
End Sub

Private Sub Form_BeforeDelConfirm(Cancel As Integer, Response As Integer)
cv = Form.CurrentRecord
End Sub

Private Sub Form_Open(Cancel As Integer)
DoCmd.GoToRecord , , acLast
b = Form.CurrentRecord
DoCmd.GoToRecord , , acFirst
a = Form.CurrentRecord
numrec.SetFocus
numrec.Text = "1"
End Sub

Private Sub perehod_Click()
If (numrec.Value >= a) And (numrec.Value <= b) Then DoCmd.GoToRecord acForm, "redfor", acGoTo, numrec.Value Else MsgBox "Такой записи не существует", vbCritical, "Ошибка"
End Sub


P.S. numrec - это поле для ввода номера записи, redfor - имя формы, perehod - имя кнопки, на которую тычем :-). Написано кривовато, но уж сам поправишь. smile

Автор: Lavda 22.2.2005, 09:55
Единственный способ как отключить переход по Скролу отключить его нафиг в винде smile
Новомодные способы от Майкрософта не работают или очень глючат, да и свободной реализации толковой нет. (Scroll - даже событие такое есть Akina)

Автор: Impulse 22.2.2005, 19:05
А я вот не понял, номер записи это что? по таблице номер записи что ли?(которого быть не может, это не реляционные базы данных, а х какая-то)

Автор: Golden Hands 23.2.2005, 01:30
Цитата
Единственный способ как отключить переход по Скролу отключить его нафиг в винде

Можно событию scroll назначить следующее - запомнить номер текущей записи и переходить на эту запись. Т.е. перехода вперед/назад по записям не будет.

Цитата
А я вот не понял, номер записи это что? по таблице номер записи что ли?

У каждой записи есть номер. Он отображается, например, возле кнопок перехода в форме. Не знал? smile

Автор: Lavda 23.2.2005, 11:11
2Golden Hands можно и назначить переход к текущей записи, хи , а ты попробуй, а потом подергай туда суда колёсиком, оно проскакивать умудряеться.

Есть ещё пример от Микрософта с субклассированием но он тож глючит и проскакивает

Автор: Golden Hands 23.2.2005, 14:04
Цитата
можно и назначить переход к текущей записи, хи , а ты попробуй, а потом подергай туда суда колёсиком, оно проскакивать умудряеться.

Попробую. smile

Автор: Impulse 23.2.2005, 17:08
Цитата(Golden @ 23.2.2005, 07:30)
У каждой записи есть номер. Он отображается, например, возле кнопок перехода в форме. Не знал? 

ФИГНЯ! Почитай теорию.
Простой пример отсортируй любой атрибут по возрастанию, а потом наоборот и посмотри что получится.

Автор: Akina 24.2.2005, 10:20
Цитата(Lavda @ 22.2.2005, 10:55)
(Scroll - даже событие такое есть Akina)

У формы??? Может речь о MouseWheel? или о каком-то конкретном контроле? все-таки...

Golden Hands
Impulse
Хотите поругаться - шагайте в Аську.

Автор: Golden Hands 25.2.2005, 01:29
Цитата
Может речь о MouseWheel?

Да, и это единственное прямое событие, выполняющееся при манипуляциях с колесиком.
Цитата
Хотите поругаться - шагайте в Аську.

Че уж сразу поругаться? smile
Цитата
Цитата

У каждой записи есть номер. Он отображается, например, возле кнопок перехода в форме. Не знал?

ФИГНЯ! Почитай теорию.
Простой пример отсортируй любой атрибут по возрастанию, а потом наоборот и посмотри что получится.

Ага, посмотрел, и правильней будет сказать - каждой записи при загрузке (и не только) формы присваивается фиктивный номер. Но, когда частенько с этим работаешь, уже на автомате считаешь, что
Цитата
У каждой записи есть номер.
smile

Автор: Golden Hands 25.2.2005, 02:18
Итак, вот код для отключения перехода по записям по Scroll'у:

Код

Option Compare Database
Dim a As Integer, b As Integer, c As Integer, d As Integer, e As Integer
............................................................................

Private Sub Form_Current()
If b = 1 Then DoCmd.GoToRecord acForm, "form1", acGoTo, a
End Sub

Private Sub Form_MouseWheel(ByVal Page As Boolean, ByVal Count As Long)
b = 1
a = Form.CurrentRecord
End Sub


Значение b=1 означает, что колесико мыши крутилось. smile
Замечание: При b=1 использование стандартных кнопок перехода по записям формы невозможно (то есть возможно, но результат будет - выбор одной и той же записи (текущей)smile).

При создании собственных кнопок примерный код такой:

Код

Private Sub Form_Load()
DoCmd.GoToRecord acForm, "form1", acLast
d = Form.CurrentRecord
DoCmd.GoToRecord acForm, "form1", acFirst
c = Form.CurrentRecord
e = 3
End Sub

Private Sub Next_1_Click()
b = 0
If Form.CurrentRecord < d Then DoCmd.GoToRecord acForm, "form1", acNext
End Sub

Private Sub GoTo_1_Click()
b = 0
If (e >= c) And (e <= d) Then DoCmd.GoToRecord acForm, "form1", acGoTo, e
End Sub


А вот при b=0 событие Form_Current не происходит, и кнопки работают как часы smile.

Ну и установка переменной b в значение 0 (для нормальной работы стандартных кнопок обработки записей):

Код

Private Sub Form_Timer()
If b <> 0 Then b = 0
End Sub

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If b <> 0 Then b = 0
End Sub

Private Sub ЗаголовокФормы_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If b <> 0 Then b = 0
End Sub

Private Sub ОбластьДанных_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If b <> 0 Then b = 0
End Sub

Private Sub ПримечаниеФормы_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If b <> 0 Then b = 0
End Sub


Естественно, из всех этих событий хватит и одного Timer'а. Я выставил его интервал - 100. Но это - кто как. Вобще хватит и 1 секунды.

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

Я крутил колесико с максимальной скоростью, какую только может развить мой палец smile. Проскоков не было. Не думаю, что часто встречаются люди, палец которых обладает поистине скоростью истребителя, тем более - специально бешено раскручивающие колесико мыши. Это уже - зоофилия. smile

Автор: Akina 25.2.2005, 10:16
Код

If b <> 0 Then b = 0

Это вообще достойно музея юмора! smile smile

Автор: Golden Hands 26.2.2005, 14:44
Цитата
If b <> 0 Then b = 0
Это вообще достойно музея юмора! 

Ну и что - мелочь. smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)