[VBA] Referansları otomatik kontrol eden ve de ekleyen bir örnek var mı?
#1
Merhaba,

forumda daha önceden bu konu çözüldü mü?

En sağlam ve basit şeiklde istediğimiz referansların ekli olmasını nasıl sağlarız?

ACCDE olunca VT ye ayarlama çekilemiyor bildiğim. Eğer bağlantılar kopuksa uygulama devre dışı kalır demektir. VT taşınırken bağlantılar da taşınır mı?

Elinizde konuyla ilgili güvendiğiniz kod var mı?

Bir bağlantı eklerde dosya yolu gösteriliyor. Fakat bazı kullancılar kafdalarına göre(haklı oalrak) kuurlum yaptıklarından dizin farklı oluyor. önce kurulumu yolunu bulan, sonra orda iligli dosyayı arayan yoksa kullancııdan yolu siteyen ya da sistem dizininde dosya varsa ekleyen bir otomatik referans tamir işlevi lazım.

Yardımcı olursanız memnun oluurm.
Eek
Eek VT:Veri Tabanı, AVT: Access VT, MS:Microsoft, Kapaç: Kapa ve aç (rebot ve açkapa saçmalığına çözümüm)
Twitcy Yazan okuyan sağolsun, çözene saygılar. Kolaylaştırınız, zorlaştırmayınız.
? Cinnet geçirmemek için Access 2010'u SP2 ile kullanalım.
? Sürekli sebepsiz hatalar oluyor da AVT uçuyorsa siz de Ofis kurulmunu uçurun çözülüyor. Sorun kurulum dosyanızda! Farklısını bulun!
? VT dağıtıma çıkana kadar bölmek zaman kaybıdır!
{ Veri Tabanı Mantığı } {Access 2010 çökmelerine çözüm } { 60 Günlük Ofis 2010 Pro Türkçe } { Kayıtları Yan Yana Göstermek }
{ Forma Rapora Resim Fotoğraf Eklemek En kolay En Sağlam En Zengin Teknik }



  Alıntı
Bu mesajı beğenenler:
#2
Referanslarda eksik olanı bildiren kod maalesef yok, eğer referans yoksa VT bir şekilde size hatayı gösteriyor, sizde bunu eğer biliyorsanız referanslardan ekliyorsunuz, hatalı referans olduğuzamanda aynı fakat fark olarak MISSING hatası vermesibu durumda MISSING hatası veren referansı kaldırdığınız zaman düzeliyor,



  Alıntı
Bu mesajı beğenenler:
#3
Referans eksikliklerini yani missing olanları kodla tespit edebilirsiniz ama neye yarayacak?! Belki şu uygulamayı kurmalısınız ya da şu dll, ocx i bulup register edin diye uyarı verdirebilirsiniz.

Referanslar için system32 ya da x64 sistemler için syswow64 klasorü en uygun yerdir.

Uygulamayı kullanan kişide sizin kullandığınız referans yoksa o dosya ya onda yoktur ya da register sorunu yaşıyordur. Nasıl aşacaksınız? İlgili dll, ocx i uygulamanızın yanında taşımanız gerekir ve tabii registry işlemleri yapılmalı..
Javascript
  1. this.setState({sign:"Here comes the sun...."})







  Alıntı
Bu mesajı beğenenler:
#4
Bu size fikir verecektir.

Visual Basic
  1. Sub test()
  2. On Error Resume Next
  3. Dim ref As Reference
  4.  
  5. For Each ref In Application.References
  6. 'Ref. bulunamadı ise...(MISSING)
  7. If ref.IsBroken Then
  8. MsgBox ref.Name & vbCr & ref.FullPath & " bulunmadı."
  9. End If
  10. Next
  11.  
  12. If Err Then MsgBox Err.Description
  13. End Sub
  14.  
  15. Sub test2()
  16. On Error Resume Next
  17. Dim varmi As Boolean
  18.  
  19. arr = Array("c:\aa\bb\bir.dll", "c:\aa\bb\iki.dll")
  20.  
  21. For Each m In arr
  22. For Each n In Application.References
  23. If m = n.FullPath Then
  24. varmi = True
  25. Exit For
  26. End If
  27. Next
  28. If varmi = False Then Application.References.AddFromFile (m)
  29. varmi = False
  30. Next
  31.  
  32. If Err Then MsgBox Err.Description
  33. End Sub





  Alıntı
Bu mesajı beğenenler:
#5
Merhaba, cevaplar için teşekkürler.

Konuyu forumda aradıktan sonra genel aramada aşağıdaki adresleri imledim foruma yazdım. Adresler:
http://www.access-programmers.co.uk/foru...p?t=113671
http://support.microsoft.com/kb/194374
http://www.tek-tips.com/viewthread.cfm?qid=903662
http://support.microsoft.com/kb/308340
http://www.access-programmers.co.uk/foru...p?t=185352
http://www.trigeminal.com/usenet/usenet026.asp
http://access.mvps.org/access/modules/mdl0022.htm

Kimisi aynı kodu veriyor kimini de mantığını değerlendirmek için ekledim. Gerekli ddl dosyaları fazla tutmayacağından VT ile taşıyıp olamaynları ekletmek bence pratik ve sağlam bir yol. Sanırım Access sürümleri faklı olunca ya da başka sebeplerden referasnlar bozulabiliyor ve de gördüğüm akdarıyla Accde modunda referas eklenemiyor. O zaman çalıştırmak için tek yok bunu başlangıçta VBA ile kontrol edip yoksa ekletmek.

Application.References.AddFromFile ile oluyor geldi. Arama yapılan ilk döngüde adını yazdırdıktan sonra aynı ada sahip olanı ekletmek işi görür gibi geliyor. Tercihim VT ile aynı yerde bir alt dizinde yol bilgisini değişkenle bildirip ekletmek.

Bir de şu yöntem oluyor sanırım: Declare Function DllRegisterServer Lib "<yourlib.dll>" () As Long

Zeki Bey Test1'e hatalı olan referansa Access.References.Remove eklesek sorun olur mu? Bozuksa silsin. Sonra test2 sanırım adresteki dosyaları sorguluyor ve de yoksa ekliyor. Buarada yol bilgisi olmadan referasn adına göre aratabilir miyiz?

Zaten dosyaları VT ile aynı dizinde tutacağım. O zaman array'deki yollar VT dizini oalcak ve de doğal olarak sorgulanan yerde olmayacaklar doğru okuduysam kodu. O zaman boş yere bağlantı yolu değiştirmiş olurum. Nasıl bir yaklaşım sizce uygun olur?

Teşekkürler.
Eek VT:Veri Tabanı, AVT: Access VT, MS:Microsoft, Kapaç: Kapa ve aç (rebot ve açkapa saçmalığına çözümüm)
Twitcy Yazan okuyan sağolsun, çözene saygılar. Kolaylaştırınız, zorlaştırmayınız.
? Cinnet geçirmemek için Access 2010'u SP2 ile kullanalım.
? Sürekli sebepsiz hatalar oluyor da AVT uçuyorsa siz de Ofis kurulmunu uçurun çözülüyor. Sorun kurulum dosyanızda! Farklısını bulun!
? VT dağıtıma çıkana kadar bölmek zaman kaybıdır!
{ Veri Tabanı Mantığı } {Access 2010 çökmelerine çözüm } { 60 Günlük Ofis 2010 Pro Türkçe } { Kayıtları Yan Yana Göstermek }
{ Forma Rapora Resim Fotoğraf Eklemek En kolay En Sağlam En Zengin Teknik }



  Alıntı
Bu mesajı beğenenler:
#6
Madem ki benim fikrimi sordunuz, madde madde yazayım.

- Ref.sı iki şekilde ekleyebiliriz: FromFile veya AddGuid

- Kırık ref.sı elbette silmelisiniz ancak, programın çalışması için gerekli o dosyayı yerine koyup sisteme tanıtmalısınız. İlgili .DLL i veritabanında saklayıp gerektiğinde çıkarabiliriz.

- Windows ta bulunamayan (hani olursa...) paylaşılan DLL in yerini değiştirmeyin. Örneğin: "msado15.dll".

- Current.Path içinden kullanacağınız DLL ref.ları sadece kişisel DLL ler olabilir. Paylaşılan DLL ler olması grektiği yerde olmalı.

- Üstteki mesajımda belirttiğim array içindeki path ler uyduruk path idi. Bunların yerine düzgün path yazın. Neresi olması gerektiğini "Environ" fonksiyonu ile bulun.

Algoritma gayet basit aslında... kod yazmadan önce aklınızda aşağıdaki gibi tasarlayın.

- Ref.ları kontrol et; kırıksa sil.

- Programın ihtiyacı olan ref.lara ait dosyları ve path lerin listesini bak.( Bu, statik tanımlanan bir array veya bir tabloda saklanabilir. Dinamik olması için "Environ" dan faydalanın.)

- Var olan ref.lar ile listeyi karşılaştır; yok ise dosyanın olması gereken yerde olup olmadığını ve versiyonunu kontrol et.

- Versiyon "daha düşük" ise bir şey yapma.(Sistemi bozmayın)

- Dosya yerinde yok ise, varitabanından çıkar ve yerine koy; sisteme tanıt.

- Tanıtılan ref.sı ekle.

Access nazlı hatun gibi olduğundan autoexec içinde çalıştığında bazen cilve yapar. Smile
Tüm bu kontrolleri açılışta çalışan Form Load içinde yapın.

Kolay gelsin.



  Alıntı
Bu mesajı beğenenler:


Benzer Konular...
Konu: Yazar Cevaplar: Gösterim: Son Mesaj
  Bir Belgenin Yazdırılmış Olması Durumunu Kontrol Etmek Hk? adnnfrm 7 825 03-02-2024, 03:24
Son Mesaj: dsezgin
  Internet Bağlantı Kontrol zilli 19 9.266 26-01-2024, 14:43
Son Mesaj: ates2014
  Ado Ve Dao örnek alikagan 4 784 05-11-2021, 08:50
Son Mesaj: alikagan
  [FORM] Belli Bir Değer Göre Kaydı Saydırma Ve Kayıt Kontrol evidi 2 593 07-10-2021, 22:19
Son Mesaj: evidi
  [VBA] Excelde Ki Sayfa Ismini Kontrol Ettirme lemoncher2 8 1.673 13-01-2021, 21:25
Son Mesaj: lemoncher2
  [VBA] Tablo Bağlımı Değilmi Kontrol Etme hedefkaya 1 538 19-05-2020, 04:46
Son Mesaj: dsezgin
  [FORM] Kontrol Kodu Hatası h2001 1 591 12-11-2019, 22:00
Son Mesaj: h2001
  [FORM] STOK KONTROL devko 4 2.891 25-12-2018, 17:58
Son Mesaj: yahzee_61

Foruma Git:


Bu konuyu görüntüleyen kullanıcı(lar): 1 Ziyaretçi