2013-12-24 2 views
0

Так что я немного почесываю голову по этому вопросу, и хотя это кажется простым в теории, мне сложно выполнять его в VBA.Access 2007 VBA Копирование записей в тот же стол

будут необходимы, чтобы понять, что я пытаюсь сделать некоторые первоисточники по проекту

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

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

тогда у нас есть форма, в которой вы выбираете версию программного обеспечения, с которой вы работаете.

вот проблема я встречая

когда вы выбрали версию программного обеспечения, я хочу иметь кнопку, которую вы щелкнули, и он принимает все связанные с ним тестовые сценарии копирует их и присваивает выбранную версию программного обеспечения, если ЭТО БЫЛО СОВЕРШЕННО. это позволит вам делать заметки для конкретного сценария, который может отличаться от версии к версии.

В настоящее время я пытаюсь сделать это с помощью запроса на объединение и экспериментировал с использованием запроса append, но haven был повезло с фрагментом кода, который я помещаю ниже результатов, которые я получаю, когда я нажимаю кнопку, чтобы выполнить назначая версию программного обеспечения, он предупреждает о правильном «тестовом сценарии», PROC_CHECK_ID и «версии программного обеспечения», но затем я получаю странное приглашение, которое говорит «Введите значение параметра», и оно является «именем тестового сценария» с текстовым полем, это в бесконечный цикл, где я могу просто вводить значения в текстовое поле.

Вот мой код

Dim rs1 As DAO.Recordset 
Dim unionquery As String 

Dim CURRENT_SOFTWARE_VERSION As String 

CURRENT_SOFTWARE_VERSION = Me.Parent.[Software Version].Value 


unionquery = "select [Test Script] , [PROC_CHECK_ID], [Software Version] from (FORMAL_CERT_PROCEDURE_TEST_SCRIPTS inner join FORMAL_CERT_PROCEDURE_CHECK on FORMAL_CERT_PROCEDURE_TEST_SCRIPTS.TEST_CASE_ID = FORMAL_CERT_PROCEDURE_CHECK.TEST_CASE_ID) inner join FORMAL_CERT_SOFTWARE_VERSION on FORMAL_CERT_PROCEDURE_TEST_SCRIPTS.TEST_CASE_ID = FORMAL_CERT_SOFTWARE_VERSION.TEST_CASE_ID where PROC_CHECK_ID=" & Me.PROC_CHECK_ID & " AND [Software Version]=""" & CURRENT_SOFTWARE_VERSION & """ " 


' Debug.Print unionquery 

Set rs1 = CurrentDb.OpenRecordset(unionquery, dbOpenForwardOnly) 

If Not (rs1.EOF And rs1.BOF) Then 

    Do Until rs1.EOF = True 
     ' MsgBox " " & rs1![Test Script] & ", " & rs1![PROC_CHECK_ID] & ", " & rs1![Software Version] & " " 

     INSERT_INTO_TEST_SCRIPTS = "insert into FORMAL_CERT_PROCEDURE_TEST_SCRIPTS([Test Script], [PROC_CHECK_ID_FK], [Software_Version], [TEST_CASE_ID]) values(" & rs1![Test Script] & ", " & rs1!PROC_CHECK_ID & ", " & rs1![Software Version].Value & ", " & Me.TEST_CASE_ID & ")" 

     ' APPEND QUERY THAT THROWS INTO AN INFINITE LOOP *NEEDS WORK* INSERT_INTO_TEST_SCRIPTS = "INSERT INTO FORMAL_CERT_PROCEDURE_TEST_SCRIPTS([Test Script], [PROC_CHECK_ID_FK], [Software_Version], [TEST_CASE_ID]) SELECT FORMAL_CERT_PROCEDURE_TEST_SCRIPTS.[Test Script], " & rs1!PROC_CHECK_ID & ", " & rs1![Software Version].Value & ", FORMAL_CERT_PROCEDURE_TEST_SCRIPTS.TEST_CASE_ID FROM FORMAL_CERT_PROCEDURE_TEST_SCRIPTS WHERE FORMAL_CERT_PROCEDURE_TEST_SCRIPTS.TEST_CASE_ID = " & Me.TEST_CASE_ID & " " 

     DoCmd.SetWarnings False 
      DoCmd.RunSQL INSERT_INTO_TEST_SCRIPTS 
     DoCmd.SetWarnings True 

     rs1.MoveNext 
    Loop 

End If 

Я признателен за любую помощь, и готов полностью переработать эту механику, я, вероятно, более усложняя это:/

спасибо!

+1

Похоже, вы цитируете версию программного обеспечения в первом запросе, но не во втором. Кроме того, обычно появляется диалоговое окно «Введите значение параметра», если у вас есть орфографическая ошибка, и вы не намеревались ее использовать. – Bobort

+0

Кроме того, ваш «unionquery» не имеет в нем «UNION», поэтому я бы не назвал его «unionquery». Я думаю, было бы проще использовать запрос с критериями, чтобы проверить, является ли версия программного обеспечения нулевой. Что-то вроде этого: '' UPDATE FORMAL_CERT_PROCEDURE_TEST_SCRIPTS SET [Software Version] = "" "& Me.Parent. [Версия программного обеспечения] .Value &" "" WHERE [Версия программного обеспечения] Null; "' ... Я думаю, что я просто неправильно понял ваше объяснение, чтобы это не помогло. – Bobort

ответ

1

Ваш первый запрос SELECT (unionquery) имеет котировки вокруг значения [Версия программного обеспечения], указывающего, что это текстовое поле. Однако ваш следующий запрос INSERT (INSERT_INTO_TEST_SCRIPTS) опускает кавычки. Поэтому запрос INSERT обрабатывает значение , которое вы пытаетесь вставить в качестве имя какого-либо другого поля, и поскольку никакое другое поле не существует с этим именем, вы получаете приглашение параметра.

Ваш код может быть немного более чистым (и более надежным), если вы сделали запись набора записей вместо «склеивания» инструкции INSERT. Этот подход будет выглядеть примерно так:

Dim rs2 As DAO.Recordset 
Set rs2 = CurrentDb.OpenRecordset(_ 
     "SELECT * FROM FORMAL_CERT_PROCEDURE_TEST_SCRIPTS", _ 
     dbOpenDynaset) 
rs2.AddNew 
rs2![Test Script] = rs1![Test Script] 
rs2![PROC_CHECK_ID_FK] = rs1!PROC_CHECK_ID 
rs2![Software_Version] = rs1![Software Version] 
rs2![TEST_CASE_ID] = Me.TEST_CASE_ID 
rs2.Update 
rs2.Close 
Set rs2 = Nothing 
+0

Это замечательно! спасибо Gord, coouple странные вещи происходят, хотя .... 1.) он назначает версию программного обеспечения, но он создает ее несколько раз? что-то странное происходит с циклом, на который я верю, потому что он случайный 2.) он не позволит мне назначить версию программного обеспечения за первой, я получаю странную синтаксическую ошибку? – skevthedev

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