MS-Access - как вызвать вставку данных перед событием LostFocus? - PullRequest
0 голосов
/ 28 июля 2010

У меня есть процедура, которая запускается для события AfterUpdate элемента управления:

Private Sub cmdDelCountry_AfterUpdate()

Dim strID As String
strID = Me.ID
Dim strCase As String
strCase = 1

Dim cmdCommand As New ADODB.Command

With cmdCommand
    .ActiveConnection = CurrentProject.Connection
    .CommandType = adCmdStoredProc
    .CommandText = "uspSalesOrderHead_UPDATE"

        '@RowID
        .Parameters("@RowID").Value = strID

        '@Case
        .Parameters("@Case").Value = strCase

    .Execute

End With

End Sub

Процедура выполняет хранимую процедуру SQL Server для обработки некоторых данных на сервере:

ALTER PROCEDURE uspSalesOrderHead_UPDATE

(
    @RowID int,
    @Case int
)

AS

IF @Case = 1 /* Delivery Country Select */

    BEGIN
        /* Update Order Head table */
        UPDATE dbo.tblSalesOrderHead
        SET dbo.tblSalesOrderHead.txtRegionCode     = dbo.tblSettingCountryCode.txtRegionCode,
            dbo.tblSalesOrderHead.txtCurrencyCode   = dbo.tblSettingCountryCode.txtCurrencyCode,
            dbo.tblSalesOrderHead.txtLanguageCode   = dbo.tblSettingCountryCode.txtLanguageCode
        FROM    dbo.tblSalesOrderHead
        INNER JOIN dbo.tblSettingCountryCode ON dbo.tblSalesOrderHead.txtDelCountry = dbo.tblSettingCountryCode.txtCountryCode
        AND     dbo.tblSalesOrderHead.ID            = @RowID;

        /* Update Order Line table */
        UPDATE  dbo.tblSalesOrderLine
        SET dbo.tblSalesOrderLine.txtRegionCode  = dbo.tblSalesOrderHead.txtRegionCode, 
            dbo.tblSalesOrderLine.txtCurrencyCode    = dbo.tblSalesOrderHead.txtCurrencyCode
        FROM    dbo.tblSalesOrderLine
        INNER JOIN dbo.tblSalesOrderHead ON dbo.tblSalesOrderLine.intOrderNo = dbo.tblSalesOrderHead.ID
        AND     dbo.tblSalesOrderLine.intOrderNo         = @RowID;
    END

Проблема в том, что значение элемента управления (cmdDelCountry) не вставляется в таблицу (dbo.tblSalesOrderHead) до того, как оно будет запрошено хранимой процедурой SQL: INNER JOIN dbo.tblSettingCountryCode ON dbo.tblSalesOrderHead.txtDelCountry = dbo.tblSettingCountryCode.txtCountryCode

Как вставить данные перед выполнением хранимой процедуры?

1 Ответ

3 голосов
/ 28 июля 2010

Вы можете использовать (в форме)

 If Me.Dirty Then Me.Dirty = False

Для принудительного сохранения, но может быть лучше рассмотреть событие после обновления формы, а не элемент управления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...