powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Два вопроса
14 сообщений из 14, страница 1 из 1
Два вопроса
    #32876502
bigbrother
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1.
Добавляю в поле со списком fio (источник данных SELECT dbo_fio.id, dbo_fio.fio FROM dbo_fio;) новое значение

Выдает ошибку

Private Sub fio_NotInList(NewData As String, Response As Integer)
If MsgBox("ввести новую ФИО?", vbOKCancel) = vbOK Then
CurrentDb.Execute "Insert into dbo_fio (fio) Values ('" & NewData & "')"


Me.fio.Undo
DoEvents
Me.fio.Requery
Me.fio.Column(1) = NewData - здесь говорит Error 424 Object required
Response = acDataErrContinue
SendKeys "{Enter}"

Else
Response = acDataErrContinue
Me.fio.Undo
End If
End Sub



2.
Как сделать так чтобы в следующей записи повторялись данные из некоторых полей предыдущей???
...
Рейтинг: 0 / 0
Два вопроса
    #32876517
Kelme
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cкажи честно, где ты такой код надыбал, сам придумал или подсказал кто-то?
--------------
crazy about...
...
Рейтинг: 0 / 0
Два вопроса
    #32876552
bigbrother
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kelmecкажи честно, где ты такой код надыбал, сам придумал или подсказал кто-то?
--------------
crazy about...

Да тут примерно такой же в форуме видел.
Переделал чуть для себя
А что?
...
Рейтинг: 0 / 0
Два вопроса
    #32876556
Ukraina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kelmecкажи честно, где ты такой код надыбал, сам придумал или подсказал кто-то?
--------------
crazy about...
Согласен!!!

Вставь следующую функцию в какой-нибудь модуль (подредактируй немного, есть там кое-что ненужное-результаты проб и ошибок)

Public Function AppendLookupTable(cbo As ComboBox, NewData As Variant) As Integer
Dim rst As DAO.Recordset
Dim Response As Long
On Error GoTo m1

AppendLookupTable = acDataErrContinue
If Not (IsNull(NewData)) Then

Response = MsgBox("Категория товара " & Chr(34) & NewData & Chr(34) & " отсутствуют в списке." & vbCrLf & "Для добавления нажмите ОК.", vbOKCancel + vbQuestion, "Добавление значения")

Select Case Response
Case 1
Set rst = CurrentDb.OpenRecordset("Kategory")
rst.AddNew
rst![Kategory] = NewData
rst.Update
rst.Close
AppendLookupTable = acDataErrAdded
Case 2

SendKeys "{esc}", False
SendKeys "{esc}", False
Exit Function
End Select
End If
m2:
Set rst = Nothing
Exit Function
m1:
MsgBox "Ошибка " & Err.Number & ": " & Err.Description & " в функции AppendLookupTable", vbInformation
Resume m2
End Function

На событие поля со списком "Отстутсвие в списке поставь код:
Response = AppendLookupTable(Me.Kategory, NewData)
Не забудь поставить на "Ограничиться списком" - "Да"

Структура таблицы "Kategory": имя поля "Kategory" - индексированное (совпадение допускается)...
Если что еще нужно добавить, то играй с рекорсетом...

Скачал этот алгоритм, работает бесперебойно!!! Алгоритм не мой, честь и хвала тому, кто изобрел, благодарность тому, кто его разместил, а я скачал!!!
...
Рейтинг: 0 / 0
Два вопроса
    #32876603
bigbrother
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сделал как тут написано

/topic/95983#711208

Если закомментировать
Me.fio.Column(1) = NewData
то в базу добавляет фамилию - но приходится её потом руками выбирать из списка..


Второй вопрос остается в силе...

Как сделать так чтобы в следующей записи повторялись данные из некоторых полей предыдущей???
...
Рейтинг: 0 / 0
Два вопроса
    #32876605
Ukraina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Q: Как подставить в качестве значения по умолчанию в поле формы значение последней записи?

Sub Form_Activate ' Hе обязательно в эту обработку

Dim rstThis As Recordset, varThis As Variant

Set rstThis = Me.RecordsetClone
rstThis.MoveLast
varThis = rstThis!FieldName
rstThis.Close
Me!FieldName = varThis ' (Eli Linkov)

End Sub

Тоже не мой алгоритм, а работает как телесериалы... Здесь приведен пример для подстановки значения из предыдущей записи одного поля, но можно спокойно добавить другие поля... Лучше ставить на кнопку типа "новая запись"

Private Sub Кнопка59_Click()
On Error GoTo Err_Кнопка66_Click
Dim rstThis As Recordset, varThis1 As Variant, varThis2 As Variant, varThis3 As Variant, varThis4 As Variant, varThis5 As Variant, varThis6 As Variant, varThis7 As Variant
Set rstThis = Me.RecordsetClone
DoCmd.GoToRecord , , acNewRec

rstThis.MoveLast
varThis1 = rstThis![Марка]
varThis3 = rstThis![Объем]
varThis4 = rstThis![Владелец]
varThis5 = rstThis![Адрес]
varThis6 = rstThis![Телефон]
varThis7 = rstThis![Прежний владелец]
rstThis.Close
Me![Марка] = varThis1
'Me![ПФ_картотека У]![Марка] = varThis2
Me![Объем] = varThis3
Me![Владелец] = varThis4
Me![Адрес] = varThis5
Me![Телефон] = varThis6
Me![Прежний владелец] = varThis7

DoCmd.GoToControl "Номер"
Exit_Кнопка66_Click:
Exit Sub

Err_Кнопка66_Click:
MsgBox Err.Description
Resume Exit_Кнопка66_Click

End Sub

Вообщем попробуй из двух этих алкоголоритмов сделать гибрид под себя... Работает классно...



Жизнь не перестает меня удивлять!!!
...
Рейтинг: 0 / 0
Два вопроса
    #32876618
Ukraina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bigbrotherСделал как тут написано

/topic/95983#711208

Если закомментировать
Me.fio.Column(1) = NewData
то в базу добавляет фамилию - но приходится её потом руками выбирать из списка..


Второй вопрос остается в силе...

Как сделать так чтобы в следующей записи повторялись данные из некоторых полей предыдущей???

Ты сделай как чуть выше написано и все будет окей...
...
Рейтинг: 0 / 0
Два вопроса
    #32876669
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В вопросе присваивалось значению .Column(1) Как правило (99.99999%) комобоксы со справочниками имеют Column(0) для хранения кода и Column(1) для высвечивания наглядной строки (Name, Title, Comment ...). Посему приваивать что-либо не нулевому столбцу - малополезное занятие.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
Private Sub Combo_NotInList(NewData As String, Response As Integer)
    
    Dim cnn As ADODB.Connection
    Dim rs As ADODB.Recordset
    
    Select Case MsgBox( _
        "Нету в справочнике :(." & _
        vbNewLine & vbNewLine & _
        "Добавить '" & NewData & "' в справочник ?", vbQuestion + vbYesNo)
    Case vbNo
        Combo.Undo
        Response = acDataErrContinue
    Case vbYes
        Set cnn = CurrentProject.Connection
        Set rs = New ADODB.Recordset
        rs.Open _
            "SELECT * FROM tbDictionary ORDER BY sDictionaryName", _
            cnn, adOpenDynamic, adLockOptimistic
        rs.AddNew Array("sDictionaryName"), Array(NewData)
        rs.Update
        Set rs = Nothing
        Set cnn = Nothing
        Response = acDataErrAdded
    End Select
    
End Sub
...
Рейтинг: 0 / 0
Два вопроса
    #32876696
bigbrother
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Программист-ЛюбительВ вопросе присваивалось значению .Column(1) Как правило (99.99999%) комобоксы со справочниками имеют Column(0) для хранения кода и Column(1) для высвечивания наглядной строки (Name, Title, Comment ...). Посему приваивать что-либо не нулевому столбцу - малополезное занятие.


В column(0) - у меня код - счетчик
В column(1) - ФИО

Я думал если присвою column(1) новое текстовое значение NewData - то и счтечик инкрементируется...??
...
Рейтинг: 0 / 0
Два вопроса
    #32876713
Ukraina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Слушай Любитель, а зачем так сложно то? Коннекшены, ведь можно проше и необращать внимание на Колумны... Хотя я не претендую на правильность моего применения, но работает то стабильно... Хотя если приглядется, то твой и мой варианты очень схожи, но мне почему-то кажется, что мой вариант проще для запоминания и внедрения... Достаточно загнать эту функцию в модуль и кочевать его из одной проги в другую без особой подгонки... Просто меняешь имена полей и всё... Не критикую просто советуюсь, сейчас попробую оттестить на своем проге твой вариант... Возможно заблуждаюсь, да?

Жизнь не перестает меня удивлять!!!
...
Рейтинг: 0 / 0
Два вопроса
    #32876812
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня много вещей в ADP, поэтому я и в MDB стараюсь работать через ADODB, ADOX.
...
Рейтинг: 0 / 0
Два вопроса
    #32876858
Ukraina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Он будет спать ровно 15 минут, эта привычка выработанная годами..."
Тогда понятно, комментрии снимаю
Жизнь не перестает меня удивлять!!!
...
Рейтинг: 0 / 0
Два вопроса
    #32877238
SRG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SRG
Гость
авторВ column(0) - у меня код - счетчик
В column(1) - ФИО

Я думал если присвою column(1) новое текстовое значение NewData - то и счтечик инкрементируется...??

вместо
Код: plaintext
Me.fio.Column( 1 ) = NewData

попробуйте
Код: plaintext
1.
Me.fio.setfocus 'если фокус не на нем (хотя, вряд ли:))
Me.fio.text = NewData
...
Рейтинг: 0 / 0
Два вопроса
    #32877459
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>> попробуйте . . .

Не пробуйте, это не нужно.

Достаточно вставить новую запись в справочник и флажок события НеВСписке Response = acDataErrAdded.

И в хелпе есть однозначный пример по этому поводу.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Два вопроса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]