Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

brojevi gresaka u vba

[es] :: Baze podataka :: brojevi gresaka u vba

[ Pregleda: 2890 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

konstantin

Član broj: 17262
Poruke: 132
*.teol.net



Profil

icon brojevi gresaka u vba04.12.2003. u 19:59 - pre 248 meseci
Hi svima!
Nikako da pronadjem dokumentaciju o kodu gresaka unutar VBA. Naime od skora imam obavezu da programiram iznad access 2000 baze podataka i greske koje poznajem nisu mi dovoljne da presretnem razne slucajeve.
Ako neko posjeduje fajl sa trazenim informacijama ili neki link na sajt sa istim, bio bih mu zahvalan.
 
Odgovor na temu

Zidar
Canada

Član broj: 15387
Poruke: 3085
*.eqao.com



+79 Profil

icon Re: brojevi gresaka u vba04.12.2003. u 21:04 - pre 248 meseci
U HELPu za Access 97 ima ova procedura, verujem da radi i za 2K:

The following procedure creates a table containing many of the error codes and strings used or reserved by Microsoft Access and by the Microsoft Jet database engine. Not all error codes are included in the resulting table, as some exist outside the range of error codes evaluated by this procedure (0 to 4500).

Function AccessAndJetErrorsTable() As Boolean
Dim dbs As Database, tdf As TableDef, fld As Field
Dim rst As Recordset, lngCode As Long
Dim strAccessErr As String
Const conAppObjectError = "Application-defined or object-defined error"

On Error GoTo Error_AccessAndJetErrorsTable
' Create Errors table with ErrorNumber and ErrorDescription fields.
Set dbs = CurrentDb
Set tdf = dbs.CreateTableDef("AccessAndJetErrors")
Set fld = tdf.CreateField("ErrorCode", dbLong)

tdf.Fields.Append fld
Set fld = tdf.CreateField("ErrorString", dbMemo)
tdf.Fields.Append fld

dbs.TableDefs.Append tdf
' Open recordset on Errors table.
Set rst = dbs.OpenRecordset("AccessAndJetErrors")
' Loop through error codes.
For lngCode = 0 To 3500
On Error Resume Next
' Raise each error.
strAccessErr = AccessError(lngCode)
DoCmd.Hourglass True
' Skip error numbers without associated strings.
If strAccessErr <> "" Then

' Skip codes that generate application or object-defined errors.
If strAccessErr <> conAppObjectError Then
' Add each error code and string to Errors table.
rst.AddNew
rst!ErrorCode = lngCode
' Append string to memo field.
rst!ErrorString.AppendChunk strAccessErr
rst.Update
End If
End If
Next lngCode
' Close recordset.
rst.Close
DoCmd.Hourglass False
RefreshDatabaseWindow
MsgBox "Access and Jet errors table created."

AccessAndJetErrorsTable = True

Exit_AccessAndJetErrorsTable:
Exit Function

Error_AccessAndJetErrorsTable:
MsgBox Err & ": " & Err.Description
AccessAndJetErrorsTable = False
Resume Exit_AccessAndJetErrorsTable
End Function
 
Odgovor na temu

konstantin

Član broj: 17262
Poruke: 132
*.teol.net



Profil

icon Re: brojevi gresaka u vba05.12.2003. u 06:55 - pre 248 meseci
Zidar,
hvala na informaciji. Ovo mi je stvarno pomoglo, mada jos ne kontam zasto su ove informacije tako skrivene u accessu. Usput ovu funkciju koju si mi poslao ne mogu da nadjem u samom helpu od access2k.
 
Odgovor na temu

Zidar
Canada

Član broj: 15387
Poruke: 3085
*.eqao.com



+79 Profil

icon Re: brojevi gresaka u vba05.12.2003. u 14:00 - pre 248 meseci
Drago mi je da je bilo od koristi. Sto se tice Access-a, verzija 97 je ubedljivo najbolja u celini. Ranije verzije nisu bile toliko mocne, a kasnije su pretrpane u sustini malo korisnim nadgradnjama - ADP, mini SQL unutar Accessa (MSDE?), name change tracking (za koju se preporucuje da se iskljuci, inace puca program kad se ranuju slozeniji kveriji). Najbolje knjige za Access napisane su za '95 i '97.

Ako se vec bavis kontrolom gresaka, evo ti jedna ideja kako to raditi na nivou procedure/funkcije.

Function MyFunc() as some_data_type
'Absolutno prva linija u svakoj proceduri, pre DIM i CONST
On Error GoTo ERROR_CODE:

Dim Something AS some_data_type
'Ovde dodje kod koji zaista nesto radi


'Ako si stigao dovde bez greske, ti si OK pa mozes da vratis vrednost funkcije
MyFunc() = something

EXIT_HERE:
On Error Resume Next
'Ovde dodje rs.close, set db=nothing itd
Exit Function

ERROR_CODE:
Select Case err
Case Else MsgBox "Error " & err.number & vbcrlf & Err.Description
End Select
Resume EXIT_HERE:

End Function


Deo iza ERROR_CODE moze da izgleda ovako:
ERROR_CODE:
Select Case err
Case 123456
'Ovde doddje poruka ili kod za gresku sa brojem 123456
'Sve ostale greske su pokrivene sa Case Else
'ovde moze da se stavi i Resume Next
'sto prakticno znaci da se odredjena greska ignorise
Case Else
MsgBox "Error " & err.number & vbcrlf & Err.Description
'Zgodno je da se u message title stavi naziv procedure koja prijavljuje gresku
End Select
'Ovde moze da se ubaci linija koja loguje gresku, na primer:
'Call LogThisError(ProcName,Err.Number, Date, time, User)
'gde je LogThisError neka procedura koja zapisuje greske u neku tabelu
Resume EXIT_HERE:


Medjutim, ne mogu sve greske da se presretnu ovakvim nacinom. Na primer, ako ti je forma bound na neku tabelu i pokusas da uneses duplikat ili nevazeci PK (narusavanje relacija), tvoj Error code se nece aktivirati - to su greske na nivou Access JET engine, a ne u tvojoj proceduri. Forma moze da nema nikakav kod a ti ipak napravis gresku kad uneses duplikat. Za to prouci Form Error event. Mislim da i u Access 2K ima lep primer, ako ne, javi se pa cu ti poslati primere.

Srecno!





 
Odgovor na temu

[es] :: Baze podataka :: brojevi gresaka u vba

[ Pregleda: 2890 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.