2014-10-31 2 views
0

Так что я немного новый для доступа к vba и просто столкнулся с ОГРОМНОЙ проблемой с кодом. Позвольте мне объяснить, у меня есть форма, которая загружает данные из текущей записи и позволяет пользователю ее редактировать. В настоящее время я создаю кнопку сохранения, поэтому данные, которые были изменены, должным образом обновлены в базе данных. у меня есть проверка, чтобы данные в текстовом поле были равны данным в наборе записей. Проблема в том, что если данные в базе данных равны нулю, он будет работать так, как если бы они были равны данным в текстовом поле, даже если текстовое поле имеет в нем «Обновленная группа». Для меня это немного надзор и своего рода разочарование. Мой вопрос: кто-нибудь знает обходное решение этой проблемы?VBA: обновление набора записей на основе текущих данных

Заранее благодарим за любую информацию.

ВОТ ОТВЕТ: Если RstRecSet ("GroupName") Значение & "" <> txtGroupNameEdit.Value & "" -Wayne

Вот мой код:.

Dim searchGroup As String 
Dim db As DAO.Database 
Dim RstRecSet As DAO.Recordset 
Dim Rst As DAO.Recordset 
Set db = CurrentDb 
searchGroup = txtGroupNrEdit 
Set RstRecSet = db.OpenRecordset("Select * from tblGroupHeader Where groupNum like '*" & searchGroup & "*';", dbOpenDynaset) 
Set Rst = db.OpenRecordset("Select * from tblAuditTable;", dbOpenDynaset) 

If RstRecSet("GroupName").Value <> txtGroupNameEdit.Value Or RstRecSet("PlanStartDate").Value <> txtStartDateEdit.Value _ 
Or RstRecSet("CanDate").Value <> txtCanDateEdit.Value Or RstRecSet("ClerkID").Value <> txtClerkIDEdit.Value _ 
Or RstRecSet("PopulationType").Value <> txtGroupTypeEdit.Value Or RstRecSet("COC").Value <> chkCOCEdit.Value _ 
Or RstRecSet("CDHFinancialPartner").Value <> cmbCDHEdit.Value Or RstRecSet("CDHProdOptions").Value <> chkCDHEdit.Value _ 
Or RstRecSet("MemberLevelBenefits").Value <> chkMembBeneEdit.Value Or RstRecSet("Comments").Value <> txtCommentsEdit.Value _ 
Or RstRecSet("AlsoKnownAs").Value <> txtKnownEdit.Value Or RstRecSet("BCBS").Value <> chkBCBSEdit.Value _ 
Or RstRecSet("Other").Value <> chkOtherEdit.Value Then 
    RstRecSet.Edit 
    Rst.AddNew 
     If RstRecSet("AlsoKnownAs").Value <> txtKnownEdit.Value Then 
     Rst("GroupName").Value = txtGroupNameEdit.Value 
     Rst("GroupNum").Value = txtGroupNrEdit.Value 
     RstRecSet("AlsoKnownAs").Value = txtKnownEdit.Value 
     Rst("AlsoKnownAs").Value = RstRecSet("AlsoKnownAs") 
     Rst("DateChanged").Value = Date 
     End If 
     If RstRecSet("PlanStartDate").Value <> txtStartDateEdit.Value Then 
     Rst("GroupName").Value = txtGroupNameEdit.Value 
     Rst("GroupNum").Value = txtGroupNrEdit.Value 
     RstRecSet("PlanStartDate").Value = txtStartDateEdit.Value 
     Rst("PlanStartDate").Value = RstRecSet("PlanStartDate") 
     Rst("DateChanged").Value = Date 
     End If 
     If RstRecSet("CanDate").Value <> txtCanDateEdit.Value Then 
     Rst("GroupName").Value = txtGroupNameEdit.Value 
     Rst("GroupNum").Value = txtGroupNrEdit.Value 
     RstRecSet("CanDate").Value = txtCanDateEdit.Value 
     Rst("CanDate").Value = RstRecSet("CanDate") 
     Rst("DateChanged").Value = Date 
     End If 
     If RstRecSet("PopulationType").Value <> txtGroupTypeEdit.Value Then 
     Rst("GroupName").Value = txtGroupNameEdit.Value 
     Rst("GroupNum").Value = txtGroupNrEdit.Value 
     RstRecSet("PopulationType").Value = txtGroupTypeEdit.Value 
     Rst("PopulationType").Value = RstRecSet("PopulationType") 
     Rst("DateChanged").Value = Date 
     End If 
     If RstRecSet("CDHFinancialPartner").Value <> cmbCDHEdit.Value Then 
     Rst("GroupName").Value = txtGroupNameEdit.Value 
     Rst("GroupNum").Value = txtGroupNrEdit.Value 
     RstRecSet("CDHFinancialPartner").Value = cmbCDHEdit.Value 
     Rst("CDHFinancialPartner").Value = RstRecSet("CDHFinancialPartner") 
     Rst("DateChanged").Value = Date 
     End If 
     If RstRecSet("MemberLevelBenefits").Value <> chkMembBeneEdit.Value Then 
     Rst("GroupName").Value = txtGroupNameEdit.Value 
     Rst("GroupNum").Value = txtGroupNrEdit.Value 
     RstRecSet("MemberLevelBenefits").Value = chkMembBeneEdit.Value 
     Rst("MemberLevelBenefits").Value = RstRecSet("MemberLevelBenefits") 
     Rst("DateChanged").Value = Date 
     End If 
     If RstRecSet("Other").Value <> chkOtherEdit.Value Then 
     Rst("GroupName").Value = txtGroupNameEdit.Value 
     Rst("GroupNum").Value = txtGroupNrEdit.Value 
     RstRecSet("Other").Value = chkOtherEdit.Value 
     Rst("Other").Value = RstRecSet("Other") 
     Rst("DateChanged").Value = Date 
     End If 
     If RstRecSet("ClerkID").Value <> txtClerkIDEdit.Value Then 
     Rst("GroupName").Value = txtGroupNameEdit.Value 
     Rst("GroupNum").Value = txtGroupNrEdit.Value 
     RstRecSet("ClerkID").Value = txtClerkIDEdit.Value 
     Rst("ClerkID").Value = RstRecSet("ClerkID") 
     Rst("DateChanged").Value = Date 
     End If 
     If RstRecSet("COC").Value <> chkCOCEdit.Value Then 
     Rst("GroupName").Value = txtGroupNameEdit.Value 
     Rst("GroupNum").Value = txtGroupNrEdit.Value 
     RstRecSet("COC").Value = chkCOCEdit.Value 
     Rst("COC").Value = RstRecSet("COC") 
     Rst("DateChanged").Value = Date 
     End If 
     If RstRecSet("CDHProdOptions").Value <> chkCDHEdit.Value Then 
     Rst("GroupName").Value = txtGroupNameEdit.Value 
     Rst("GroupNum").Value = txtGroupNrEdit.Value 
     RstRecSet("CDHProdOptions").Value = chkCDHEdit.Value 
     Rst("CDHProdOptions").Value = RstRecSet("CDHProdOptions") 
     Rst("DateChanged").Value = Date 
     End If 
     If RstRecSet("Comments").Value <> txtCommentsEdit.Value Then 
     Rst("GroupName").Value = txtGroupNameEdit.Value 
     Rst("GroupNum").Value = txtGroupNrEdit.Value 
     RstRecSet("Comments").Value = txtCommentsEdit.Value 
     Rst("SpecialConsideration").Value = RstRecSet("Comments") 
     Rst("DateChanged").Value = Date 
     End If 
     If RstRecSet("BCBS").Value <> chkBCBSEdit.Value Then 
     Rst("GroupName").Value = txtGroupNameEdit.Value 
     Rst("GroupNum").Value = txtGroupNrEdit.Value 
     RstRecSet("BCBS").Value = chkBCBSEdit.Value 
     Rst("BCBS").Value = RstRecSet("BCBS") 
     Rst("DateChanged").Value = Date 
     End If 
     If RstRecSet("GroupName").Value <> txtGroupNameEdit.Value Then 
     Rst("GroupName").Value = txtGroupNameEdit.Value 
     Rst("GroupNum").Value = txtGroupNrEdit.Value 
     RstRecSet("GroupName").Value = txtGroupNameEdit.Value 
     Rst("GroupName").Value = RstRecSet("GroupName") 
     Rst("DateChanged").Value = Date 
     End If 
    Rst.Update 
    RstRecSet.Update 
End If 
+0

Ваш код не соответствует его описанию. Похоже, вы проверяете, «что-то другое?» и если вы действительно добавляете новую запись в дополнение к редактированию записи. Я не уверен, что вы на самом деле спрашиваете. – enderland

+0

Не обращайте внимания на запись добавления, которая предназначена только для таблицы аудита. Работы, подобные вам, «что-то другое», измените то, что иначе ». Проблема в том, когда позволяет сказать, что «KnownAs» ничего не имеет в записи, которую он не вызывает, «что-то другое»? (я думаю, потому что он имеет значение null), он просто предполагает, что это то же самое. – SaladSnake

+0

Нулевые значения могут вызвать странные результаты во время сравнений, поэтому вам нужно определить, является ли поле набора записей нулевым. то есть «Если RstRecSet (« GroupName »). Значение &" "<> txtGroupNameEdit.Value & "" .... –

ответ

0

Нулевые значения могут вызывать странные результаты во время сравнений. Попробуйте что-то вроде следующего:

If RstRecSet("GroupName").Value & "" <> txtGroupNameEdit.Value & "" Or ... 
0

Но ваша кнопка сохранить нужно только одну строку кода:

Если me.dirty то me.dirty = ложь

Зачем вам все это другое код и чеки? Когда вы редактируете данные в форме доступа, данные НЕ изменяются или не привязаны к таблице, если вы разрешаете сохранение данных. И БОЛЬШЕ важна, если элемент управления не изменяется, тогда код события для этого элемента управления не запускается. Поэтому ОГРОМНЫМ ОТХОДОМ времени писать тонны кода, когда на самом деле вам не нужно.

И вы можете, конечно, (и должны) разместить дополнительный код, который проверяет значения и дату в формах перед событием обновления. Это событие происходит до того, как данные из формы будут записаны в таблицу, и вы можете добавить код для проверки пустых текстовых полей или иметь ОЧЕНЬ сложный код и правила для проверки данных ПЕРЕД записью данных НАЗАД в таблицу.

Вы повторно изобретаете колесо для ничего здесь и тратите драгоценное время разработчика. Для сохранения данных вам нужно сохранить только одну строку кода.

Чтобы предотвратить сохранение, вы можете просто поместить код проверки и проверки в формы перед событием обновления, и это событие НЕ будет гореть, если пользователь не будет редактировать какие-либо данные. Возможно, вы объясните, что такое проверка проблемы с данными. Кнопка сохранения не требуется, и имейте в виду, что ctrl-s, ctrl-f4 и большое количество других клавиш будут содержать данные, но во ВСЕХ случаях ваш тестовый код перед запуском и запуском события обновления.

+0

Здравствуйте, Альберт, мне нужно проверить код, чтобы увидеть, изменил ли пользователь данные в форме. Позволь мне объяснить. Когда форма загружается, она загружается с данными из набора записей, позволяет сказать A. Затем пользователь имеет возможность редактировать данные, после которых они могут нажать «сохранить». Проверки перед обновлением записи только для того, чтобы убедиться, что пользователь фактически изменил значение в текстовом поле. Это, к сожалению, связано с добавлением большого количества кода. Спасибо за ваше время и сообщив мне о грязном имуществе, я, честно говоря, понятия не имел, что он существует. Спасибо, – SaladSnake

Смежные вопросы