Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
 SQl запрос  [new]
Анатолий Руденко
Member

Откуда:
Сообщений: 26
Хелп.
Следующая ситуация.
есть скл запрос (я его поместил в код), который обновляет значения поля одной таблицы значением поля другой таблицы. Когда отсутствует одной из полей в любой из двух таблиц, высвечивается сообщение: введите значения. Нажимаю Ентер и продолжается выполнение следующей записи в коде.
Мой вопрос в следующем, как програмно в случае если высвечивается данное окно перейти (без нажатия кнопок на клаве) к следующей строке в коде.

Заранее спасибо.
21 мар 06, 17:51    [2473074]     Ответить | Цитировать Сообщить модератору
 Re: SQl запрос  [new]
adv
Member

Откуда:
Сообщений: 3333
Код не покажете?

Предположительно поможет nz()
21 мар 06, 17:53    [2473086]     Ответить | Цитировать Сообщить модератору
 Re: SQl запрос  [new]
Анатолий Руденко
Member

Откуда:
Сообщений: 26
А что это значит? Как его внести в код?
21 мар 06, 17:54    [2473098]     Ответить | Цитировать Сообщить модератору
 Re: SQl запрос  [new]
adv
Member

Откуда:
Сообщений: 3333
Руками, руками.

Как можно знать как внести, не зная кода. Может у вас что-то другое.
21 мар 06, 17:57    [2473118]     Ответить | Цитировать Сообщить модератору
 Re: SQl запрос  [new]
Rivkin Dmitry
Member

Откуда: Israel
Сообщений: 5500
1.Создать функцию, которая проверит наличие полей в каждой из таблиц

2. Обработчик ошибок

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

Короче, покажи код
21 мар 06, 17:59    [2473128]     Ответить | Цитировать Сообщить модератору
 Re: SQl запрос  [new]
Анатолий Руденко
Member

Откуда:
Сообщений: 26
Dim i As Integer
Dim strField As String

DoCmd.SetWarnings False
On Error Resume Next

For i = 536 To 1000
strField = i
DoCmd.RunSQL "UPDATE Таблица1 INNER JOIN Таблица2 " & _
"ON Таблица1.Товар = Таблица2.Товар " & _
"SET Таблица2.[" & strField & "] = [Таблица1]![" & strField & "];"

Next i

имена полей - это цифры (в текстовом формате). Бывают случаи когда полей нет в одной из таблиц. Вот я и хочу пропустить данный момент.
21 мар 06, 18:02    [2473155]     Ответить | Цитировать Сообщить модератору
 Re: SQl запрос  [new]
Rivkin Dmitry
Member

Откуда: Israel
Сообщений: 5500
Дарю функцию:

Public Function ExistsField(tdqd As Object, fldNm As String) As Boolean
On Error GoTo err_ExistsField
    Dim fd As DAO.Field

    Set fd = tdqd.Fields(fldNm)
    ExistsField = True

err_ExistsField:
End Function
которая проверяет наличие поля в таблице или запросе.

А твою функцию я бы переделал так:
On Error GoTo Err_hendler
    Dim db As DAO.Database: Set db = CurrentDb
    Dim td1 As DAO.TableDef: Set td1 = db.TableDefs("Table1")
    Dim td2 As DAO.TableDef: Set td2 = db.TableDefs("Table2")
    Dim se As String, i As Integer
    
    For i = 536 To 1000
        If ExistsField(td1, (i)) And ExistsField(td2, (i)) Then
            se = se & "Table2.[" & (i) & "] = [Table1]![" & (i) & "], "
        End If
    Next i
    
    If se <> "" Then
        se = Mid(se, 1, Len(se) - 2)
        
        db.Execute "UPDATE Table1 INNER JOIN Table2 " & _
        "ON Table1.Commodity = Table2.Commodity " & _
        "SET " & se
    End If
    
exit_hendler:
    Exit Sub

Err_hendler:
    MsgBox Err.Description
    Resume exit_hendler

и все будет в одном единственном запросе на исполнении, а не в 474 по максиму
21 мар 06, 18:16    [2473237]     Ответить | Цитировать Сообщить модератору
 Re: SQl запрос  [new]
Анатолий Руденко
Member

Откуда:
Сообщений: 26
Просто супер, спасибо.
21 мар 06, 19:36    [2473513]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Access Ответить