помогите разобраться с методо

Korban_dv
Дата: 08.03.2008 00:57:14
Следующая программа использует метод AddNew для создания новой записи с указанными данными. Для выполнения этой процедуры требуется функция AddName.

Sub AddNewX()

	Dim dbsNorthwind As Database
	Dim rstEmployees As Recordset
	Dim strFirstName As String
	Dim strLastName As String

	Set dbsNorthwind = OpenDatabase("Борей.mdb")
	Set rstEmployees = _
		dbsNorthwind.OpenRecordset("Сотрудники", dbOpenDynaset)

	' Принимает данные от пользователя.
	strFirstName = Trim(InputBox( _
		"Введите имя:"))
	strLastName = Trim(InputBox( _
		"Введите фамилию:"))

	' Продолжает выполнение, только если пользователь ввел

' данные для имени и фамилии.
	If strFirstName <> "" and strLastName <> "" Then

		' Вызывает функцию, добавляющую запись.
		AddName rstEmployees, strFirstName, strLastName

		' Отображает добавленные данные.
		With rstEmployees
			Debug.Print "Новая запись: " & !Имя & _
				" " & !Фамилия
			' Удаляет новую запись, созданную только для демонстрации.
			.Delete
		End With

	Else
		Debug.Print _
			"Необходимо ввести строки для имени и фамилии!"

End If

	rstEmployees.Close
	dbsNorthwind.Close

End Sub

Function AddName(rstTemp As Recordset, _
	strFirst As String, strLast As String)

	' Добавляет новую запись в объект Recordset, используя данные,
	' переданные вызывающей процедурой. Затем новая запись
	' делается текущей записью.
	With rstTemp
		.AddNew
		!Имя = strFirst
		!Фамилия = strLast
		.Update
		.Bookmark = .LastModified
	End With

End Function
В моем случае имеем таблицу Tabl с полями Name1 и Name2. Name1 нужно присвоить значение X, а Name2 текущую дату. И всё это, используя этот метод...
Korban_dv
Дата: 08.03.2008 13:44:29
If Month(DMax("Дата", "Table")) <> Month(Date) Then

Set rst = CurrentDb.OpenRecordset("Table")
proc = 0
With rst
     .AddNew
     !Дата = Date
     !Проценты = proc
     .Update
     .Bookmark = .LastModified
End With

End If


идея такая. В таблице два поля Дата и Проценты. По мере работы с формой значение proc растёт и заносится в поле Проценты. Соответсвенно, нужно, чтобы после смены очередного месяца(1 строка) в таблице Table появлялась новая сточка, где Дата = Date, а Проценты=proc и далее проверка на условия шла по последней строчке и изменения в поле Проценты вносилось в последнюю строчку. А сейчас у меня получается, что если в первой строчке стоит Дата 1.1.1 и Проценты стоит 5, то происходит переход на новую строчку,поле Дата меняется на Date,поле Проценты на 0, но тоже происходит и в первой строчке(а мне нужно, чтобы она осталась без изменеия) Как это поправить?
Гидролог
Дата: 08.03.2008 15:09:47
2 Korban_dv
Мне представляется, что вы пытаетесь вставить в таблицу расчетное поле. Этого делать не стоит и об этом на данном форуме говорилось не раз. Да в любой литературе по базам данных вы можете прочитать. Расчетное поле хранят в таблице только в случае крайней необходимости. Смотрите, сколько трудов вы положили, чтобы его создать и поддерживать. А если вдруг сортировка нарушится то ваш стройный порядок процентов немедленно нарушится, он же привязан к записи, а не к ее положению в форме. Да и вообще, честно говоря он не нужен. Вам нужна конечная накапливаемая сумма этих процентов за месяц по врачу.

Если я правильно понимаю, то вы продолжаете вопрос, поднятый вот здесь http://sql.ru/forum/actualthread.aspx?tid=533864&pg=2. По-моему, решение, которое вам там дали, вполне правильное. Хотя в исполнении, конечно, чувствуется спешка. Я его немного подправил, создал расчетное поле с суммой процентов по врачу, добавил еще справочник врачей, чтобы можно было редактировать прямо в форме.
Korban_dv
Дата: 08.03.2008 15:17:40
Вот я дал. Не мог найти в чем причина, а причина в сторчке, которую я убрал
CurrentDb.Execute ("Update Tabl Set [Дата] = date(), [Проценты]= " & proc & "")
Здесь меняется всё поле целиком, а как поменять только последнюю запись?
Korban_dv
Дата: 08.03.2008 15:23:35
Гидролог
2 Korban_dv
Мне представляется, что вы пытаетесь вставить в таблицу расчетное поле. Этого делать не стоит и об этом на данном форуме говорилось не раз. Да в любой литературе по базам данных вы можете прочитать. Расчетное поле хранят в таблице только в случае крайней необходимости. Смотрите, сколько трудов вы положили, чтобы его создать и поддерживать. А если вдруг сортировка нарушится то ваш стройный порядок процентов немедленно нарушится, он же привязан к записи, а не к ее положению в форме. Да и вообще, честно говоря он не нужен. Вам нужна конечная накапливаемая сумма этих процентов за месяц по врачу.

Если я правильно понимаю, то вы продолжаете вопрос, поднятый вот здесь http://sql.ru/forum/actualthread.aspx?tid=533864&pg=2. По-моему, решение, которое вам там дали, вполне правильное. Хотя в исполнении, конечно, чувствуется спешка. Я его немного подправил, создал расчетное поле с суммой процентов по врачу, добавил еще справочник врачей, чтобы можно было редактировать прямо в форме.

Да, спасибо. Это действительно делает всё то, что нужно, только это к сожалению никак нельзя применить к моей базе.
Сейчас остался только один вопрос: есть X. Как указать, что последняя запись в поле равна X. Не всё поле, а только последняя запись?
Korban_dv
Дата: 08.03.2008 15:52:57
Всё сделал. Всем спасибо за участие!