Улучшите модуль доступа и устраните запрос - PullRequest
1 голос
/ 20 марта 2019

Я создаю процедуру для определения подробных строк из tbl_a, которые создают ненормальный баланс на уровне tbl_a.LevelA и вставляют идентифицированные строки в tbl_d.

Раз в месяц я импортирую остатки на счете закрытия в tbl_a.LevelA, tbl_a.LevelB, tbl_a.AMOUNT.

Оттуда у меня настроен код, чтобы определить, является ли текущий баланс дебетом или кредитом, обновить нормальный баланс из справочной таблицы (tbl_b) и определить, является ли баланс строки детализации ненормальным.

Мне также пришлось создать отдельный запрос на выборку, чтобы определить, является ли баланс ненормальным на уровне LevelA.Я использую эту информацию, чтобы идентифицировать все позиции, которые являются ненормальными в LevelA и LevelB.

Мой импорт, код, запрос и желаемый вывод приведены ниже:

Импорт

Import

Код

Private Sub Edit()

Dim MsgTitleImport As String

MsgTitleImport = "xxx"

Set MyDb = CurrentDb()

DoCmd.Hourglass False
DoCmd.SetWarnings False

'qry_a
MySQL = "UPDATE tbl_a " & _
        "INNER JOIN tbl_b ON tbl_a.LEVELA = tbl_b.LEVELA " & _
        "SET tbl_a.NORMAL = tbl_b.NORMAL " & _
        "WHERE tbl_a.LEVELA Is Not Null;"
MyDb.Execute MySQL

'qry_b
MySQL = "UPDATE tbl_a " & _
        "SET tbl_a.CURRENT = iif([tbl_a.AMOUNT]>=0,'POSITIVE','NEGATIVE') " & _
        "WHERE tbl_a.LEVELA Is Not Null;"
MyDb.Execute MySQL

'qry_c
MySQL = "UPDATE tbl_a " & _
        "SET tbl_a.ABNORMAL_B = iif([tbl_a.CURRENT]=[tbl_a.NORMAL],'N','Y') " & _
        "WHERE tbl_a.LEVELA Is Not Null;"
MyDb.Execute MySQL

'qry_d
MySQL = "INSERT INTO tbl_c (LEVELA, AMOUNT) " & _
        "SELECT qry_d.LEVELA, qry_d.AMOUNT " & _
        "FROM qry_d;"
MyDb.Execute MySQL

'qry_e
MySQL = "UPDATE tbl_c " & _
        "INNER JOIN tbl_b ON tbl_c.LEVELA = tbl_b.LEVELA " & _
        "SET tbl_c.NORMAL = tbl_b.NORMAL " & _
        "WHERE tbl_c.LEVELA Is Not Null;"
MyDb.Execute MySQL

'qry_f
MySQL = "UPDATE tbl_c " & _
        "SET tbl_c.CURRENT = iif([tbl_c.AMOUNT]>=0,'POSITIVE','NEGATIVE') " & _
        "WHERE tbl_c.LEVELA Is Not Null;"
MyDb.Execute MySQL

'qry_g
MySQL = "UPDATE tbl_c " & _
        "SET tbl_c.ABNORMAL_A = iif([tbl_c.CURRENT]=[tbl_c.NORMAL],'N','Y') " & _
        "WHERE tbl_c.LEVELA Is Not Null;"
MyDb.Execute MySQL

'qry_h
MySQL = "UPDATE tbl_a " & _
        "INNER JOIN tbl_c ON tbl_a.LEVELA = tbl_c.LEVELA " & _
        "SET tbl_a.ABNORMAL_A = tbl_c.ABNORMAL_A " & _
        "WHERE tbl_a.LEVELA Is Not Null;"
MyDb.Execute MySQL

'qry_i
MySQL = "INSERT INTO tbl_d (LEVELA, LEVELB, AMOUNT, CURRENT, NORMAL, ABNORMAL_A, ABNORMAL_B) " & _
        "SELECT tbl_a.LEVELA, tbl_a.LEVELB, tbl_a.AMOUNT, tbl_a.CURRENT, tbl_a.NORMAL, tbl_a.ABNORMAL_A, tbl_a.ABNORMAL_B " & _
        "FROM tbl_a " & _
        "WHERE tbl_a.ABNORMAL_A = 'Y' AND tbl_a.ABNORMAL_B = 'Y';"
MyDb.Execute MySQL

DoCmd.Hourglass False

MsgBox "xxx", vbOKOnly, MsgTitleImport

DoCmd.SetWarnings True

End Sub

Запрос

SELECT tbl_b.LEVELA, Sum(tbl_a.AMOUNT) AS AMOUNT
FROM tbl_a INNER JOIN tbl_b ON tbl_a.LEVELA = tbl_b.LEVELA
WHERE (((tbl_b.LEVELA) Is Not Null))
GROUP BY tbl_b.LEVELA;

Вывод

Output

У меня возникла пара вопросов:

  1. Есть ли способ добавить отдельный запрос(qry_d) к коду модуля?

  2. Есть ли лучший формат для этого кода?Это первая база данных, которую я создал, поэтому я не уверен, как это должно выглядеть, если все сделано "правильно".

Заранее благодарен за помощь.

...