Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
 Почему никто не хочет осваивать adp?  [new]
ДиД.
Guest
Почему никто не хочет осваивать adp? Что всех пугает? Меня сначала тоже некторые вещи насторожили. Потом, правда, разобрался. Затратил уйму времени на решение того или иного вопроса. И все из-того, что просто стоит какая-то стена отчуждения по adp. Правда была статья Павела Жидкова (Кузбас) по поводу ошибок на добавление записей на форуме по SQL. В ней он давал программу якобы устраняющую эту ошибку. На самом деле было в другом. Я это тоже выяснял 2 недели. Если бы были собеседники, я , думаю, и проблемы решались быстрее. Почему все новое воспринимается в штыки? Я провожу аналог между WinNT и Win2000pro. Сначала все плевалсь. Потом разобрались и теперь все тащутся. Такая же картина и на Accesse наблюдается. Хотелось бы все-таки найти собеседников (со вздохом).
25 июл 01, 07:50    [84]     Ответить | Цитировать Сообщить модератору
 RE:Почему никто не хочет осваивать adp?  [new]
Павел
Guest
Откуда такой писсимизм? Я познакомился в рунете с многими людьми, разрабатывающими на Access.adp Кроме того появились отличные книги по A2K и MSSQL. Так что Вы совсем не одиноки в своих изысканиях. Если что-то интересует - спрашивайте, чем смогу тем помогу. Есть еще очень интересный форум по всем версиям Access: http://c85.cemi.rssi.ru/Access/Queries/AnsPointListAll.asp

P.S.
Кузбасс пишется с двумя 'c'
25 июл 01, 08:16    [85]     Ответить | Цитировать Сообщить модератору
 RE:Почему никто не хочет осваивать adp?  [new]
ДиД.
Guest
Кузбасс скопировал Ctrl+C как было написано в статье. Поближе к телу. Почти все нашел в adp, кроме замены ошибок, выдаваемых SQL сервером, на более удобочитаемые. На форуме спрашивал уже. Сказали что нужно проверить семейство ADO error. А как - так и не понял.
25 июл 01, 08:40    [86]     Ответить | Цитировать Сообщить модератору
 RE:Почему никто не хочет осваивать adp?  [new]
Павел
Guest
Действительно, эта тема уже не раз обсуждалась. Решается двумя путями - или формировать ошибку на сервере и отдавать ее клиенту по raiserror, либо обрабатывать ошибку на клиенте и выдавать пользователю ее читабельный вариант. Я предпочитаю первый вариант. Но весь прикол в том, что при возникновении ошибки коллекция errors 'родного' аксессовского соединения всегда пуста (у этого соединения вообще много странностей). Эта ошибка немедленно передается Аксессовскому обьекту err, откуда ее можно подхватить. Если самому в коде прописать соединение, то можно работать и с коллекцией errors этого соединения. Вот только все запросы, представления и процедуры, которые являются источником записей формы или отчета, по умолчанию используют именно 'родное' соединение. С формами все просто - можно программно открыть нужный рекордсет и 'скормить' его форме, а с отчетом такой фокус уже не пройдет. Так что посмотри, может обьект err - это то что нужно.
25 июл 01, 10:17    [87]     Ответить | Цитировать Сообщить модератору
 RE:Почему никто не хочет осваивать adp?  [new]
ДиД.
Guest
Если я правильно понял.
Private Sub Form_Error(DataErr As Integer, Response As Integer)
MsgBox DataErr
End Sub
Всегда выдает 2757. На любую ошибку.
И вопрос: если это уже где-то обсуждалось, то в каком месте? Может быть я тоже почитаю, если уже проблему решили.
25 июл 01, 12:13    [88]     Ответить | Цитировать Сообщить модератору
 RE:Почему никто не хочет осваивать adp?  [new]
Павел
Guest
В примере пытаемся вставить запись в таблицу, поле которой не допускает отсутсвия значения:

Private Sub Кнопка0_Click()
On Error GoTo sub_err
Dim cmd As ADODB.Command
Set cmd = New ADODB.Command
cmd.ActiveConnection = CurrentProject.Connection
cmd.CommandText = "insert into test select null"
cmd.CommandType = adCmdText
cmd.Prepared = False
cmd.Execute , , adExecuteNoRecords
sub_exit:
Set cmd = Nothing
Exit Sub
sub_err:
Beep
MsgBox Err.number & ", " & Err.Source & ", " & Err.Description
Err.Clear
Resume sub_exit
End Sub

Естно мы имеем дело с ошибкой ADO, а не с ошибкой сервера. Для работы с ошибками сервера, приведу другой пример из MDAC SDK 2.6, но с 'родным' подключением, как я уже говорил, он не прокатит:

'BeginDescriptionVB
Public Sub DescriptionX()

Dim cnn1 As ADODB.Connection
Dim errLoop As ADODB.Error
Dim strError As String

On Error GoTo ErrorHandler

' Intentionally trigger an error.
Set cnn1 = New ADODB.Connection
cnn1.Open "nothing"

Exit Sub

ErrorHandler:

' Enumerate Errors collection and display
' properties of each Error object.
For Each errLoop In cnn1.Errors
strError = "Error #" & errLoop.Number & vbCr & _
" " & errLoop.Description & vbCr & _
" (Source: " & errLoop.Source & ")" & vbCr & _
" (SQL State: " & errLoop.SQLState & ")" & vbCr & _
" (NativeError: " & errLoop.NativeError & ")" & vbCr
If errLoop.HelpFile = "" Then
strError = strError & _
" No Help file available" & _
vbCr & vbCr
Else
strError = strError & _
" (HelpFile: " & errLoop.HelpFile & ")" & vbCr & _
" (HelpContext: " & errLoop.HelpContext & ")" & _
vbCr & vbCr
End If


Debug.Print strError
Next

Resume Next

End Sub
'EndDescriptionVB
26 июл 01, 02:17    [89]     Ответить | Цитировать Сообщить модератору
 RE:Почему никто не хочет осваивать adp?  [new]
Юрий+Жуков
Guest
Спасибо.
Но-где то я не догоняю.
Объявил
Dim cnn1 As ADODB.Connection

'Дальше по кнопке создаю свой Connection,REcordset в этом Connection
' И привязываю этот рекордсет к форме
Private Sub кнпКоннект_Click()
Set cnn1 = New ADODB.Connection
cnn1.Open CurrentProject.Connection
Set rst = New ADODB.Recordset
rst.Open "[Контрагенты]", cnn1, adOpenKeyset, adLockOptimistic, adCmdTableDirect
Set Me.Recordset = rst
End Sub

'Ловим ошибку в обработчике
Private Sub Form_Error(DataErr As Integer, Response As Integer)
If DataErr = 2757 Then
MsgBox " "
' Вот здесь я пытаюсь посмотреть cnn1.errors.count
' Он у меня равен нулю
End If
End Sub

В чем может быть причина?
16 авг 01, 14:10    [90]     Ответить | Цитировать Сообщить модератору
 RE:Почему никто не хочет осваивать adp?  [new]
Павел
Guest
Ну вот они, чудеса!

On Error GoTo sub_err
Dim cnErr As ADODB.Error
CurrentProject.Connection.Execute "Select * from НетТакойТаблицы"
sub_exit:
Exit Sub
sub_err:
For Each cnErr In CurrentProject.Connection.Errors
MsgBox cnErr.Description
Next
Resume sub_exit

Коллекция пуста...
Пробую так:

On Error GoTo sub_err
Dim cn As ADODB.Connection, cnErr As ADODB.Error
Set cn = CurrentProject.Connection
cn.Execute "Select * from НетТакойТаблицы"
sub_exit:
Set cn = Nothing
Exit Sub
sub_err:
For Each cnErr In cn.Errors
MsgBox cnErr.Description
Next
Resume sub_exit

Работает!
Так что, оказывается, можно работать и с 'родным' коннектом.

A событие Form_Error у меня вообще не возникает.
17 авг 01, 03:13    [91]     Ответить | Цитировать Сообщить модератору
 RE:Почему никто не хочет осваивать adp?  [new]
Юрий Жуков
Guest
Так у меня тоже поучается.
Но хотелось обрабатывать именно ошибку формы, а все манипуляции с сохранением данных оставить на совести Ассess

Вот еще один вопрос в тему: как обрабатывать ошибку возникающую например при команде
DoCMD.Runcommand acCmdSaveRecord

(например не все поля заполнены)
Хотлеось бы получить имена этих полей...
17 авг 01, 05:56    [92]     Ответить | Цитировать Сообщить модератору
 RE:Почему никто не хочет осваивать adp?  [new]
ДиД.
Guest
Я проверяю на наличие данных в полях в событии "до обновления". Но...
17 авг 01, 07:33    [93]     Ответить | Цитировать Сообщить модератору
 RE:Почему никто не хочет осваивать adp?  [new]
Юрий Жуков
Guest
Так вот тож, а хотелось все это сделать в одном месте и на уровне базы.
Далее хотелось бы написать некую универсальную процедуру обработки ошибок.
И тогда не надо везде анализировать поля, да и другие ошибки выловились, но видать не судьба.

З.Ы. Тяжело обащаться в нескольких форумах. А какие news группы вы могли бы посоветовать по Access?
17 авг 01, 09:57    [94]     Ответить | Цитировать Сообщить модератору
 RE:Почему никто не хочет осваивать adp?  [new]
ДиД.
Guest
Анализировать все равно придется. Или триггерами, но тогда надо убрать все связи, либо на клиенте. Пусть меня поправит что не так Павел.
17 авг 01, 11:41    [95]     Ответить | Цитировать Сообщить модератору
 RE:Почему никто не хочет осваивать adp?  [new]
Павел
Guest
А чего тут поправлять - все верно. Целостность данных не должен пасти клиент - это аксиома. Следовательно в триггерах без соответствующих проверок не обойтись. Но предварительнве проверки на клиенте тоже нужны - хотя бы для минимизации бессммысленных обращений к серверу. Только в случае SQL2K можно от связей не отказываться - триггеры Instead отрабатывают до DRI.
17 авг 01, 14:24    [96]     Ответить | Цитировать Сообщить модератору
 RE:Почему никто не хочет осваивать adp?  [new]
Павел
Guest
Вот совсем свежая ветка в MSSQL:
https://www.sql.ru/cgi-bin/UltraBoard/UltraBoard.pl?Action=ShowPost&Board=mssql&Post=2196
22 авг 01, 14:44    [97]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Access Ответить