Если ошибка access sql

I have a SQL Server table with a trigger after insert, update, and delete. If a certain condition is found, the trigger rolls back the transaction and raises a custom error using raise error. I’ve verified it works properly. The basic idea is that during
such times as I need to «freeze» all record updating, I will execute a stored procedure that simply places a value in a SQL table that indicates the «freeze» is turned «on». The trigger will look at that, and if turned on, and
if SQL current_user is not me or admin, then roll back, raiseerror, etc.

In MS Access, I was hoping to utilize this and only this in order to communicate back to the users. Meaning, for example, I realize I could totally re-structure this method and have MS Access «look up» that value (if freeze is ‘on’) every time
a record is updated… but

1) that would mean identifying a LOT of places where the Access app gives the user a method to update a record, and write dlookup() code all over, and

2) that would mean the slowness of a dlookup, and I don’t need to add any slowness to this app.

I wanted to be a «good boy» and handle this on the server side. Admirable, right?? I know.

My problem is trapping the custom SQL error in Access.

I read an old post by Dirk on msdn about getting it… .. and tried Dirk’s method of using the DAO.Errors collection. Unfortunately what I
think I have found out is that that entire method only works if you have actually triggered the error using DAO (vba). (which makes sense). NOT, if an error has occurred that was form-based and not necessarily having used DAO in code.

Does anyone know of a way to trap the SQL server error in MS Access? And not just get «odbc — update on a linked table failed» (or Call Failed, etc etc).

My last option will be to create custom error handling in the Access app that looks up the record in the SQL table to see if the freeze is on, but only does this in an error handling routine that sees if we are getting a cruddy vague «odbc-update…»
type of error description in the first place. <br />But this will still involve the hope that I identify all places in the app that does the update.

I don’t see your image as it is blocked at work.

The only one way to debug the application when errors occurs is to break the execution using the keyboard combination :

CTRL + Pause/Break

Do it when the error message appears

This obviously doesnt work if the application is compiled in a mde/accde


When the CTRL-Break doesnt work, you have to add a break point in your code.

Bring the VBA window using

ALT + F11

Open the code of your form, go in the procedure that triggers the queries, select a line of code at the beginning and add a breakpoint using F9

Then run the form, it will stop the execution on the breakpoint and show you the VBA window, continue to execute the code step-by-step using F8 until the error occurs

I am working on a Attendance table in Access, where I have InTime and OutTime. These fields are of Date/Time Field.
Some records contains only Time like 11:40:00, some contain Date as well as time like 21-07-2015 11:45:00. Hence have used the below code for getting hours worked.

HrsPresent: Round(DateDiff("n",TimeValue(TimeSerial(Hour([TimeIn]),Minute([TimeIn]),Second([TimeIn]))),TimeValue(TimeSerial(Hour([TimeOut]),Minute([TimeOut]),Second([TimeOut]))))/60,2)

Using this above code, in a Column in making query gives correct Number of hours worked, but if any of the field is blank, i get #error in result.

I have tried using Nz , IsError, IsNumeric but all in Vain.

  • What is it that, I am doing wrong?
  • Is other way of getting hours worked?

I do use ADO. I just saw that DAO code on a website and thought I would try it. The problem is some procedures do pass the info to Access through Access’s error channel and other procedures pass the message, but not through the error channel. Here is an example and the results that work:

ALTER   PROCEDURE dbo.usp_DisplayResults

AS

DECLARE @strMsg varchar(100)

SET @strMsg =  ‘All results have been sent for this study!’

IF (SELECT COUNT(*)

  FROM dbo.tempResults) < 1

 BEGIN

  RAISERROR (@strMsg, 18, 1)

  SELECT @strMsg AS Message

  RETURN

 END

ELSE

  SELECT * FROM dbo.tempResults

And here is an example that sends the message but not through the error handler which is the same in both calling subs:

IF (SELECT COUNT(*)

  FROM dbo.tblRunSheets

    WHERE Sequence_Created = 0

  AND Method_ID = @MethodID

    AND Study_Tracker = @StudyTracker

  AND RunSheet_ID = @RunSheetID) < 1

 BEGIN

  RAISERROR (@strMsg, 18, 1)

  RETURN

 END

ELSE

 IF (SELECT DISTINCT Cleanup_Analyst

   FROM dbo.tblRunSheets

   WHERE Method_ID = @MethodID

   AND Study_Tracker = @StudyTracker

   AND RunSheet_ID = @RunSheetID) IS NULL

 BEGIN

  SET @strMsg =  ‘Cleanup has not been performed on this RunSheet. Please perform Cleanup before Sequencing’

  RAISERROR (@strMsg, 18, 1)

  RETURN

 END

ELSE

BEGIN

As you can see it passed the message, but not through this error handler:

If Err.Number = 8008 Then

        Resume Next

Else

        MsgBox («Error # » & Err.Number & «:  » & Err.Description)

        Resume exit_cmdEmail_click

End If

converted to PDF by HupBaH9I

отработал

Resume Next Продолжает выполнение со строки, следующей за строкой, которая вызвала ошибку, после того как

обработчик ошибок отработал

Resume Строка Продолжает выполнение с указанной

строки и метки после обработки ошибки

Существуют три действия, которые можно применить к большинству обработчиков ошибок:

Установка перехватчика ошибок. Каждая процедура или функция, которая поддерживает перехват ошибок, должна включать выражение On Error, которое указывает Access, где искать инструкции по обработке ошибок. Хотя команда On Error должна указывать на метку или строку внутри той же самой процедуры, выражение после метки может вызывать другую процедуру.

Оформление обработчика ошибок. Обработчик ошибок обычно состоит из выражения Select Case (или похожего выражения для принятия решений), которое различает разные значения свойства Err и способ их обработки.

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

Для отключения обработчика ошибок вставьте следующее выражение в код вашей процедуры:

On Error Goto 0

Когда Access наталкивается на ошибку времени выполнения, он ищет неактивный обработчик ошибок в следующей последовательности:

1.Текущая процедура.

2.Процедуры, перечисленные в списке Вызовы (начиная с самой последней вызываемой процедуры).

3.Обработчик ошибок внутри Access, который останавливает выполнение программы и выводит диалоговое окно ошибки времени выполнения.

Ошибки, связанные с работой процессора баз данных, вызывают событие Error. Это относится к ошибкам процессора баз данных Microsoft Jet, но не к ошибкам времени выполнения Access. Выполняя процедуру события или макроса при возникновения события Error, вы можете предотвратить вывод сообщения об ошибке Microsoft Access и вывести пользовательское сообщение об ошибке, которое может оказаться более подходящим по контексту для вашего приложения.

Свойство OnError используется для того, чтобы указать макрос или процедуру Access, которая будет выполняться при возникновении события Error. Устанавливайте это свойство тем же путем, которым вы устанавливаете остальные свойства.

Например, синтаксис для процедуры события Error формы должен иметь следующую конструкцию:

Sub Form_Error(DataErr As Integer, Response As Integer)

Аргумент DataErr является кодом ошибки, возвращаемым функцией Err при возникновении ошибки. Вы можете использовать аргумент DataErr вместе с функцией Error$, чтобы соотнести номер ошибки с соответствующим сообщением об ошибке. Аргумент Response определяет, будет ли выводиться сообщение об ошибке. Для задания значения этого аргумента можно использовать одну из следующих констант:

DATA_ERRCONTINUE — это значение приводит к игнорированию ошибки, и код продолжается без вывода сообщения об ошибке. Вы можете добавить свое собственное сообщение об ошибке.

converted to PDF by HupBaH9I

DATA_ERRDISPLAY — это значение по умолчанию. Будет выведено стандартное сообщение об ошибке Microsoft Access.

Отладка программы в Visual Basic

Основным визуальным средством отладки в Visual Basic является окно Debug. Это окно позволяет выполнять достаточно много функций, и его основные элементы представлены на рис. 12.7.

Рис. 12.7. Окно отладки Debug в Visual Basic

Это окно имеет две панели. В верхней части расположена панель Watch, которая позволяет выводить значения интересующих нас переменных, значений свойств или выражений во время выполнения программы. Переменная или выражение могут быть занесены на эту панель с помощью команды Add Watch меню Tools. После выполнения этой команды на экране появляется одноименное диалоговое окно, представленное на рис. 12.8.

converted to PDF by HupBaH9I

Рис. 12.8.

Заранее выделенное выражение автоматически помещается в поле Expression этого окна. В блоке Context определяется дипазон, в котором будет отслеживаться изменение наблюдаемой величины. Не увлекайтесь, попытка отследить значения во всем диапазоне работы программы (пункты All Procedures и All Modules) может резко замедлить выполнение программы. В блоке Watch Type вы можете задать способ реакции Visual Basic на изменение значения наблюдаемого выражения.

В нижней части окна отладки расположена панель Immediate, которая позволяет отображать информацию, связанную с отлаживаемыми операторами, а также непосредственно вводить необходимые команды, как это можно делать в окне Command Visual FoxPro.

Сама процедура выполнения отладки программы Visual Basic аналогична описанной ранее для программы Access.

12.3. Подготовка приложения для распространения

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

В этом параграфе мы рассмотрим средства подготовки пользовательского приложения для распространения.

Современное приложение для обработки данных может представлять собой достаточно большое число различных модулей, включающих данные и программы для их обработки. В этом плане чрезвычайно большое количество файлов имеет приложение, разработанное на Visual FoxPro. С него и начнем.

В процессе создания пользовательского приложения по мере насыщения Project Manager различными модулями, Visual FoxPro автоматически создавал таблицу с расширением PJX, куда помещал необходимую информацию о составных элементах будущей прикладной программы. Используя эту таблицу, Project Manager может создать пользовательскую программу Visual FoxPro, которая будет включать в себя все элементы вашего проекта двух типов: в виде файла с расширением APP и в виде файла с расширением EXE (рис. 12.9). Для этого в Project Manager вам

converted to PDF by HupBaH9I

следует просто нажать кнопку Build. Но чутьчуть терпения, перед тем как вы нажмете эту кнопку, нам следует рассказать еще о некоторых моментах, на которые следует обратить внимание перед построением пользовательской программы.

Рис. 12.9.

В Project Manager все внесенные в него файлы делятся на две группы: включенные в пользовательскую программу или не включаемые в нее. Например, по умолчанию не включаются в программу файлы БД и все связанные с ней файлы. Посмотрите на список файлов в Project Manager. Перед именем таких файлов вы обнаружите перечеркнутый кружок. Включаемый в пользовательскую программу файл компилируется в объектный код и недоступен для изменения. Файлы, не включаемые в пользовательскую программу, должны распространяться отдельно. Для того чтобы включить или исключить какойто файл из пользовательской программы, в меню Project выберите команду Project Info. Появляющееся после этого диалоговое окно Project Information приведено на рис. 12.10. Для изменения статуса файла откройте вкладку Files. Таким образом, перед построением пользовательской программы вы должны проверить наличие всех файлов, которые должны войти в файл приложения. Например, файлы изображений автоматически не включаются в проект, и вы должны вручную добавить их, так как распространение их в виде отдельных файлов запрещено лицензионным соглашением.

converted to PDF by HupBaH9I

Рис. 12.10.

На вкладке Project того же окна, которая показана на рис. 12.11, мы можем указать авторские реквизиты, задать параметры компиляции и выбрать значок, который будет включен в EXE-файл и может использоваться для создания ссылки при его запуске. Для подготовки пользовательской программы в параметрах компиляции следует отменить опцию Debug Info, так как при включенной опции в объектный код помещается специальный отладочный модуль, позволяющий при ошибке с помощью окна Trace указать место ее возникновения при наличии исходного файла и самой СУБД. Так как в пользовательской программе исходных текстов программ нет, то этот модуль бесполезен и только занимает лишнее место.

Рис. 12.11.

converted to PDF by HupBaH9I

Вы можете также включить опцию Encrypted, которая исключает возможность просмотра символьных фрагментов в объектном коде. Правда, практика использования предыдущих версий FoxPro показывает, что это не слишком надежная защита от умелых хакеров. С другой стороны,

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

Для того чтобы при компиляции установить точку запуска приложения, в Project Manager необходимо указать главную программу, как это видно на рис. 12.9. Для этого достаточно поставить курсор на этот файл и вызвать команду Set Main в меню Project. Как правило, в качестве главной программы используется или специальная программа, или файл главного меню приложения.

Для построения приложения в Visual FoxPro можно использовать и специальную программу BUILDAPP.PRG, которая при установке профессиональной версии Visual FoxPro записывается в папку TOOLSBUILDAPP папки Visual FoxPro. Эта программа создает файл пользовательского приложения и удаляет из него исходный код событий и методов, который хранится в файлах форм SCX и визуальных библиотек VCX. Удаление исходного кода позволяет получить файл пользовательского приложения меньших размеров и более защищенный от вскрытия.

Для запуска программы используйте следующий синтаксис:

DO BUILDAPP [WITH ProjectName [, AppFileName [, DebugMode [, BuildEXE]]]]

Здесь параметр ProjectName задает имя проекта. Параметр AppFileName имя файла пользовательского приложения, причем указываемое расширение (APP или EXE) будет устанавливать тип создаваемого файла. Параметр DebugMode имеет логический тип и позволяет включить или отключить отладочный режим (для SET DEBUG ON параметр DebugMode должен быть равен .T., а для SET DEBUG OFF — .F.). Если параметр BuildEXE равен .T., то будет создаваться выполняемый EXE-файл.

Программа BUILDAPP выполняет следующие действия:

1.Определяет местоположение файлов.

2.Открывает проект.

3.Создает файл пользовательского приложения на основе первоначального файла проекта для проверки того, что весь исходный код откомпилирован и объектный код записан в соответствующие поля файлов SCX и VCX. Для завершения работы программы проект не должен генерировать ошибок во время построения пользовательского приложения.

4.Физически удаляет помеченные для удаления записи в файлах VCX.

5.Переносит исходный код из файлов SCX и VCX в массив.

6.Перестраивает файл пользовательского приложения.

7.Восстанавливает исходный код в файлах SCX и VCX, возвращая тем самым проект в первоначальное состояние.

Теперь скажем несколько слов о двух типах пользовательской программы, которые можно создать в Visual FoxPro.

APP-файл предназначен для работы в среде СУБД. Таким образом, компьютер, на котором будет работать ваша программа, должен быть оснащен копией Visual FoxPro.

EXE-файл на несколько десятков килобайт больше APP-файла, но для своей работы не требует наличия на компьютере Visual FoxPro. Этот файл работает совместно с библиотекой поддержки VFP300.ESL. EXE-файл работает несколько быстрее, чем APP, вероятно, за счет того, что требует меньшего количества ресурсов.

При выборе типа файла для пользовательского приложения необходимо иметь в виду, что библиотека поддержки не включает некоторые функции СУБД. Следовательно, в приложении, распространяемом в виде EXE-файла, не должны присутствовать эти исключенные функции.

Из меню Visual FoxPro не доступны следующие возможности:

Database

Form

Menu

Program

Project

Query

Table

converted to PDF by HupBaH9I

Ниже приведен список команд, при выполнении которых в пользовательском приложении произойдет ошибка «Feature not available» (функция не доступна).

Команды, не доступные при использовании библиотеки поддержки:

BUILD APP MODIFY FORM

BUILD EXE MOFIFY MENU

BUILD PROJECT MODIFY PROJECT

COMPILE MODIFY QUERY

CREATE FORM MODIFY STORED PROCEDURE

CREATE MENU MODIFY STRUCTURE

CREATE QUERY MODIFY VIEW

CREATE VIEW SUSPEND

FILER SET

MODIFY CONNECTION SET STEP

MODIFY DATABASE

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

ADDLABEL.APP

AUTONAME.PRG

BROWSER.APP

BUILDAPP.PRG

BUILDAPP.SCT

BUILDAPP.SCX

BUILDER.APP

CONPROCS.PRG

CONVERT.APP

CONVERT.H

CONVERT.PJT

CONVERT.PJX

CONVERT.PRG

CVTALERT.H

CVTSCX.H

FD3.FLL

FDKEYWRD.CDX

FOREIGN.H

FOREIGN.PRG

FORMPARM.PRG

FOXHELP.DBF

FOXHELP.FPT

FOXHELP.HLP

FPCNEW.PRG

GENDBC.PRG

GENERIC.PRG

GENMENU.PRG

HC35.ERR

HC35.EXE

IMAGEDIT.EXE

IMAGEDIT.HLP

JD.FKY

JD.PRG.

LOCWORD.H

LOCWORD.PRG

MIGDB4.H

MIGDB4.PRG

MIGNAVPR.TXT

MMSETUP.PRG

MRBC.EXE

MSGRAPH.HLP

MSINFO.EXE

PRO_EXT.H

PUTNAME.PRG

RESERVED.FLL

SHED.EXE

converted to PDF by HupBaH9I

SHED.HLP

SPELLCHK.APP

TRANSPRT.PRG

VFP.EXE

WINAPIMS.LIB

WIZARD.APP

WIZARD.FLL

WZFORM.APP

WZFOXDOC.APP

WZGRAPH.APP

WZIMPORT.APP

WZMAIL.APP

WZPIVOT.APP

WZQUERY.APP

WZREPORT.APP

WZSETUP.APP

WZTABLE.APP

WZUPSIZE.APP

В Visual Basic процедура подготовки пользовательского приложения очень похожа на только что описанную для Visual FoxPro. В Visual Basic мы можем получить только EXE-файл. Для этого достаточно выбрать команду Make EXE File в меню File. Подготовка дистрибутивного комплекта дискет в Visual Basic выполняется с помощью отдельного приложения — Application Setup Wizard, представленного на рис. 12.12. Это приложение работает аналогично Setup Wizard в Visual FoxPro и путем выполнения семи шагов позволяет программисту быстро определить набор файлов, необходимый для работы приложения на компьютере пользователя.

Рис. 12.12.

Приложение 1

Дополнительные возможности новой версии Visual FoxPro 5.0

Визуальные средства проектирования Поставка программного пакета Требования к установке

Project Manager

Соседние файлы в предмете Программирование на Delphi

  • #
  • #
  • #
  • #

    28.06.201440.36 Mб90Джулипн Б. “Фундаментальные алгоритмы и структуры данных.pdf

  • #
  • #
  • #

    28.06.20145.41 Mб144Тексейра С. “Delphi 5. Руководство разработчика” (1 том).pdf

  • Если отвергается истинная гипотеза то говорится что совершается ошибка
  • Если оставить все на самотек мы никогда не добьемся цели ошибка
  • Если одна ошибка то какая оценка будет
  • Если объем двумерной выборки меньше 100 то формула ошибки m коэффициента корреляции имеет вид
  • Если обидел человека как исправить ошибку