20.03.2007, 12:11
общий
это ответ
Здравствуйте, Попов Николай!
Я не пишу программы в 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:\Maslo\Maslo.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
С уважением.