Код запроса MS Access исчезает из объекта запроса - PullRequest
0 голосов
/ 04 марта 2020

При использовании запросов MS Access я сталкиваюсь с тем, что текст команды объекта запроса удаляется через произвольные интервалы.

Запрос может выполняться без перебоев в течение нескольких недель или месяцев. Пользователи получают к нему доступ только с помощью простой кнопки с базовыми функциями c DoCmd.TransferSreadsheet.

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

Во всех случаях общим является то, что

  • sql довольно длинный
  • запрос был написан в sql (= не создан с использованием GUI) или был создан в GUI и позднее изменен в sql

Короче

  • запросы имеют правильный синтаксис
  • никто не связывается с запросами в редакторе запросов
  • это произошло в нескольких разных базах данных, так что это не похоже на спецификацию базы данных c проблема
  • нет vba-кода, который бы вмешивался в определения запросов

Вот пример запроса (созданного через пользовательский интерфейс моими коллегами, возможно, с небольшими изменениями в коде sql ).

SELECT Population.StatusMA, Population.PNr, Population.BKey, Population.Nachname, Population.Vorname, d_Zuordnung.Konzernbereich, d_Zuordnung.Geschaeftsbereich, d_Zuordnung.Bereich, d_Zuordnung.Abteilung, d_Zuordnung.Team, Population.BG, Population.FS, d_Geld.Gehaltsart, d_Geld.Anz_Gehalt, d_Geld.Jahresgehalt, d_Geld.Monatslohn, d_Geld.Stundenlohn, d_Geld.Garantiertes_EK, d_Geld.Vereinbartes_EK, [Jahresgehalt]/[Wert] AS [Compa-Ratio], Population.Geburtsdatum, Population.Alter, Population.Altersklasse, Population.Nation, Population.Spr, Population.Geschlecht, Population.Eintritt, Population.DJ, Population.Austritt, Population.Austrittsgrund, Population.PerGru, Population.Vertragsarttext, Population.Jobtext, t_Position.POS_Langtext, d_Zuordnung.GA, d_Zuordnung.Generalagentur, d_Zuordnung.Haus, d_Zuordnung.Buero, d_Zuordnung.Arbeitsort, d_Zuordnung.VG_PNr, d_Zuordnung.Vorgesetzter, d_Zuordnung.BusinessPartner, Sum(IIf([LoA]="V0B" Or [LoA]="SBK",[TOT])) AS [SP/LE lfdJahr], Sum(IIf([LoA]="SJV",[TOT])) AS [LV lfdJahr], Sum(IIf([LoA]="SJP",[TOT])) AS [PP lfdJahr]
FROM (((((((Population LEFT JOIN d_Zuordnung ON Population.PNr = d_Zuordnung.Z_PNr) LEFT JOIN d_Adresse ON Population.PNr = d_Adresse.A_PNr) LEFT JOIN d_Geld ON Population.PNr = d_Geld.G_PNr) LEFT JOIN d_OrgPosJob ON Population.PNr = d_OrgPosJob.F_PNr) LEFT JOIN t_Position ON d_OrgPosJob.F_POS = t_Position.POS_Nummer) LEFT JOIN 0_bur_infopool ON d_Zuordnung.NL = [0_bur_infopool].BURNR) LEFT JOIN MedianFS ON (Population.SobaCH = MedianFS.SoBaCH) AND (Population.FS = MedianFS.FS)) LEFT JOIN PSIANE2_aktuell ON Population.PNr = PSIANE2_aktuell.Stammnr
WHERE (((IIf([Statusma]="Zukünftig",[z_Vertragsart],[vertragsart])) Like "a*" Or (IIf([Statusma]="Zukünftig",[z_Vertragsart],[vertragsart])) Like "d*" Or (IIf([Statusma]="Zukünftig",[z_Vertragsart],[vertragsart])) Like "m*" Or (IIf([Statusma]="Zukünftig",[z_Vertragsart],[vertragsart])) In ("H1","H2")) AND ((IIf([Z_Status]=2,"Zukünftig",IIf([StatusMA]="Aktiv","Aktiv","Inaktiv"))) Like [StatusMA]) AND ((IIf([A_Status]=2,"Zukünftig",IIf([StatusMA]="Aktiv","Aktiv","Inaktiv"))) Like [StatusMA]) AND ((IIf([F_Status]=2,"Zukünftig",IIf([StatusMA]="Aktiv","Aktiv","Inaktiv"))) Like [StatusMA]) AND ((IIf([G_Status]=2,"Zukünftig",IIf([StatusMA]="Aktiv","Aktiv","Inaktiv"))) Like [StatusMA]))
GROUP BY Population.StatusMA, Population.PNr, Population.BKey, Population.Nachname, Population.Vorname, d_Zuordnung.Konzernbereich, d_Zuordnung.Geschaeftsbereich, d_Zuordnung.Bereich, d_Zuordnung.Abteilung, d_Zuordnung.Team, Population.BG, Population.FS, d_Geld.Gehaltsart, d_Geld.Anz_Gehalt, d_Geld.Jahresgehalt, d_Geld.Monatslohn, d_Geld.Stundenlohn, d_Geld.Garantiertes_EK, d_Geld.Vereinbartes_EK, [Jahresgehalt]/[Wert], Population.Geburtsdatum, Population.Alter, Population.Altersklasse, Population.Nation, Population.Spr, Population.Geschlecht, Population.Eintritt, Population.DJ, Population.Austritt, Population.Austrittsgrund, Population.PerGru, Population.Vertragsarttext, Population.Jobtext, t_Position.POS_Langtext, d_Zuordnung.GA, d_Zuordnung.Generalagentur, d_Zuordnung.Haus, d_Zuordnung.Buero, d_Zuordnung.Arbeitsort, d_Zuordnung.VG_PNr, d_Zuordnung.Vorgesetzter, d_Zuordnung.BusinessPartner
ORDER BY Population.PNr;

1 Ответ

1 голос
/ 04 марта 2020

У вас есть нули в вашем наборе данных? Нули могут нанести havo c на вашу работу, задачи, работу и т. Д. c. Любое арифметическое вычисление c в VBA со значением NULL приводит к значению NULL. Если одно из значений равно NULL, результат равен Null (пусто). Согласно правилам VBA для вычисления значений, результат равен нулю, поскольку нулевое значение является неизвестным.

Значения Null не равны нулю (0). Однако во многих ситуациях это именно то, что мы хотим. Мы хотим рассматривать Null как нули.

К счастью, Microsoft Access предлагает способ обойти эту проблему в коде модуля VBA или запросах. Функция NullToZero (NZ) принимает нулевое значение и преобразует его в ноль. Эту функцию следует использовать в любом месте, где значение может быть нулевым (например, поле, которое не является обязательным).

Вам необходимо обрабатывать пустые значения следующим образом:

Nz (вариант [, valueifnull] )

https://support.office.com/en-us/article/nz-function-8ef85549-cc9c-438b-860a-7fd9f4c69b6c

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

UPDATE tblSomeTable
SET Field1 = IIf(Field1 Is Null, 0, Field1),    
    Field2 = IIf(Field1 Is Null, 0, Field2),
    Field3 = IIf(Field1 Is Null, 0, Field3),
    Field4 = IIf(Field1 Is Null, 0, Field4),
    Field5 = IIf(Field1 Is Null, 0, Field5),
    Field6 = IIf(Field1 Is Null, 0, Field6),
    Field7 = IIf(Field1 Is Null, 0, Field7),
    Field8 = IIf(Field1 Is Null, 0, Field8),
    Field9 = IIf(Field1 Is Null, 0, Field9),
    Field10 = IIf(Field1 Is Null, 0, Field10)
WHERE (Field1 + Field2 + Field3 + Field4 + Field5 +
        Field6 + Field7 + Field8 + Field9 + Field10) Is Null
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...