Bir adet veri tabanını birden çok bilgisayarın kullanabilmesi?

Başlatan EMG81, 14 Ocak 2011, 14:22:14

EMG81

2 veya daha fazla Bilgisayar ile Ağ üzerinden tek bir veri tanabanı(acsess) Kullanılamıyor mu ?

Dün Vb net ile bikaç denemeler yaptım. eskiden bunu Vb6 ile yapmıştım... Acsess 2003 kullanmıştım. Şimdi acsess 2007 ile vb Net te denemeler yaptım. Amacım sayısını kendimiz belirlediğimiz (atıyorum 4 ) bilgisayarlara yüklediğim programlarımın ağ üzerinden bir biri ile haberleşmesi...


iyildirim

Kullanabilirsin.
Ancak soruda bir tutarsızlık var gibi. Veritabanı paylaşılan bilgiyi depolamak için, bilgisayarların haberleşmesi ile ne kastediyorsun anlamadım.

EMG81

Evet şimdi yazımı tekrar okudum. Biraz tutarsız olmuş, özür dilerim... Hemmen düzeltiyorum..

Haberleşmesinden kastım dosya gönderme, alma filan değil...

Basit bi buton ve text yaptım. evimde şuan 3 bilgisayar var ve 1 tanesinin içerisine veri tabanı attım. diğer 2 si ağ üzerinden aynı veri tabanını görüyorlar...

Amacım bilgisayarlar arasında String veri transferi yapmaktı. hangi bilgisayarın butonuna basılırsa ana makinada(veri tabanınınolduğu pc) ve diğer makinalardaki textbox lar da butona basılan pc nin adını göstermekti. (Her makinadaki buton database içinde kendi belirlediğim kutucuğa ismini kaydediyor)

Ama 1 den fazla kullancı olunca (ana makina harici) programlar database e kayıt yapamıyor...

Böyle birşey yapılabilirmi diye yola çıktım. Konu hakkında pek bilgim olmadığından database kullandım.
Ağdan string haberleşme için daha farklı bir yol varsa onuda deneyebilirim...

iyildirim

Veritabanını çok kullanıcılı çalıştırmak istiyorsanız veritabanının açarken exclusive açmamalısınız.  Ayrıca uygulamanızda tablo açarak çalışıyorsanız da tabloyu kilitleyerek de açmamalısınız. Bu konuda önereceğim direkt SQL cümleleri kullanmanız olacaktır. UPDATE ISIM_TABLOSU SET GUNCEL_MAKINA_ISMI ='MAKINA1' WHERE ........ gibi.
Yapmaya çalıştığınız işlem karmaşık değil bu şekilde kullanmak isterseniz çok da sorun olmaz. 
Bilgisayarlar arasında veritabanı aracılığı ile bilgi aktarmanın kötü yanlarından biri iletişimin direkt olamaması. Dinleyen tarafın ne dendiğini anlaması için veritabanını sürekli olarak belli bir zaman içerisinde, (birkaç saniye veya dakika ... ) sorgulaması gerekir.

Diğer yol ise direkt TCP/IP kullanmanız. Sizin uygulamanızda bir taraf da oluşan event'in diğerlerine bildirilmesi gerektiği için de uygun protokol UDP olacaktır. IP'nizin bağlı olduğu subnet'e tuşa basılan makina adını yayımlamak diğer makinaların hepsinde bu bilgiyi almayı sağlar. TCP kullanılması durumunda da bütün makinalarda , diğer makinaların hepsi ile bir baplantı yapılıp, bütün bağlantılara bu yanını yayımlamanız gerekli. Burada ki uygulama bir grup içindeki birinin kendi adını gruba duyuracak şekilde bağırması şeklinde olduğu için de UDP kullanmak uygun. TCP olsaydı grub içindeki herkesle ayrı ayrı konuşmak gerekirdi.

Ayrıca Access taşınabilirliği vs. açısından iyidir. Ancak ileride ciddi veritabanı uygulamaları yapmayı düşünürseniz SQL Expresss de (eski MSDE) aklınız da olsun.


RcALTIN

Alıntı yapılan: iyildirim - 14 Ocak 2011, 17:02:40
TCP olsaydı grub içindeki herkesle ayrı ayrı konuşmak gerekirdi.

Tek tek tüm aygıtlarla konuşmak yerine ilgili ağın broadcast adresine(255.255.255.0 için 192.168.1.255 mesela) data yollasak ne olur? bu mümkün değilse nedeni nedir? yanlış anlamayın merak ettiğim için soruyorum...
KİMSEYİ ENGELLEDİĞİM YOK, ÖZEL İLETİ DEVRE DIŞI !

iyildirim

Yanlış anlaşılacak bir şey yok.

Zaten UDP kullanıp gruba seslenmek dediğim şey de bu. Mümkün değil diye birsey yok. Sadece belirtmek istediğim tek tek kişilerle konuşurken TCP gruba seslenirken UDP nin uygun olduğudur.  UDP 'de gruba seslenir ve kim duydu kim duymadı diye peşine düşmesiniz. İlgili subnet'e broadcast paketi yollamak da aynı şey zaten.  TCP de paketlerin alındığının onayı da sorgulanır.

EMG81

Değerli yanıtlarınız için çok teşekkür ederim. Evet ip ile çalışmak daha mantıklı sanki... Veri tabanı ile çalışırken bikaç sorun oluşuyor zaten.

Örneğini;

yaptığım program ın database yolu...(örneğin c:\.........xxxxx...x)

yani her program database in bulunduğu konumu beim belirlediğim yerden buluyor.(ve database konumunu program çalışırken değiştirmeyi bilmiyorum)

programını internete koyunca indiren arkadaşlar programı çalıştıramıyacaklar. Bunun nedeni de ana makinanın ismi ve veri yolu... bende "\\Samsung\......" vs iken Başka birisinde bu ad farklı olacağından database i bulamama sorunu verecek...

Direk ip ile haberleşmek en mantıklısı...

Şimdi Karşımda 1 adet textbox ve 1 adet buton var... çok basitçe textbox ta yazan yazıları ip sini girdiğim ve ondada aynı benim programımın çalıştığı pc nin ekranına göndermek istiyorum... Değerli yardımlarınızı bekliyorum... İyi çalışmalar...

EMG81

Arkadaşlar nette yaptığım araştırmalar sonucu Microsoft winsock kompanentini buldum...


Sanırım tam aradığım şey bu. IP ile diğer Pc yada Pc lere bağlanıyoruz... fakat bir ton denemelerim sonucu bir türlü çalıştıramadım...(ip ler doğru kesin eminim)  TCP ve UDP bağlantı şekillerinin 2 sinide denedim...

Sabaha Programı rapid e yükleyip huzurunuza sunucam... Böyle bir proje ile uğraşmış arkadaşlar varsa LÜTFEN İLGİLENİN ! yardımlarınızı bekliyorum...

RcALTIN

VB.Net kullanacaksanız "System.Net.Sockets" bunu araştırın. Yok VB6 diyorsanız winsock da devam edin.

Her ikisi içinde önceden yazılmış basit chat projelerini v.s araştırın,  soket programlama yapısını iyice kavrayın...
KİMSEYİ ENGELLEDİĞİM YOK, ÖZEL İLETİ DEVRE DIŞI !

peko


Daha önce ASP, Vb, gibi programlarla çoklu uygulamalar yazdım.  Bir bilgisayarı veritabanını olarak ayarlayıp diğer makinelerin ona ulaşmasını sağlıyorum. Makine ismi olarak ulaşmanı tavsiye etmem, ip ile ulaşmak en doğru çözüm.

Client makinelerde dbcon.xxx diye bir dosyanın içinde bağlantı string'i ni tutarsın. Programın içine de bu dbcon'u include edersin.
Geri kalan işlemlerinde ne yapmak istiyorsan yapabilirsin..  Access 2007'ye vb.net üzerinden bağlanmak için aşağıdaki kodu kullanabilirsin.

#Region "Database Baðlantisi"


    Private Sub condb()
        Try

            'Dim dbroot As String = AppDomain.CurrentDomain.BaseDirectory
            'Dim dbname As String = decr("8CB4B765977E0CDB67F060983A2B23D2")
            'Dim dbpass As String = decr("B409A65133E8B15E9A3387CDA3D81AF1")

            ' Access VT Connections

            'sConnString = _
            '"Provider=Microsoft.Jet.OLEDB.4.0;" _
            '& "Data Source=" & dbroot + dbname & "; " _
            '& "Jet OLEDB:Database Password=" & dbpass & "; " _
            '& "Persist Security Info=true;"

            ' SQL VT Connections
            sConnString = _
            "PROVIDER=SQLOLEDB;DATA SOURCE=EKREMA\SQLEXPRESS;UID=xxxxxxx ;PWD=xxxxxx;DATABASE=EKOVT"

            cnn.ConnectionString = sConnString
        Catch ex As Exception
            ex.Message.ToString()
        End Try
    End Sub

#End Region


Bunun dışında, bilgisayarlar arası her hangi bir dosya ya da bilginin taşınması için webservis kullanmanı tavsiye ederim.
Basitçe nasıl yapacağına dair bilgiyi burdan indirebilirsin.

http://rapidshare.com/files/442658570/WebServisKurulum.pdf


kolay gelsin





Kolay gelsin..
" Bazıları zeka'sını iş'i zorlaştırmak için, bazıları ise kolaylaştırmak için kullanır.. "

EMG81

Arkadaşlar değerli yanıtlarınız için çok çok teşekkür ederim...


hemmen dediklerinizi inceliyorum... Ayrıca sizinde benim programımı incelemeniz için nete upload ettim. Bakıp kurcalarsanız sevinirim...

http://rapidshare.com/files/442750724/Aae__Baae_lantae_sae__Deneme.rar

Yalnız sizden birşey rica edicem. winsock kompanentinin 2 adet protokolü var. TCP , UDP ... Bunlar hakkında kısa bilgilendirici şeyler yazarsanız çok sevinirim...

eseneren

Alıntı yapılan: RcALTIN - 14 Ocak 2011, 17:55:43
Alıntı yapılan: iyildirim - 14 Ocak 2011, 17:02:40
TCP olsaydı grub içindeki herkesle ayrı ayrı konuşmak gerekirdi.

Tek tek tüm aygıtlarla konuşmak yerine ilgili ağın broadcast adresine(255.255.255.0 için 192.168.1.255 mesela) data yollasak ne olur? bu mümkün değilse nedeni nedir? yanlış anlamayın merak ettiğim için soruyorum...
her ip blogunun bır nerwork bır broadcatı olur o adrese sahıp bır cıhaz tanımlı olsa dedıgın gıbı olabılırdı.
Seçim yapmak için durum hakkında bilgi sahibi olmak zorunda değilsin, sonucuna hazır olmak için durum hakkında kaygılanırsın.  http://bit.ly/gixfTk

RcALTIN

Alıntı yapılan: senerenemre - 15 Ocak 2011, 22:27:12
Alıntı yapılan: RcALTIN - 14 Ocak 2011, 17:55:43
Alıntı yapılan: iyildirim - 14 Ocak 2011, 17:02:40
TCP olsaydı grub içindeki herkesle ayrı ayrı konuşmak gerekirdi.

Tek tek tüm aygıtlarla konuşmak yerine ilgili ağın broadcast adresine(255.255.255.0 için 192.168.1.255 mesela) data yollasak ne olur? bu mümkün değilse nedeni nedir? yanlış anlamayın merak ettiğim için soruyorum...
her ip blogunun bır nerwork bır broadcatı olur o adrese sahıp bır cıhaz tanımlı olsa dedıgın gıbı olabılırdı.

o adrese tanımlı cihaz nasıl oluyor şimdi tam olarak? 192.168.1.255 zaten 192.168.1.0 networkünün brooadcast adresi olunca(subnet mask 255.255.255.0 için) buraya gönderilen tüm verileri ağdaki tüm cihazların(192.168.1.1-254) alması gerekiyor, ancak TCP olunca checksum geri dönüşleri söz konusu olduğundan tek yönlü UDP'yi önermiş @iyildirim
KİMSEYİ ENGELLEDİĞİM YOK, ÖZEL İLETİ DEVRE DIŞI !

EMG81


eseneren

konuya baska acıdan yaklasmısım ,192.168.2.0 \24 ıcın 2.255 broadcast adresınde bır cıhaz tanımlı olamaz pc swırh yada router yanlıs anlasılmasın.
Seçim yapmak için durum hakkında bilgi sahibi olmak zorunda değilsin, sonucuna hazır olmak için durum hakkında kaygılanırsın.  http://bit.ly/gixfTk