Отправляет email-рассылки с помощью сервиса Sendsay

RFpro.ru: Базы данных MySQL

  Все выпуски  

RusFAQ.ru: Базы данных SQL


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Базы данных SQL

Выпуск № 231
от 25.03.2007, 09:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 403, Экспертов: 51
В номере:Вопросов: 1, Ответов: 2


Вопрос № 79028: Здраствуйте! Как можно выбрать последний id из таблицы в MS Acces 2000 и, увеличив его на 1, вставить в поле формы, а затем, заполнив форму различными данными, вставить в таблицу как новую строку с этим ID (увеличенным на 1, т.е. следующим)....

Вопрос № 79.028
Здраствуйте! Как можно выбрать последний id из таблицы в MS Acces 2000 и, увеличив его на 1, вставить в поле формы, а затем, заполнив форму различными данными, вставить в таблицу как новую строку с этим ID (увеличенным на 1, т.е. следующим).
Отправлен: 20.03.2007, 08:29
Вопрос задал: Попов Николай (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Филатов Евгений Геннадьевич
Здравствуйте, Попов Николай!
Я не пишу программы в Access - базу использую только для хранения данных, а пользовательская программа написана на VB, поэтому не могу подсказать, в какую процедуру встроить обработчик ( наверное Form_Activate ), но по принципу получения последнего ID и обработки в программе на VB напишу.
Как я понял, ID - ключевое уникальное поле имеет тип длинное целое ( LONG ).
Пример для DAO :
Public dbf As Database
Public r_2 As Recordset
Public nomer As Long
Set dbf = CurrentDB ( )
'если запуск не из модуля текущей базы, то поставить путь к базе, например
' Set dbf = wrk.OpenDatabase( "c:MasloMaslo.mdb", False )
Set r_2 = dbf.OpenRecordset( "select max ( ID ) as nom from BASE" , dbOpenDynaset )
If r_2.RecordCount > 0 Then
If IsNull ( r_2!nom ) Then
nomer = 1
Else
If IsEmpty( r_2!nom ) Then
nomer = 1
Else
nomer = r_2!nom + 1
End If
End If
Else
nomer = 1
End If
Form.Text1 = nomer
'на форме поле номера не редактируется - свойство Enabled = False
Form.Text2 = ""
'какое-то текстовое значение
Form.Show vbmodal
dbf.execute "insert into BASE ( ID , Pole1 ) values ( " & nomer & ",'" & Form.Text2 & "' ) "

Для ADO немного по другому :
Dim dbf As ADODB.Connection
Dim r_2 As ADODB.Recordset
Dim nomer As Long
Set dbf = CurrentProject.Connection
'если запуск не из модуля текущей базы, то поставить путь к базе, например
' dbf.Open "Persist Security Info=False;DSN=База данных MS Access ;DBQ=Pr.mdb ;DefaultDir= ;DriverId=25 ;FIL=MS Access ;MaxBufferSize=2048 ;PageTimeout=300 ;UID=admin;"

nomer = 1
r_2.Open "select max ( ID ) as nom from BASE" , dbf
If NOT ( r_2.EOF or r_2.BOF ) Then
If NOT IsNull ( r_2!nom ) Then
If NOT IsEmpty( r_2!nom ) Then
nomer = r_2!nom + 1
End If
End If
End If
r_2.Close
Form.Text1 = nomer
Form.Text2 = ""
Form.Show vbmodal
dbf.execute "insert into BASE ( ID , Pole1 ) values ( " & nomer & ",'" & Form.Text2 & "' ) "
dbf.Close

Если есть вопросы, пишите jones@hte.vl.net.ua
С уважением.
Ответ отправил: Филатов Евгений Геннадьевич (статус: 7-ой класс)
Ответ отправлен: 20.03.2007, 12:11

Отвечает: Игорь Елизаров
Здравствуйте, Попов Николай!
Подобные вещи делать совсем даже и не рекомендуется.
представьте, что с базой работают двое.
последний ID = 15
первый прочитал его и заполняет потихоньку форму,
подошем второй юзер, и тоже прочитал id = 15
ну и при сохранении данных получится каша.

можно предложить следующий вариант.
заводите пустую запись
после этого запускается форма и эта запись заполняете в форме
но она уже последняя, и если даже сейчас придет следующий сотрудник, записи уже не пересекутся.
но !
если в форме отказаться от сохранения данных, то надо будет сделать удаление записи (или отметить запись на удаление)

вот и все

с уважением, Игорь

---------
Пользователь - тоже человек..
Ответ отправил: Игорь Елизаров (статус: 10-ый класс)
Ответ отправлен: 20.03.2007, 23:13


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
ООО "Мастер-Эксперт Про", Москва, 2007
Авторские права | Реклама на портале
Версия системы: 4.46 от 18.03.2007
Яндекс Rambler's Top100

В избранное