Access
 sql >> Teknologi Basis Data >  >> RDS >> Access

Hati-hati Apa yang Anda Perhatikan

Saya menemukan jawaban ini di StackOverflow tempo hari dan ingin memberikan perhatian padanya (penekanan pada saya):

Saya mengalami masalah ini saat melakukan debug ketika Saya memiliki jam tangan yang mencoba mengembalikan item kunci yang "hilang" . Sebenarnya, debugging frustrasi lebih lanjut memiliki masalah yang sama ketika saya benar-benar memiliki arloji untuk [scriptingdictonaryObject].exists() condtional); Saya menyarankan agar kunci "hilang" ditambahkan karena jam tangan . Saat saya melepas arloji dan malah membuat lembar kerja sementara untuk menyalin larik saat dijalankan, kunci yang tidak diinginkan tidak lagi ditambahkan.
Objek kamus menambahkan item sebelum .add() dipanggilSaya menggunakan objek kamus dari pustaka MS Scripting Runtime untuk menyimpan serangkaian larik dan melakukan operasi pada sel larik jika diperlukan. Ada for loop untuk melewati proses... Stack Overflowriddley_w

Apa yang terjadi di sini?

Salah satu "fitur" dari objek Kamus adalah bahwa objek itu akan secara implisit buat item baru tanpa perlu memanggil metode .Add secara eksplisit . Apa perbedaan antara implisit dan eksplisit?

Catatan:Penggunaan awal objek Dictionary memerlukan referensi ke "Microsoft Scripting Runtime" (detail di sini).

Dim MyDict As New Dictionary

'Explicit add
MyDict.Add "KeyA", "Item A"

'Implicit add
MyDict.Item("KeyB") = "Item B"

Debug.Print MyDict("KeyA"); vbNewLine; MyDict("KeyB")

Inilah bagian dokumentasi yang relevan mengenai implisit pembuatan kunci:

Keterangan
Jika kunci tidak ditemukan saat mengubah item , kunci new baru dibuat dengan item baru yang ditentukan . Jika kunci tidak ditemukan saat mencoba mengembalikan item yang ada, kunci baru dibuat dan item terkait dibiarkan kosong.

Mereproduksi masalah

Mari kita ulangi masalahnya untuk melihat dengan tepat ke mana arahnya.

Perilaku yang diharapkan

Buat contoh rutin berikut:

Sub WatchOut()
    Dim MyDict As Dictionary
    Set MyDict = New Dictionary
    
    Debug.Print "KeyA exists? "; MyDict.Exists("KeyA")
End Sub

Jalankan rutinitas di atas dari jendela langsung dan itu akan mengembalikan False:

WatchOut
KeyA exists? False

Tambahkan jam tangan

Sekarang, mari tambahkan arloji dari item "KeyA":

Mari kita coba menjalankan WatchOut rutin lagi:

WatchOut
KeyA exists? False

Sejauh ini baik. Mungkin ini bukan masalah.

Langkah melalui kode

Mari tambahkan Berhenti pernyataan untuk memaksa kode untuk memecahkan:

Sub WatchOut()
    Dim MyDict As Dictionary
    Set MyDict = New Dictionary
    
    Stop
    Debug.Print "KeyA exists? "; MyDict.Exists("KeyA")
End Sub

Sekarang, mari kita coba menjalankan WatchOut rutin:

WatchOut
KeyA exists? True

Ah! Kombinasi jam tangan dan membobol debugger sudah cukup untuk memaksa "bug" muncul. Saya memasukkan bug dalam tanda kutip menakut-nakuti karena itu sebenarnya perilaku yang diharapkan untuk debugger. Tapi itu hampir pasti perilaku yang tidak terduga bagi pengembang.

(Perhatikan bahwa tidak ada yang istimewa dari Stop perintah yang menyebabkan perilaku ini. Anda dapat menghapus Berhenti baris dan setel breakpoint pada kode dan perilaku yang sama akan terjadi.)

Anda dapat melihat di mana hal semacam ini dapat menyebabkan Anda mencabut rambut Anda saat debugging. Kapan pun perilaku program Anda berbeda saat berjalan normal versus saat men-debug, Anda bisa melakukan satu sesi debug yang memberatkan.

Ringkasan

Langkah-langkah untuk mereproduksi masalah:

  1. Buat Arloji untuk item Kamus tertentu
  2. Mendobrak debugger saat menjalankan kode

Ini mungkin hanya akan membantu satu atau dua pengembang. Tapi itu berpotensi menghemat jam pengembang tersebut frustrasi. Dan, jika boleh jujur, saya kemungkinan besar akan menjadi salah satu pengembang tersebut;-).


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Membangun Basis Data Microsoft Access

  2. Konversikan Kueri Microsoft Access Anda dengan Mudah Dengan Alat Baru Ini!

  3. Pembaruan Dari Tim Microsoft Access (Juni 2017)

  4. Hari Cadangan Sedunia:4 Fakta Menarik Kehilangan Data untuk Diketahui

  5. Cara Membuat Diagram Basis Data di Access