2015-11-04 2 views
0

Недавно я перевел базу данных Access (которая была более осведомленной, чем я разрабатывала) в MySQL, и привязала таблицы к Access для использования в качестве интерфейса. Почти все выглядит великолепно. Существует только одна форма и фрагмент кода VBA, который, похоже, не работает. Существует форма, в которой должны отображаться выпадающие меню и элементы управления, но пустое в виде формы. The form in design view and form view код VBA, который идет с формой являетсяСценарии VBA больше не работают после миграции SQL

Option Compare Database 

Private Sub cmdPreviewPlate_Click() 
'show user the new plate that is to be added to tblPCRsamples 
On Error GoTo Err_cmdPreviewPlate_Click 

'check whether boxes are blank 
Dim bolBlank As Boolean 
bolBlank = False 

If IsNull(Me.Controls!cboChooseTemplatePlate) Then bolBlank = True 
If IsNull(Me.Controls!cboChooseLocus) Then bolBlank = True 
If IsNull(Me.Controls!txtEnterDate) Then bolBlank = True 

If bolBlank = False Then 
    'enable the Add button 
    Me.Controls!cmdAddPlate.Enabled = True 

    'generate the unique PCRplate from the template plate number and locus 
    ' using the global variable GstrPCRPlateName so that the queries can add the plate name to both tables 
    GstrPCRPlateName = Me.Controls!cboChooseTemplatePlate.Value & "_" & Me.Controls!cboChooseLocus 

    'check: does this PCRplate already exist in tblPCRplates? 
    Dim dbs As Database 
    Dim rst As Recordset 
    Dim bolDone As Boolean 
    Dim bolNameExists As Boolean 

    bolDone = False 
    bolNameExists = False 
    Set dbs = CurrentDb 
    Set rst = dbs.OpenRecordset("tblPCRplates", dbOpenDynaset) 

    rst.MoveFirst 

    Do Until bolDone = True 
     'does the new plate name automatically generated here = the value of PCRplate in the current record? 
     If GstrPCRPlateName = rst![PCRPlate] Then 
      bolNameExists = True 
      bolDone = True 
     End If 

     rst.MoveNext 

     If rst.EOF Then bolDone = True 
    Loop 

    'if the name already exists, make a new name by appending _ and the date 
    If bolNameExists = True Then 
     GstrPCRPlateName = GstrPCRPlateName & "_" & Me.Controls!txtEnterDate 
    End If 

    'set the value for the Locus 
    GstrGetLocus = Me.Controls!cboChooseLocus 

    'open the select query to show user what they're going to add to the PCR plates & samples tables 
    Dim stDocName As String 

    stDocName = "qryNewPCR_1SelectTemplatePlate" 
    DoCmd.OpenQuery stDocName, acNormal, acReadOnly 
Else 
    'if user left fields blank (except page number, that can be blank), show an error message 
    MsgBox "Choose/enter values for all the boxes" 
End If 

Exit_cmdPreviewPlate_Click: 
    Exit Sub 

Err_cmdPreviewPlate_Click: 
MsgBox Err.Description 
Resume Exit_cmdPreviewPlate_Click 

End Sub 

Private Sub cmdAddPlate_Click() 
'add this new plate to tblPCRplates and tblPCRsamples 
On Error GoTo Err_cmdAddPlate_Click 

'add the new plate to tblPCRplates 
Dim stDocName As String 
stDocName = "qryNewPCR_2AppendPlate" 
DoCmd.OpenQuery stDocName, acNormal, acEdit 

'run the query to append the samples to tblPCRsamples 
stDocName = "qryNewPCR_3AppendSamples" 
DoCmd.OpenQuery stDocName, acNormal, acEdit 

'open frmPCRSamples to show the new plate has been added 
stDocName = "frmPCRSamples" 
DoCmd.OpenForm stDocName, acFormDS 

Exit_cmdAddPlate_Click: 
Exit Sub 

Err_cmdAddPlate_Click: 
MsgBox Err.Description 
Resume Exit_cmdAddPlate_Click 

End Sub 

Так что мой вопрос, должны ли связанные таблицы быть причиной ошибки? Есть ли что-то, что я могу изменить, чтобы сказать, что они связаны? Или я лаяю неправильное дерево?

Благодарим за помощь. Я ничего не знаю о VBA (я имею в виду, я могу следовать), и мне было поручено уничтожить, я имею в виду ... admin ... эту базу данных. Это то, что происходит, когда вы предоставляете биологам компьютеры ;-) Даже хорошие ресурсы очень помогут.

+1

Когда вы впервые открываете форму, если она отображается в скриншоте формы, то код VBA не имеет ничего общего с этой проблемой. Каков источник записи формы? – HansUp

+0

Да, я думаю, что это две разные проблемы. Но я надеюсь на одну причину ... – Tichigan

+0

Я попытаюсь запустить запрос select в SQL и посмотреть, что я получаю. Я не уверен, если это связано, но я имел обыкновение модифицировать запись, когда я делал запрос select в Access, но теперь, когда он связан с MySQL, он не позволит мне (например) ввести дату для одной записи. – Tichigan

ответ

1

Случае, когда ваш RecordSource формы возвращает нулевые записи, а форма или источник записи не позволяют добавлять новые записи.

Проверьте источник записи (таблицу, запрос или строку SQL) и запустите ее вручную, чтобы увидеть, возвращает ли она записи.

+0

Хорошо, я запустил SQL-запрос вручную, чтобы выбрать вашу пластину и выбрать элементы управления локусом. Для других нет источника строк (RecordSource), потому что они предназначены для ввода (это работало до миграции, но теперь ли это неправильно?). – Tichigan

+0

Кажется, что это так. – Gustav

+0

Спасибо. Не могли бы вы (или кто-либо) посоветовать, как настроить форму, в которой я выбираю запись из одной таблицы (Plate) и копировать ее с модификацией (Plate_geneMod) в другую таблицу, заполняя некоторые метаданные (штрих-код, дата) ? Очень признателен. – Tichigan

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