|
|||||||
Programlama Kategorisinde ve visual basic Forumunda Bulunan Visual Basic'de Veri Tabanı { Düzenleme By ForgeR } Konusunu Görüntülemektesiniz => Veri Tipleri Integer: Visual Basic’te tam sayi degiskenleri tanimlamak için kullanilir. Hafizada 2 byte yer kaplarlar. Alabilecegi deger araligi -32768 ...
![]() |
|
|
Konu Araçları |
|
|
#1 |
|
● 100 Yaşında Mutlu Ol ●
![]() ![]() ![]() Giriş Tarihi: 18-05-2005
Yer: OBSCURE
Mesajlar: 3,030
Rep Puanı: 1549603
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]()
|
Veri Tipleri Integer: Visual Basic’te tam sayi degiskenleri tanimlamak için kullanilir. Hafizada 2 byte yer kaplarlar. Alabilecegi deger araligi -32768 ile +32767 arasindadir.DefInt bildiri deyimi ile tanimlanabilirler. Ayrica bir degiskenin sonunda % karakteri bulunuyorsa bu degisken integer tipindedir. Örnek : Private Sub Form_Load() Dim Maas As Integer DefInt A-C Oran% = 100 A_sayi = 100 B_sayi = Oran*A_sayi C_sayi = B_sayi + A_sayi - 1000 Maas= 32767 End Sub Eger burada tanimlanan degiskenlere daha büyük sayilar atanirsa overflow olusur. Long : Daha büyük bir aralikta integer yani tamsayi tanimlamak için kullanabilecegimiz bir veri tipidir. Hafizada 4 byte yer kaplar. Kullanilabilecek uç degerler +2,147,483,647 ile -2,147,483,648 dir. Long tipinde bir degisken tanimlamak için DefLng bildirimini veya degisken sonunda & karakterini kullanabiliriz. Örnek : Private Sub Form_Load() DefLng A-B Bölüm=50000 cikan&=600000 Kalan& = (cikan / Bölüm ) * 10000 End Sub Single :Tam sayi olmayan küsüratli sayilar için kullanabilecegimiz bir veri tipidir. Kayan-noktali sayi olarak isimlendirilir. Single tipindeki veriler bellekte 4 byte yer kaplarlar. Nekatif sayilar için alabilecegi aralik -3.402823E38 ile -1.401298E-45 ,pozitif sayilar için alabilecegi aralik 1.401298E-45 ile 3.402823E38 arasindadir.Single tipinde veri tanimlamak için DefSgn bildirimi veya degisken sonuna ! karakteri konur. 7 haneye kadar hassastir.Daha sonrasi yuvarlatilir. Örnek : Private Sub Form_Load() DefSgn A-B Bölüm=50000 Cikan!=600000 End Sub Double : Visual Basic’te kullanilabilecek en büyük sayisal degerlerin veri tipidir. Hafizada 8 byte yer kaplarlar. 16 haneye kadar hassastirlar. Maximum alabilecegi degerler pozitif sayilar için 4.94065645841247E-324 ile 1.797693134862232E308 , nekatif sayilar için de -1.797693134862232E308 ile -4.94065645841247E-324 arasindadir. DefDbl bildirimi veya # sembölü ile double tipinde degiskenler tanimlanabilir Örnek : Private Sub Form_Load() DefDbl A-K Dari=50000 Bugday=600000 Arpa=340.56 End Sub Currency : Sayisal tipdeki veriler için tanimlanmis özel bir veri tipidir.Hafizada 8 byte yer kaplarlar. 4 hane ondalik kismi olmak üzere toplam 19 haneden olusur.(nokta hariç) Alabilecegi maximum degerler -922,337,203,685,477.5808 ile 922,337,203,685,477.5807 arasindadir. @ sembolü veya DefCur bildirimi ile Currency tipinde degisken’ler tanimlanabilirler. Örnek : Private Sub Form_Load() Dim Maas As Currency , Borc As Currency Maas = 500000000 Borc = 68000000 Zayi@ = 340000.56 End Sub Date : Tarih türündeki bilgileri kullanmak için olusturulmus bir veri tipidir. Hafizada 8 byte yer kaplarlar. 1 Ocak ile 31 Aralik 9999 arasindaki tarihleri kullanabilirsiniz. DefDate bildirisi ile tarih türünde degiskenler tanimlayabiliriz. Örnek : Private Sub Form_Load() Dim Dogum_tarihi As Date , Evlenme_Tarihi As Date Dogum_tarihi =#Dec,9,1977# Evlenme_Tarihi=#May,15,1998# End Sub Boolean :Mantiksal veri tipleri için kullanilir. Iki seçenekten birisini alabilir.Bunlar True veya False degerleridir. Bellekte 2 byte yer isgal ederler.Boolean tipindeki bir degiskeni tanimlamak için DefBool sözcügü kullanilir. Örnek : Private Sub Form_Load() Dim Durum As Boolean , Duyum As Boolean Durum = True Duyum = False End Sub Byte : O ile 255 arasindaki tamsayilari ifade etmek için kullanilabilecek veri tipidir.DefByte deyimi ile byte tipinde degiskenler tanimlanabilir. Örnek : Private Sub Form_Load() Dim Durum As Byte , Duyum As Byte Durum =23 Duyum = 143 End Sub String : Metin türü bilgileri saklamak için kullanilabilecek veri türüdür. 16 bitlik versiyonda 0 ile 65538 arasinda , 32 bitlik versiyonda ise 0 ile 2,000,000,000 arasinda karakter alabilir. String türünde degisken tanimlamak için Defstr veya $ sembolü kullanilir. Örnek : Private Sub Form_Load() Dim Adi As String , Soyadi As String Adi ="Kemal" Soyadi = "Tas" No$="1323970067" End Sub Variant : Bu tipte tanimlanmis bir degiskene herhangi bir tip’te veri yüklenebilir.Yani ne tür bir veri girecegimizi bilmedigimiz degiskenleri Variant tipinde tanimlamaliyiz. Bu tür degiskenler hafizada 16 byte tan fazla yer kaplarlar. DefVar bildiri sözcügü ile Variant türünde degiskenler tanimliyabiliriz. Variant türünde degiskenler tanimlamak fazla kullanisli degildir.Çünki hafizada fazla yer kaplarlar. Örnek : Private Sub Form_Load() Dim Ad As Variant , Maas As Variant , Tel As Variant Dim Dogum_tarihi As Variant Ad="Ahmet Aydın" Maas=200000 Tel="500-45-00" Dogum_tarihi=#Apr,3,1970# End Sub Veri Yapıları Const : Bunlar program içinde degeri degistirilemeyen sabitlerdir. Public ve Private tipinde sabitler tanimlanabiliilir. Public sabitlere tüm modüller içinden ulasilabilir. Private türündeki sabitler ise sadece tanimlandiklari modül içersinde geçerlidirler.Ayrica Visual Basic içinde tanimlanmis çok sayida sabit vardir. Bunlara CONSTANT.TXT dosyasini açarak inceleyebiliriz. Örnek : Const sehir="Istanbul" Const Ulke="Turkey" Const posta_kodu=34650 Const tek_kod=212 Type - End Type Yapisi : Type yapisini kullanarak programici farkli veri tiplerini kullanarak kendi veri yapisini olusturabilir. Bu C deki Struct yapisina benzetilebilir. Bu yeni veri tipine record adi verilir. Herhangi bir modülün Declarations kisminda asagidaki gibi bir tanimlama yapabiliriz. Örnek : Type Ogrenci Ad As String *10 Soyad As String *12 Not As Byte Kredi As Integer End Type 'Ogrenci veri tipi toplam hafizada 25 byte yer kaplamaktadir. Bu veri tipini kullanmak için 'Ogrenci tipinde degiskenler tanimlamak gerekmektedir. Private Sub Form_Load() Dim A As Ogrenci Dim B As Ogrenci 'Bu degiskenlere bilgi atamak asagidaki sekildeki gibidir. A.Ad="Ali" A.Soyad ="Armer" End Sub String türü degiskenlere sabit bir uzunlukta yer ayirmak istersek asagidaki sekilde bir tanimlama yapmaliyiz. Dim Name As String *12 Dim Address As String *50 VERİTABANI İŞLEMLERİ Ders sonunda yapabilecekleriniz: -Veritabanı kullanım açıklamak. -ADO veri erişim yöntemini açıklamak. -Veritabanına yazmak ve okumak. -SQL Server ve Access veritabanlarına erişim. I. ADO VERİ ERİŞİM YÖNTEMİ Visual Basic uygulamalarına baktığınızda çoğunun veritabanı uygulaması olduğunu görürsünüz. Bu nedenle Visual Basic 6.0 ile veritabanı uygulaması geliştirmek için çok sayıda yenilikler yapılmıştır. Bu yeniliklerin başında yeni veri erişim yöntemi ADO (ActiveX Data Objects) gelir. NOT: ADO ve Visual Basic, Microsoft firmasının tescilli markasıdır. ŞEKİL: ADO VE VERİ ERİŞİM NESNELERİNİN KARŞILAŞTIRILMASI NOT: ADO konusunda ayrıca sitemizin ASP kursuna bakınız. A. ADO'YU KULLANMAK ADO nesnelerini kullanmadan önce, diğer bir deyişle programınızda ADO kullanarak veritabanı işlemlerini yapmadan önce ADO nesnelerini ve referanslarını Visual Basic ortamına eklemeniz gerekir. 1. Project menüsünden References komutu kullanılır. 2. Microsoft ActiveX Data Objects 2.0 ya da daha ilerisi seçilir. İPUCU: ADO versiyonları ve Visual Basic Service Pack'leri konusunda daha geniş bir araştırma yapınız. [Linkleri sadece kayıtlı üyelerimiz görebilir.ForumTR üyesi olmak için tıklayınız]. Örneğin formlarınızdaki metin kutularını ya da gridleri veritabanına bağlamak için ADODC bileşenin eklenmesi gerekir. Bu durumda ortama ADO kontrollerini de eklemeniz gerekir. 1. Project menüsünden Components komutu kullanılır. 2. Microsoft DataGrid Control 6.0 seçilir. Ayrıca Microsoft ADO Data Control 6.0'ında eklenmiş olması gerekir. 3. OK düğmesine tıklanarak kontrol projeye eklenmiş olur. Ardından ADO DC üzerinde sağ tıklayarak elde ettiğiniz iletişim kutusunda veritabanı erişiminin birçok işlemini yapabilirsiniz. Geriye bir tek şey kalır, o da verileri görüntüleyecek olan DataGrid'in DataSource özelliğini ADODC olarak düzenlemek. 1. FORM ÜZERİNDEKİ KONTROLLERİ ADO DATA CONTROL'E BAĞLAMAK ADO Control aracılığıyla veri kaynağı ile bağlantı kurulduktan sonra, TextBox, ComboBox, ListBox, Grid gibi kontrollerle birlikte kullanılabilir. NOT: Bu dokümanlar Faruk Çubukçu tarafından hazırlanmıştır. Burada adı geçen ticari ünvanlar ve markalar bilgi amaçlı kullanılmışlardır ve kendi imtiyazlarına sahiptirler. Bu dokümanlar ticari amaçlı olarak kullanılmaz. Daha fazla bilgi için [Linkleri sadece kayıtlı üyelerimiz görebilir.ForumTR üyesi olmak için tıklayınız] adresine bakınız. Bir kontrolün tasarım zamanında ADODC'e bağlanması için DataSource özelliğinin düzenlenmesi gerekir. Yine aynı şekilde bu işlemler çalışma zamanında da yapılabilir. Kullanılan kontrole göre kullanılan özellikler değişir. Örneğin bir TextBox kontrolünü ADODC ile ilişkilendirerek veri alışverişi yapmasını istersek DataField özelliği kullanılır: Text1.DataField = "ADI " Set Text1.DataSource = ADODC1 Aşağıdaki örnekte DataGrid kontrolü ile Access veritabanındaki veriler bir gride bağlanır. Bu işlem için: 1. Project menüsünden Components komutu kullanılır. 2. Microsoft DataGrid Control 6.0 seçilir. Ayrıca Microsoft ADO Data Control 6.0'ında eklenmiş olması gerekir. 3. OK düğmesine tıklanarak kontrol projeye eklenmiş olur. Private Sub Command1_Click() ADODC1.ConnectionString ="Provider=Microsoft.Jet.OLEDB.3.51; Data Source=c:\my documents\adresler.mdb" ADODC1.CommandType = adCmdTable ADODC1.RecordSource = "ogrenciler" Set DataGrid1.DataSource = ADODC1 End Sub B. ADO NESNELERİ ADO veri erişim sistemi oldukça basit bir nesne modeline sahiptir. Bu modelde birçok nesne seçimli olarak (birlikte) ya da bağımsız olarak kullanılabilir. Tablo: ADO modelinde yer alan nesneler Nesne Amacı Command Bir veri kaynağı üzerinde bir query ya da deyimi işletir. Connection Bir veri kaynağına doğrudan bağlantı yaratır. Error Veri kaynağından bir hatayı döndürür. Field Bir kayıt içindeki bir alan (kolon). Parameter Bir komut için parametre tutar. Recordset Bir komut tarafından üretilen (dönen) verileri içerir. Örneğin bir Access veritabanına bağlantı kurmak için şu nesneler kullanılır: Veri: ADRESLER.MDB Connection: MUSTERI.MDB Command: Select * from musteriler Recordset: elde edilen bilgi. Aşağıdaki örnekte sadece Recordset nesnesi ile bir Microsoft Access veritabanına erişilmektedir: Dim rst As New ADODB.Recordset rst.Open "Select * From musteriler", "DSN=MUSTERI", adOpenKeyset Set DataGrid1.DataSource = rst NOT: Yukarıdaki kodda yer alan DSN tanımlaması işletim sistemi tarafından yaratılabilir. Control Panel'de ODBC tanımlamalarına bakınız. 1. Recordset Nesnesinin Kullanımı Aşağıdaki örnekte bir Recordset nesnesi ile Access veritabanındaki veriler DataGrid üzerinde gösterilmektedir: Dim rst As New ADODB.Recordset rst.Open "Select * From musteriler", "DSN=MUSTERI", adOpenKeyset Set DataGrid1.DataSource = rst 2. Connection Nesnesi Connection nesnesi bir veri kaynağına bağlantı kurmak için kullanılır. Connection nesnesi sayesinde bir data provider aracılığıyla (OLE DB) bir komut işletilir. Connection nesnesi ile ConnectionString özelliği kullanılır. Bu özellik bağlanılacak veri kaynağını gösterir. Open metodu ise bağlantıyı açmak için kullanılır. Dim cnn As New ADODB.Connection cnn.Open "MUSTERI" 3. Command Nesnesi Command nesnesi bir bağlantı üzerinde işletilecek özel bir query ya da komut yaratmak için kullanılır. Command nesnesinin ana amacı stored procedure'ların ve parametreli komutların çalıştırılmasını sağlamaktır. Bir komut nesnesi bir bağlantı üzerinde bağımsız olarak yaratılır ve işletilmeden önce veri kaynağına bağlı olan aktif connection ile ilişkilendirilir. Bir komut herhangi bir recordset döndürmeden de kullanılabilir. Örneğin aşağıdaki program parçasında bir UPDATE komutu veritabanı üzerinde işletilmektedir. strSQL = "UPDATE BORCU SET BORCU = BORCU * 1.15" cmd.Execute 4. Recordset Nesnesi Recordset nesnesi ADO içinde en çok kullanılan nesnedir. Recordset nesnesi veri kaynağından gelen verileri içerir. Bir komut ya da query çalıştırıldığında elde edilen kayıtları recordset nesnesi içerir. Recordset nesneleri genellikle aktif connection ve command ile oluşturulur. Bunun dışında Recordset nesneleri bağımsız olarak da kullanılabilir. Örnek: Recordset tanımlaması Dim rst As New ADODB.Recordset rst.Open "Select * From Ogrenciler", "DSN=ADRESLER", adOpenKeyset, adLockOptimistic Örnek: Bir recordset'in DataGrid üzerinde gösterilmesi Dim con As New ADODB.Connection Dim rst As New ADODB.Recordset Con.Open="Provider=Microsoft.Jet.OLEDB.4.0 ; Data Source=c:\data\sirket.mdb" Rs.Open "SELECT * FROM musteriler", Con Set DataGrid1.DataSource = rs NOT: DSN tanımlı olan bağlantılar için bilgisayarda Control Panel üzerinde ODBC bağlantısını tanımlanmalıdır. II. GÖZDEN GEÇİRME 1. Recordset nedir? 2. Bir recordset nasıl yaratılır? 3. Bir recordset'e ekleme yapmak için hangi metot kullanılır? 4. ADO nesneleri nelerdir? III. VİSUAL BASIC UYGULAMASI ER-FA ecza deposu bin kadar üyesine ilaç toptan ilaç pazarlamak üzere kurulmuştur. ER-FA ecza ilaç siparişlerini takip etmek için bir Visual Basic uygulaması geliştirmek istemektedir. Yapılacak ana işlemler: . Visual Basic programlama ortamında ana menü ve veri giriş formlarını tasarlamak. . Veritabanını tasarlamak. . Veri girişi ve raporlama için kodlar yazmak. Yapılacak işlemlerin ayrıntıları: . Visual Basic formu olarak veri giriş formlarını tasarlamak. . Microsoft Access ya da SQL Server üzerinde veritabanlarını tasarlayın. . Veri girişi sayfalarında form validation (form alanlarının kontrolü) yapın. . KAYDET düğmeleriyle verilerin veritabanına kaydını yapın. . Veritabanı işlemlerini ADO kullanarak yapın. . İstenen raporlar için Data Environment ve Data Reports bölümlerinden yararlanın. Sipariş sisteminin yanı sıra bir süre sonra ER-FA ecza deposu müşterileri için bir anket yapmaya karar vermiştir. Anketler de veritabanına bir metin bilgisi olarak eklenecektir. Bu koşullar altında; tabloları ve kayıtların birbiriyle bütünlüğün sağlayacak olan olası ilişkileri tanımlayın. Bilgiler: STOK KARTI MUSTERİ KARTI SİPARİŞ ANKET Kodu Kodu Tarih Kodu Tanımı Unvanı Sip No Anket Metni Grup Kodu Grubu Mus Kodu Satıcı Firma Adresi Stok Kodu Birimi İlçesi Birimi Birim Fiyatı İli Adet KDV Tel Taşıyıcı Firma Depo Kodu Fax Siparişi Alan Paket Kodu Vergi Dairesi Açıklama Vergi No Resmi Kredisi Hesap Açılış Tarihi Resmi Web sitesi PERSONEL (SİPARİŞİ ALANLAR) TAŞIYICI FİRMA Kodu Kodu Adı Soyadı Ünvanı Adresi Adresi İli İli İşe Giriş Tarihi Güzergah Öncelikle, Microsoft Access ile veritabanını tasarlayın. Notlar: . Genellikle kodu alanlarını Primary Key yapın. . Birim fiyatlar genellikle "Adet" olarak düzenlenecektir. Onu Default yapın. . Fiyat ve adet bilgilerine mutlaka pozitif bir değer girilecektir. . Sipariş tarihi "günün" tarihi olarak otomatik olarak düzenlenecektir. . Grup kodları, iller ve diğer seçenekli girişler bir Combo box olarak düzenlenecektir. Bu veriler sabit ya da veritabanından gelerek doldurulabilir. 1. Veritabanını Yaratın ve Tabloları Tasarlayın. Yukarıdaki bilgiler temelinde SIPARIS-TAKIP veritabanını yaratın. Ardından tabloları tasarlayın. 2. İlişkileri Kurun Kodu alanları PK olduktan sonra ilgili tablolar arasındaki ilişkileri kurun. Müşteri-Sipariş Müşteri-Anket Stok-sipariş Personel-sipariş Taşıyıcı firma-sipariş arasındaki ilişkileri kurun. 3. Örnek veriler girin: Test amaçlı örnek veri girin. 4. Ana Menü Yapın Programın veri giriş kartlarına yönlenmesini sağlayacak ve ilk olarak çalıştırılacak bir ana menü formu hazırlayın. Visual Basic projelerinde genellikle menü çubuğu yaparak ana işlemleri onun üzerinde belirtirsiniz. 5. Veri Giriş Formları Yukarıdaki tablolara veri girişi için Visual Basic formları hazırlayın. İstenen formlar Yapılacaklar: . Stok kartı için columnar bir form . Müşteri kartı için columnar bir form . Anket için columnar bir form . Personel için columnar bir form . Taşıyıcı için columnar bir form . Sipariş için tabular bir form Yapılacaklar (öneriler) . Müşteri formu için olası alanlara combo box ekleyin. . Müşteri formu için olası alanlara Validation Rule ekleyin. . Müşteri formu için form zeminini değiştirin. . Müşteri formunun altına kendi hazırladığınız bir bitmap dosyayı koyun. . Müşterinin Web sitesi bilgisini tablo tasarımına ekleyin. Daha sonra bunun form üzerinden girilmesini sağlayın. Web sitesi alanına [Linkleri sadece kayıtlı üyelerimiz görebilir.ForumTR üyesi olmak için tıklayınız] girin. Ardından üzerine tıklayarak ona ulaşmaya çalışın. .Sipariş formunun alt başlık kısmına adet toplamı alın. . Sipariş formunda birim fiyat ve tutarın görünmesini sağlayın. . Sipariş formunun alt başlık kısmına tutar toplamı alın. Ayrıca altına KDV'li toplamı hesaplattırın. . Sipariş formunda taşıyıcı firma ve siparişi alan müşterinin combo'larla seçilmesini sağlayın. NOT: Veri girişi için form üzerinde metin kutuları (text box) ve gridler kullanın. Uygulamanın Çalıştırılması: Program yazım aşamalarında F5 tuşu ile program test edilir ve çalıştırılır. Ardından paketleme sihirbazı ile programın kullanıcı bilgisayarına yüklenir hale getirilmesi gerekir. En Basit Olarak Access Veritabanı Kullanımı Yazdığımız program çalışırken bazı bilgileri saklamak ve ileride kullanmak isteriz. Sözkonusu bilgiler çeşit olarak az ve kısa kısa ise bir text dosyası ile (Random Access DataBase) problemimizi çözebiliriz. Fakat saklamak isteğimiz biraz daha karışıksa ve bilgileri tablolar şeklinde düzenlemeye ihtiyaç duyuyorsak text dosyaları yeterli olmayacaktır. Bu durumda en iyi çözüm MsAccess değildir; fakat en çok tercih edilendir. Access ile Veri tabanı kullanımını örneklerden incelerseniz birçok farklı metotla karşılaşacaksınız. Aşağıda bence olabilecek en basit uygulamayı bulacaksınız. Faydalı olması dileğiyle... ---------------------------------------------- ilk olarak Access'de bir veri tabanı oluşturun. Burada adını "MB2004.mdb" koyalım. Bu veri tabanı içerisinde tablolar oluşturun ve bilgilerinize uygun alanlar tanımlayın. kabaca bir access veri tabanı örneği verelim: dosya ismi : "MB2004.mdb" tablo 1 : "Tel_List" tablo 1 tanımları : "Ad" - metin(15 karakter) "SoyAd" - metin(25 karakter) "EvTel" - metin(10 karakter) "CepTel"- metin(10 karakter) "IsTel" - metin(10 karakter) "Ilce" - metin(15 karakter) "DTarih"- tarih(basit form) ---------------------------------------------- 'örneklerde bahsedilmesi unutulanı en başta söyleyelim; hazırlayacağınız Access dosyaları için MsOffice 2000 kullanacaksanız "Microsoft DAO 3.6 Object Library" ; MsOffice 97 kullanacaksanız "Microsoft DAO 3.51 Object Library" Referans'larını projeye dahil etmeyi unutmayın... 'veri tabanına ihtiyaç duyulan yerde ilk olarak tanımlanacak 'değişken isimleri Dim dbProje As Database Dim rsTelefon As Recordset 'değişkenlere atamalar --> farklı kullanımlar aşağıda verildi. '"App.Path" uygulamamızın olduğu dizini ifade eder. Set dbProje = OpenDatabase(App.Path & "\Projeler\MB2004.mdb") Set rsTelefon = dbProje.OpenRecordset("select * from Tel_List") ---------------------------------------------- 'Tel_List tablosundan ismi "Mehmet" olan kişinin Soyadını bulalım. Dim SAd as String 'veri tabanında alacağımız bilgiyi koyacağımız değişken rsTelefon.MoveFirst 'tablonun ilk kaydına git Do Until rsTelefon .EOF 'tablo sonuna kadar devam edecek If rsTelefon!Ad = "Mehmet" Then 'tablonun "Ad" sütununa bak SAd = rsTelefon!SoyAd 'aranan "Ad" bulundu - ilgili "SoyAd"ı al GoTo dvm1 End If rsTelefon.MoveNext 'tabloda bir satır ilerle Loop dvm1: ---------------------------------------------- 'Tel_List tablosuna yeni kayıt yapalım rsTelefon.AddNew 'burada bir formdaki bilgileri aktarabilirsiniz. rsTelefon!Ad = "Mehmet" rsTelefon!SoyAd = "Bakkaloğlu" ' = Text3.Text olabilirdi. rsTelefon!EvTel = "2167771777" rsTelefon!CepTel = "5399991999" rsTelefon!IsTel = "2165551555" rsTelefon!Ilce = "istanbul" rsTelefon!DTarih = "01.01.1974" rsTelefon.Update ---------------------------------------------- 'Tel_List tablosundaki bir kayıtta değişiklik yapalım '"Mehmet Bakkaloğlu" isimli kullanıcının CepTel kaydını değiştirelim. rsTelefon.MoveFirst Do Until rsTelefon.EOF If rsTelefon!Ad = "Mehmet" And rsTelefon!SoyAd = "Bakkaloğlu" Then rsTelefon.Edit 'değişiklik için aç rsTelefon!CepTel = "5398881888"rsTelefon.Update 'değişikliklerden sonra kayıt yapılacak GoTo dvm2 End If rsTelefon.MoveNext Loop dvm2: ---------------------------------------------- 'Tel_List tablosundaki "Ali Veli" isimli kaydı silelim rsTelefon.MoveFirst Do Until rsTelefon.EOF If rsTelefon!Ad = "Ali" And rsTelefon!SoyAd = "Veli" Then rsTelefon.Delete 'sildikten sonra update yapılmaz End If rsTelefon.MoveNext Loop ---------------------------------------------- 'veri tabanı kullanımı bitince kapatılır. rsTelefon.Close dbProje.Close ---------------------------------------------- 'Access veri tabanını yaptığımız programla birlikte verdiğimizde kullanıcı tarafından Access kullanılarak doğrudan açılmasını engellemek istiyorsak şifreleyebiliriz. Bunun için Access içerisinde Araçlar-Güvenlik adımından veri tabanımıza şifre koymalıyız. program içerisinde de veri tabanına her ulaşmak istediğimizde tanımlamamızı şifreyi de belirterek yapmalıyız. Örnek: Set dbProje = OpenDatabase(App.Path & "\Projeler\MB2004.mdb", False, False, "MS Access; PWD=PIC16F877A") 'Kullanıcının Access veri tabanımızı tanımasını istemiyorsak artı olarak uzantısını da değiştirerek kullanabiliriz. Access'de hazırladığımız veri tabanının uzantısı ".mdb" dir. Örnek olarak biz bunu ".mbm" yaparak kullanabiliriz. Bu durumda tanımlamayı şöyle yapmalıyız. Set dbProje = OpenDatabase(App.Path & "\Projeler\MB2004.mbm", False, False, "MS Access; PWD=PIC16F877A") En Basit Olarak Random Access Veritabanı Kullanımı Yazdığımız programda birtakım bilgileri veri tabanında saklamak istediğimizde karşımıza birçok seçenek çıkacaktır.Bu seçenekler arasında en basit veri tabanı burada anlatılan text tabanlı yapıdır. Notepad ile kolayca açılıp okunabilecek, işlenmesi kolay kapladığı alan küçük bir veri tabanı. Ayrıca herhangi bir Referansa ihtiyacınız olmayacağından programınıza bir yük getirmeyecektir. Aşağıdaki bilgileri bir program olarak yazıp test etmek için küçük bir form oluşturun. Formun üzerine 5 adet text ve 2 adet command nesnesi yerleştirin. Form_Load program parçacığına "DosyaBelirle" ; Commandların birine "Kaydet" diğerine de "KayitGetir(2)" yazın(2-->kaçıncı kayıdı getireceği). Oluşturacağınız bir modüle de aşağıdaki kodları yazarsanız step step inceleme şansınız da olacaktır. Random Access Veri Tabanı anlatımına kaydedilecek verilerin cinslerini ve uzunluklarını tanımlayarak başlayalım. -------------------------------------------------------------------------------------------------------------- Type Kayit_Katari 'bloklar şeklinde kaydedeceğimiz verilerin Bilgi1 As String * 20 'açılımını vermemiz gerekiyor. Bilgi2 As String * 30 'bunun için "Type" kullanılır. Bilgi3 As String * 40 Bilgi4 As String * 50 Bilgi5 As String * 100 End Type Dim Veriler As Kayit_Katari 'tanımlı tipte kullancağımız değişken Dim Dosya_No As Integer 'kullanacağımız dosyaya sistemin vereceği no Dim Veriler_Uzunluk As Long 'girilecek veri bloklarında paket uzunluğu Dim KayitSiraNo As Long 'yapılacak kaydın sıra numarası Dim MevcutKayitSayisi As Long 'dosyada kaç kayıt var Dim Dosyamiz As String 'çalışılan text dosyası ---------------------------------------------------------------------------------------------------------------- Sub DosyaBelirle() 'ilk olarak verileri kaydedeceğimiz text dosyasının ismini ve adresini alıyoruz. On Error Resume Next 'hata durumunda devam Close #Dosya_No 'çalışmalarımızda kullanılacak dosya açıksa kapatılıyor - önlem 'çalışacağımız text dosyasına ait bilgileri alıyoruz. 'CommonDialogla ilgili daha detaylı bilgiyi '27.08.2004 tarihli bir makalede yazmıştım! Form1.CommonDialog1.DialogTitle = "Verileri yazacağımız metin dosyasını gösterin.." Form1.CommonDialog1.Flags = cdlOFNOverwritePrompt Or cdlOFNHideReadOnly Form1.CommonDialog1.Filter = "Dat Dosyası(*.dat)|*.dat|" 'başka bir uzantı da seçilebilir Form1.CommonDialog1.FilterIndex = 0 Form1.CommonDialog1.ShowSave 'CommonDialog'un açtığı text dosyanın adını çalışacağımız değişkene atıyoruz Dosyamiz = Form1.CommonDialog1.FileName If Dosyamiz = "" Then 'dosya seçilmeden iptalle çıkıldıysa kontrol Exit Sub Else Dosya_No = FreeFile 'Oluşturacağımız dosya için sistemden numara alıyoruz Veriler_Uzunluk = Len(Veriler) 'dosyamız için blok uzunluğunu belirliyoruz 'Kullanıcının verdiği isimle text dosya oluşturuyoruz. Open Dosyamiz For Random As Dosya_No Len = Veriler_Uzunluk End If End Sub ---------------------------------------------------------------------------------------------------------------- Sub Kaydet() On Error Resume Next 'Çalışacağımız dosyaya aktaracağımız bilgileri Type ile tanımladığımız 'değişkenlere yüklüyoruz. Veriler.Bilgi1 = Form1.Text1.Text Veriler.Bilgi2 = Form1.Text2.Text Veriler.Bilgi3 = Form1.Text3.Text Veriler.Bilgi4 = Form1.Text4.Text Veriler.Bilgi5 = Form1.Text5.Text 'Elimizdeki verileri oluşturduğum text dosyasına "Put" komutu ile yazacağız 'Bu komutun kalıbını şu şekilde verebiliriz : 'Put kaydın yapılacağı dosyaya sistemin verdiği numara, kayıt sıra numarası, kaydedilecek bilgi bloğu ismi 'Mevcut dosyadaki kayıt sayısını bularak yapacağımız kaydın sırasını belirleriz 'bunun için dosya boyutunu bir kayıt boyutuna böleriz. MevcutKayitSayisi = FileLen(Dosyamiz) / Veriler_Uzunluk KayitSiraNo = MevcutKayitSayisi + 1 've sonunde dosyaya kaydediyoruz. Put #Dosya_No, KayitSiraNo, Veriler End Sub ---------------------------------------------------------------------------------------------------------------- Sub KayitGetir(KayitSirasi As Integer) 'çalıştığımız dosyadan veri okumak yazmak kadar kolay 'okuma işini "Get" komutu ile yapıyoruz. kalıbı "put" komutu ile aynı Get #Dosya_No, KayitSirasi, Veriler 'dosyadan aldığımız verileri forma aktarıyoruz. Form1.Text1.Text = Veriler.Bilgi1 Form1.Text2.Text = Veriler.Bilgi2 Form1.Text3.Text = Veriler.Bilgi3 Form1.Text4.Text = Veriler.Bilgi4 Form1.Text5.Text = Veriler.Bilgi5 End Sub Visual Basic ile Veritabanına ilk Adımlar Bu örneğimiz Visual Basic ile veritabanlarının kullanımı hakkında size az çok bilgi verir umarım. Örneğimizi uygulamak için Visual Basic ile örnek olarak gelen BIBLIO.MDB adlı veritabanına ihtiyacınız var. (Umarım bu dosyanın hiç bir işe yaramadığını düşünüp silmemişsinizdir.) Hazırsanız veritabanı programınızı oluşturacak adımları uygulamaya başlayabiliriz. Adım - 1 Öncelikle alet kutucuğundan "veri" kontrolünü seçerek formunuzun üzerinde istediğiniz büyüklüğe getirin. Bu kontrolü veritabanı içinde hareket etmek için kullanacağız. Örnek için formunuzun son haline bakabilirsiniz. Adım - 2 Data 1 kontrolünün Properties kutucuğunu aktif hale getirin ve buradan Connect seçeneğini Access olacak biçimde değiştirin. Adım - 3 Yine Data 1 kontrolünün Properties kutucuğu aktifken, kontrolün DatabaseName seçeneğini kullanarak istediğiniz veritabanını seçin. Biz bu örneğimizde BIBLIO.MDB dosyasını kullanacağız, bu yüzden seçeneği bu dosyayı görecek biçimde ayarlayın. Not: Eğer diğer programlarla ilişkilerden dolayı, bu kontrole, tasarım aşamasında istediğiniz veritabanını atayamıyorsanız DatabaseName özelliğini, programınızın çalışma aşamasında değiştirip program çalışırken istediğiniz veritabanı dosyasını seçebilirsiniz. Adım - 4 Data 1 kontrolünüzün RecordSource seçeneğini, veri tabanının istediğiniz tablosuna erişim sağlamak için kullanın. Eğer daha önceden DatabaseName seçeneğine herhangi bir veritabanı dosyası atadıysanız. RecordSource seçeneğine tıkladığınızda karşınıza seçtiğiniz veritabanı dosyasında kullanabileceğiniz bölümler gelecektir. Biz bu örneğimizde "Titles" bölümünü kullanacağız. Adım - 5 Formunuzun üzerine, veritabanı dosyasında seçtiğiniz alanları görüntüleyebilmek için istediğiniz sayıda metin kutusu yerleştirin. Biz örneğimizde 3 farklı alan kullanacağımızdan formumuza 3 adet metin kutusu yerleştirdik. Veritabanımızı görüntülemek için kullanacağınız kontroller metin kutularıyla sınırlı değil. Resim kutularını, ızgara kontrolünü, etiket kontrolünü ve bunun gibi birçok kontrolü bu iş için kullanabilirsiniz. Not: Yerleştirdiğiniz metin kutularını kullanarak veritabanı dosyasında kalıcı değişiklikler yapabilirsiniz. Adım - 6 Text1 kontrolünün Özellikler kutusunu aktif hale getirerek DataSource seçeneğini "Data1"i gösterecek biçimde değiştirin. Adım - 7 Metin kutularının yanlarında seçtiğiniz alanlara uygun etiketler yerleştirin. Adım - 8 "Text1" metin kutusunun görüntüleyeceği veritabanı alanını DataField seçeneğini kullanarak değiştirin. Bu işlemi her bir metin kutusu için gerçekleştirin ve her birinin farklı alanları göstermesini sağlayın. Adım - 9 Son olarak programa bir çıkış tuşu ekleyin ve programı çalıştırın. Ok tuşlarını kullanarak veritabanı içinde gezinebilir, metin kutularının alanlarını değiştirerek, diğer alanlardaki verileri görüntüleyebilirsiniz. Visual Basic ile Access Tablosu Oluşturmak Dim Tablo As New TableDef Set dosya = CreateDatabase("c:\deneme.mdb", dbLangTurkish) With Tablo .Name = "Adresler" .Fields.Append .CreateField("ADI", dbText, 20) .Fields.Append .CreateField("SOYADI", dbText, 20) .Fields.Append .CreateField("ADRES", dbText, 50) .Fields.Append .CreateField("TEL", dbText, 20) End With dosya.TableDefs.Append Tablo Set dosya = Nothing Set Tablo = Nothing Veri Tabanımızı Kendimiz Oluşturalım Bu yazı dizisinde dao ile baştan sona bir veritabanı oluşturacağız.. Özellikle ticari program yapan arkadaşların işine cok yarayacaktır. İlk adım boş bir veritabanı oluşturmak ; Bunu yapabilmeniz için ADO.Library'i programınıza import etmelisiniz. Detayına girmeyeceğim bu işe merak sarmış biri zaten nasıl yapılacağını biliyordur. Kodu yazalım... Private Sub dbolustur(dbyolu As String) Dim ws As Workspace Set ws = DBEngine.Workspaces(0) If Dir(dbyolu) <> "" Then If MsgBox("Belirtilen yolda Database Var" + vbCrLf + "Üzerine Yazılsınmı?", vbYesNo, "Dikkat") = vbYes Then Kill (dbyolu) Else Set ws = Nothing Exit Sub End If End If Set db = ws.CreateDatabase(dbyolu, dbLangGeneral, dbEncrypt) Set db = Nothing Set ws = Nothing End Sub Kodu deneyecek olursak ; Private Sub Command1_Click() dbolustur "c:\den.mdb" End Sub Hepsi bu kadar; Simdi c surucusunun altında bir Access mdb var. Hemde sıfır kilometre ama 64 kb :)) Buraya kadar ne yaptık bakacak olursak ; İlk önce workspace objesini declare ettik sonrada set ettik. Sonrasında verilen yolda aynı adda database varmı yokmu onu kontrol ettik. Eğer varsa bir msgbox'la kullanıcı onayı istedik. Evet yanıtını alırsak var olan database'i ucurarak yenisini oluşturduk. Eğer yanıt hayırsa olduğumuz yerden Kaçtık. Ama çıkarken Kapıyı Kapatmayı unutmuyoruz. Rem belası işte.. Sonraki adımdada bir tablo oluşturalım. Tablosuz database ne işe yarar oyle değilmi ; Private Sub tbolustur() Dim db As DAO.Database Dim tablo As DAO.TableDef Set db = OpenDatabase("c:\den.mdb") Set tablo = db.CreateTableDef("deneme") With tablo .Fields.Append .CreateField("deneme", 1, 10) End With db.TableDefs.Append tablo Set tablo = Nothing Set db = Nothing End Sub yukarıdaki kodda neler yaptık ? Database'i açtık , tablo objesini set ettik , içine deneme adında bir alan ekledik, (Alan eklenmese tablo olusturulamaz bilesiniz.) tabledef nesnesine tablo objesini yedirdik ve tablomuz meydana geldi. Şimdi c nin aldındaki den.mdb nin içerisinde deneme adında bir tablo var. Visual Basic ‘de Kullanılan SQL Cümleleri Bir dosyadaki kayıtları eğer ki bir kritere göre listelemek istiyorsak en mantıklı olan, önce dosyanızı bir SQL sorgusu ile süzmek, daha sonra listeleme yaptırmaktır. Aksi halde zaman kaybınız mükemmel derecede olacaktır. Örnek cümleler ve anlatımlar aşağıdadır. Mantıklı olan da zaten önce süzmektir. Bir dosyadaki "Ahmet" isimli kayıtları arattırırken tutu ta (atıyorum) 15.000 kaydı baştan sona taratıp "if tablo.fields("ad")="Ahmet" then falan filan işleri yap endif gibi bir döngü kurmak hem çok acemice olur hem de dediğim gibi zaman kaybettirir. basit bir cümle işinizi kolaylaştırır ve inanamayacağınız kadar hız elde edersiniz. yukardaki işlemi aşağıdaki gibi yapmanız faydanızadır sorgu="select * from tablo where ad="Ahmet"" gibi. SELECT : Seçim SELECT * FROM kisiler SELECT adi, soyadi, sicilno, adres FROM kisiler FROM : Kullanılacak tabloyu belirtir WHERE : Sorgulamada kısıtlama ifadesi SELECT * FROM kisiler WHERE ad = “Ali” ‘ Textler tırnak çerisinde Mantıksal veriler TRUE - .T. , FALSE - .F. SELECT * FROM kisiler WHERE cinsiyet = .T. AND : Ve NOT : Değil OR : Veya SELECT * FROM kisiler WHERE yas > 10 AND cinsiyet =.T. SELECT * FROM orgenciler WHERE sınıf = 1 OR sınıf = 2 IN : İçinde SELECT * FROM kisiler WHERE adres IN ("ankara","istanbul") SELECT * FROM kisiler WHERE NOT adres IN ("ankara","istanbul") BETWEEN : Arasında SELECT * FROM kisiler WHERE yas BETWEEN 10 AND 15 LIKE : İçeren SELECT * FROM kisiler WHERE adres LIKE ‘* Kızılay *’ ORDER BY : Sıralama SELECT adi, soyadi FROM kisiler ORDER BY soyadi DESC : Küçükten büyüğe sırala (A-Z) ASC : Büyükten küçüğe sırala (Z-A) (DEFAULT) SELECT adi, soyadi FROM kişiler ORDER BY ad ASC,soyad DESC DISTINCT : Tekrarsız SELECT DISTINCT adi FROM kisiler DISTINCTROW : Tekrar eden satırlardan sadece birini seçer SELECT DISTINCTROW * FROM Tablo_Adı GROUP BY : Gruplama SELECT yas, AVG(maas) FROM kisiler GOUP BY yas DELETE : Sil DELETE FROM kisiler WHERE sicilno = 212 DELETE FROM kisiler WHERE maas IS NOT NULL INSERT : Ekle INTO : İçine VALUES : Değerler INSERT INTO kisiler (adi,sayadi,sicilno) VALUES('Veli', 'Koşan', 9) UPDATE : Güncelle SET : Uygula UPDATE kisiler SET kisiler.adi='Veli', kisiler.soyadi='Koşan' Where kisiler.Sicilno=9 SUM : Toplam SELECT SUM(maas) FROM kisiler AVG : Ortalama SELECT AVG(maas) FROM kisiler MAX : En büyük değer SELECT MAX (maas) FROM kisiler MIN : En düşük değer SELECT MIN(maas) FROM kisiler COUNT : Say SELECT COUNT(*) FROM kisiler SELECT COUNT(*) FROM kisiler WHERE yas > 16 SELECT COUNT(DISTINCT yas) FROM kisiler JOIN : Birleştirme SELECT * FROM kisiler,bölüm WHERE kisiler.sınıf = bölüm.sınıf SAVE TO TEMP : Tampon tablo oluşturur SELECT * FROM personel WHERE cins =.F. SAVE TO TEMP bayan KEEP : Kalıcı tablo oluşturur SELECT * FROM personel WHERE cins = .F. SAVE TO TEMP bayan KEEP Tablonun tüm alanlarını ve bütün kayıtlarını seçmek : “Select * from Tablo_Adı” Tablonun alan ve kayıtlarını belli kriterler göre seçmek : “Select alan1, alan2 from Tablo_Adı Where alan3 = kriter1” Like ile alan ve kayıt seçimi : Adres alanı içerisinde “Ankara” bulunan kayıtları seçmek.“Select * from tablo_adı where adres like ‘*Ankara*’ ” Küçükten büyüğe sıralı olarak seçmek : "Select * from kisiler order by kayıtno DESC" Veritabanındaki Değişiklikleri Bulmak Veri Tabanındaki Değişiklikleri Kaydetmek Kullanıcıyı Uyarmak 'İşte Aradığınız İpucu "Değişiklikleri Kaydetmek İstiyor musunuz?" 'Bu Algoritma İle Düzenle Butonunu Oradan Kaldırıp 'Diğer Populer programlar gibi "Değişiklikleri Kayıt edebilirsiniz" 'Açıklama 'Fonksion çalıştığı zaman Recordset nesnesinin Tuttuğu veriyi okur ve değişkenlere aktarır 'Daha sonra verinin değişip değişmediğini anlamak için recordset ile textbox ların içindeki 'Verileri karşılaştırır eşitlik sağlanırsa bir sonraki veriyi okur 'İçerik değişmiş ise msg verir. 'Unload Fonksiyonu için Private Sub Form_Unload(Cancel As Integer) adı = Data1.Recordset("Ismi") soy = Data1.Recordset("Soyadı") 'Textlerdeki veri ile datadaki veriler karşılaştırılır If ad = Text1.Text And soy = Text2.Text Then End Else Degisti=MsgBox ("Değişiklikleri Kaydetmek İstiyormusunuz?",35,"ForgeR") if Degisti=6 then 'Kayıt Düzenleme bölümü End if End Sub 'Veri Tabanında Gezinti İçin Private Sub İleri_Click() On Error GoTo gec adı = Data1.Recordset("Ismi") soy = Data1.Recordset("Soyadı") 'Textlerdeki veri ile datadaki veriler karşılaştırılır If ad = Text1.Text And soy = Text2.Text Then gec: a = Data1.Recordset On Error Resume Next On Error GoTo 5 Data1.Recordset.MoveNext If Data1.Recordset.EOF Then 5: MsgBox "Bu Veri Tabanındaki Son Kayıttır" 'Açıklama Burada Geri fonksiyonuna gitmesi gerekiyor 'Aksi olduğunda İleri butonuna İkincikez basıldığında datanesnesi 'boşa çıkar Geri_Click Else Text1 = Data1.Recordset("Ismi") Text2 = Data1.Recordset("Soyadı") End If Else Degisti=MsgBox ("Değişiklikleri Kaydetmek İstiyormusunuz?",35,"ForgeR") End If End Sub 2 Veri Tabanı Arasında Veri Transferi vt1.mdb içerisindeki tablo1 tablosunun 'adı, soyadı, telefon' alanlarını, vt2.mdb içerisindeki tablo2 tablosuna ekleyelim. Bunun için tablo2 de 'adı, soyadı, telefon' alanlarını koyabileceğimiz aynı tipli alanlar olmalıdır. Private Sub Command1_Click() Set cn = New ADODB.Connection cn.Open "PROVIDER=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=c:\vt1.mdb" strSQL = "INSERT INTO tablo1 (adı, soyadı, telefon) " & _ " tablo2 IN 'c:\vt2.mdb'" ' IN kelimesi ile farklı veri tabanı yolu gösterilir. cn.Execute strSQL End Sub Hedef veri tabanında tablo2 yoksa bunu kendimiz oluşturmamız gerekecektir. SQL yeniden yardımımıza koşuyor: Private Sub Command1_Click() Set cn = New ADODB.Connection cn.Open "PROVIDER=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=c:\vt2.mdb" strSQL = "CREATE TABLE tablo2 (adı TEXT(50), soyadı TEXT(50), telefon TEXT(10)); cn.Execute strSQL End Sub Visual Basic de Excel yada Access Bağlantısı Hazırladığınız bir uygulamaya excel yada accees veri tabanı bağlantısı yapmak istiyorsanız VB menüsünden Project -> References yolunu izleyin excel kutusunu veya accees kutusunu işaretleyin. kısaca VB menüsünden Project -> References yolunu dan istediğiniz bağlantıyı yapabilirsiniz.. Tek Tuşla Veritabanından Bilgi Almak Örneğin veritabanında bulunan 1.000.000 sayının sıralı olarak yeniden veritabanına yazılması bunu tek tuşla nasıl yaparız.? (formunuzda data nesnesi kullandığınızı varsayıyorum) (veritabanındaki alan adı "sayi" olsun) 'öncelikle veritabanındaki verileri okuyalım dim a(1000000) as array dim kayit,i as integer kayit = data1.recordset.recordcount for i = 1 to kayit a(i) = data1.recordset("sayi") data1.recordset.movenext next i 'daha sonra veritabanındaki kayıtları silelim data1.recordset.movefist for i = 1 to kayit data1.recordset.delete data1.recordset.update data1.recordset.movenext next i 'daha sonra sayiları küçükten büyüğe sıralayalım for i = 1 to kayit for j = 1 to kayit kucuk=a(j) if kucuk>a(j+1) then a(j) = a(j+1) a(j+1) = kucuk end if next j next i 'rakamları sıraladık şimdi sıra veritabanına girmekte for i = 1 to kayit data1.recordset.addnew data1.recordset("sayi") = a(i) data1.recordset.update next i Veritabanında Kayıtlı Bilgileri Combobox a Aktarmak Veritabanına bağlı uygulamalarda belirli bir alandaki kayıtları combobox a nasıl aktarabiliriz... Dim sayi, i As Integer Dim cevap If Data1.Recordset.RecordCount = 0 Then cevap = MsgBox("Listelenecek Kayıt Yok", 48) Combo1.Enabled = False Else Data1.Recordset.MoveLast sayi = Data1.Recordset.RecordCount Data1.Recordset.MoveFirst For i = 1 To sayi Combo1.AddItem Data1.Recordset.Fields("listelenecekkaydınadı") Data1.Recordset.MoveNext Next i Data1.Recordset.MoveFirst End If ********************************************** Burada kullandığımız kodları formun activate olayına yazarsak ve nesneleri birbiri ile tam ilişkilendirirsek formumuz yüklendiğinde önce veritabanındaki kayıtları gözden geçirecek ve okuduğu bilgileri kayıt sırasına göre combo içine alacak...Eğer kayıtlı bilgi yoksa bize listelecek verinin olmadığını söyleyecek ve combomuzu etkisiz duruma getirecek.... Ayrıca comboya veritabanındaki bilgilerin okuma biçiminde eklendiğini söylemek yerinde olur. Yani aynı listeyi data1 nesnesi ile yine oluşturursunuz ama combo üzerinden güncelleyemezsiniz... Ayrıca combomuzu bu işlemi yapmadan önce veritabanı ile ilişkilendirmemiz gerekli... bunun için öncelikle data1 nesnesi yerleştirmeli ve bunu veritabanımızla ilişkilendirmeliyiz. data1'in öncelikle databasename kısmından dosyamızı bulacağız... ve bu nesne için bir kayıt/okuma yolu vereceğiz. bunun için data1 nesnesi özelliklerinden recordsource kısmında veri tabanımızdaki kayıtlı olan tablelardan birini seçeceğiz... ve yine combomuzu da data1 nesnesine bağlayacağız... bunun için datasource=data1, datafiled="istediğimizalan" şeklinde ilişkilendirme işimizi görür. Oracle Veri Tabanına Bağlantı Visual Basic de Oracle veri tabanı kullanarak da uygulama yapa biliriz bunun için OLE DB provider dan ORACLE seçmek yeterli ADO ile Oracle veri tabanına baglantı kura bilmek için OLE DB provider seçin veri tabanın sunucu ismini ve veri tabanına erişime yetkili olan bir nesneyi seçip yaparsak oracle veri tabanına baglantı yapıla bilinir aşağıdaki kod buna güze bir örnektir. Örnek: İnstance Name = "NETTCP30.WORLD" User Name = system Pwd = pass gServer = "NETTCP30.WORLD" gBagla = "Provider=MSDAORA.1;Password=pass;User ID=system;Data Source=NETTCP30.WORLD;Persist Security Info=True" Set gDosya = New ADODB.Connection gDosya.Open gBagla Set gSorgu = New ADODB.Recordset Set gSorgu1 = New ADODB.Recordset gSQL = "SELECT * FROM SAM2005.TABLOSAMSERITMP WHERE DURUM='A'" gSorgu.Open gSQL, gDosya, adOpenStatic, adLockReadOnly, -1 gSQL = "SELECT * FROM SAM2005.TABLOSAMSERITMP WHERE DURUM='A'" gSorgu1.Open gSQL, gDosya, adOpenStatic, adLockReadOnly, -1 Unload frmlogo frmSeri.Show Access Yerine DBASE 5,0 (DBF) Veritabanı Kullanımı Özellikle veri tabanı şişmeleri ve bin kayıttan sonra bozulduğu söylentileri (ne kadar doğruysa) beni ister istemez Access veri tabanından soğuttu. Bende yeni arayışlara girdim. Ben örnek olarak DBase 5,0 deneyelim derim. Kullanım açısından aynen Access’e benzediği için veri tabanı kullanımını az çok bilen bir kişi hiç zorlanmadan DBase kullanımına geçebilir. Sadece Data (Data Access Object – DAO Bağlantı Nesnesi) nesnesinin ayarlarında birkaç değişiklik yaparak DBase kullanımına geçilebilir. Çok fazla detaya girmeyeceğim. Sadece temel bağlantı kurulumu ve kayıt işlemlerini anlatacağım. Veri Tabanı Oluşturma: Öncelikle Visual Data Manager açarak; File > New > DBAse > 5.0 yolundan bir dizin belirterek veri tabanımızı oluşturuyoruz. Dizin belirlemek için açılan pencereye örneğin “c:\Database” şeklinde dizin belirtiyoruz. Dizinin var olup olmaması sorun değil. Eğer böyle bir dizin yoksa oluşturuluyor. Daha sonra aynen Access veri tabanı oluşturur gibi “New Table” seçeneğinden tablo oluşturmaya geçiyoruz. Tablo Adına “Bilgi” koyuyoruz. Alt veri kısmı (yani Fields) olarak da “Adi” ve “Soyadi” kısımlarını oluşturuyoruz. Tablo adını ve alt veri kısımlarını belirledikten sonra “Build Table” seçeneğinden tablomuzu tamamlıyoruz. Artık veri tabanımız hazır hale geldi… Bağlantı Kurmak: Formumuza bir adet data nesnesi, iki adet text kutusu, iki adet label, iki adet buton ekliyoruz.Label1’in caption özelliğini “Adı”, label2’nin caption özelliğini “Soyadı” olarak belirliyoruz.Buton1’in caption özelliğini “Kaydet”, buton2’nin caption özelliğini “Çıkış” olarak belirledikten sonra Data nesnesinin “Connect” özelliğini “dBase 5.0;” olarak belirleyip “Databasename” özelliğinden oluşturduğumuz veri tabanını seçiyoruz.”RecordSource” özelliğinin tablo adımız olan “Bilgi” olmasına dikkat ediyoruz. Daha sonra text kutularını data nesnesine bağlıyoruz. Bunun için text kutularının “DataSource” özelliğini “Data1” olarak belirliyoruz.Text1’in “DataField” özelliğini “Adi”, Text2’nin “DataField” özelliğini “Soyadi” olarak belirliyoruz. Böylelikle bağlantıyı sağlamış olduk. Artık bir dbf veri tabanına bağlantımız var. Eğer veri tabanında kayıt varsa Data nesnesinden kontrol edebiliriz. Kayıt Girmek: Veri tabanımıza kayıt girmek istediğimizde ise aynen Access’te olduğu gibi şu kod işimizi görecektir; Private Sub Command1_Click() Data1.RecordSet.AddNew Data1.RecordSet.Update End Sub Diğer işlemler için aynen Access’te kullandığımız yöntemleri kullanıyoruz. Sonraki kayıt için; Data1.RecordSet.MoveNext Önceki kayıt için; Data1.RecordSet.MovePrevious ADODB Kullanımı ve Püf Noktaları Connection Nesnesi: Ado'yu kullana bilmek için öncelikli olarak "Project-References" menüsünden "Microsoft Data Objects 2.0" veya "2.1-2.5-2.6-2.7-2.8" dan birtanesi tanımlanır. Dim Conn As New ADODB.Connection ' Bağlantımızı tanımladık. Eğer Access kullanacak ise "MS jet" ile bağlamamız Gerekir. Conn.ConnectionString="Provider=Microsoft.Jet.OLED B.4.0; Data Source=DataBaseAdi" Eğer ODBC kullanacak isek Conn.ConnectionString="DNS(DataBaseAdi)" Eğer MySQL kullanacak isek Conn.ConnectionString="DRIVER={MySQL ODBC 3.51 Driver}; SERVER=" & _SunucuAdı& "; DATABASE=" & DataBaseAdi& "; UID=" & KullaniciAdi & _";PWD=" & Sifre Eğer MSSQL kullanacak isek Conn.ConnectionString="DRIVER={SQL Server}; Server=" & SunucuAdi & "; " & _ "Database=" & DataBaseAdi & ";UID=" & KullaniciAdi & ";PWD=" & Sifre & ";" Burada SunucuAdı 'bilgisayarımız yada bağlanacagımız Sunucunun adı sucuya bağlanmacak isek "localhost" yazılabilir DataBaseAdi ' kullanacağımız database in adı eğer verilmedi ise boş olmalı KullanıcıAdı 'database verdiğimiz kullanıcı adı eğer verilmedi ise boş olmalı Sifre 'database verdiğimiz sifre eğer verilmedi ise boş olmalı Bağlanmızın ConnectionString değerini girdikten sonra geriye bağlantı yap demek kaldı bunuda aşağıdaki gibi yaparız. Conn.Open İpucu: Eğer bağlantıyı kapatmak istiyorsak açık olup olmadığını denetleyip kapatmalıyız. if Conn.State<>adStateClosed then Conn.Close end if Bağlantımızı Kuduğumuza göre Recordset nesnesine geçebiliriz. Recordset Nesnesi Recordset nesnesi Veritabanındaki kayıtları yönetmek için kullanılır. Dim RS as new ADODB.Recordset Rebord Nesnesinin başlıca komutları .Open 'belirtilen SQL konumutunu işletir yada kaydı açar .MoveNext 'bir kayıt ileri git .MoveMovePrevious 'bir kayıt geri git .MoveLast 'son kayıta git .MoveFirst 'ilk kayıta git .Move 'kayıta git .EOF 'bayıt başı .BOF 'kayıt sonu .Recordcount 'kayıt sayısını verir .Addnew 'yeni kayıt ekle .Update 'değişiklikleri kaydet .Delete 'üzerinde bulunulan kayıtı sil .Close 'kayıt nesnesini kapat Hemen bir kaç örnek verelim. Örnek 1: Şimdi Personel data.mdb database'ine bağlanıp buradaki personel tablosundaki isimlerini List1'in içine ekleyelim.. Dim Conn As New ADODB.Connection Conn.ConnectionString="Provider=Microsoft.Jet.OLED B.4.0; Data Source=C:\data.mdb" Conn.Open Dim RS as new ADODB.Recordset Rs.Open "Select * from personel",Conn,adOpenKeyset ,adLockOptimistic Do until Rs.Eof List1.AddItem Rs!Adi & " " & Rs!Soyadi Rs.MoveNext Loop Rs.Close Örnek 2: Şimdide data.mdb database'ine bağlanıp buradaki personel tablosuna yeni bir kayıt ekleyelim.. Dim Conn As New ADODB.Connection Conn.ConnectionString="Provider=Microsoft.Jet.OLED B.4.0; Data Source=C:\data.mdb" Conn.Open Dim RS as new ADODB.Recordset Rs.Open "Select * from personel",Conn,adOpenKeyset ,adLockOptimistic Rs.AddNew 'Kayıt Ekle Rs!Adi="mehmet" 'Fieldlere bilgileri yaz Rs!Soyadi="yaradanakul" 'Fieldlere bilgileri yaz Rs.Update 'Girilen bilgileri kaydet Rs.Close 'Kayıt nesnesini kapat İpucu: Yada bu işi Connection nesnesinede yaptırabiliriz hemde çok daha hızlı bir şekilde nasıl derseniz Conn.Execute "SQL deyimi" komutu ile Conn.Execute "insert into personel(adi,soyadi) values('mehmet','yaradanakul')" işte hepsi bu ne Recorset açtık nede dene kod yazdık. Örnek 3: Şimdide data.mdb database'ine bağlanıp buradaki personel tablosundan kayıt silelim. Dim Conn As New ADODB.Connection Conn.ConnectionString="Provider=Microsoft.Jet.OLED B.4.0; Data Source=C:\data.mdb" Conn.Open Dim RS as new ADODB.Recordset Rs.Open "Select * from personel Where Adi='" & "mehmet" &"'",Conn,adOpenKeyset &_ ,adLockOptimistic Rs.Delete Rs.Close İpucu: Bu işlemide Connection nesnesine yaptırabiliriz Conn.Execute "delete from personel where Adi='mehmet'" ve hatta şöyle dersek yaptığımız işlemden kaç kaydın etkilendiğinide öğrenebiliriz.. Conn.Execute "delete from personel where BolumNo="& 5 ,Sonuc Msgbox Sonuc &" kayıt silindi!" Şimdilik bukadar hatalarım var ise lütfen affedin. görüşmek üzere. (Fazla Kasmayın :) ) İRİS Bilgisayarlı Kontrol Sistemleri Boğazlıyan/Yozgat ADODC1 ile Veritabanı Bağlantısı 1. ADRESLER.MDB adında bir MS Access veritabanı yaratılır. 2. DSN yaratılır. Sistem DSN olarak yaratılırsa daha iyi olur. 3. Visual Basic ‘ten yeni bir proje yaratılır Project / Components menüsünden Microsoft ADO Data Control 6.0 ve Microsoft Data Grid Control Toolbox’a eklenir. Aşağıdaki gibi bir form oluşturulur. 4. Formdaki Adodc1’e sağ tıklanır ve özelliklere gelinir. 5. Sonra Build ve Microsoft OLE DB Provider for ODBC Drivers seçilir. İleri denir. Veri kaynaklarından ADRESLER (bizim yarattığımız DSN) seçilir. 6. Sonra bağlantı test edilir. 7. Visual Basic projesinde ADODC özelliklerinden RecordSource bölümüne gelinir. Ve Comman Type adCmdText seçilir. (adCmdText; geçerli bir SQL yada diğer arama deyimine gereksinim duyar. adCmdTable ise geçerli bir tablo adına gereksinim duyar.) 8. Data Grid özelliklerinden DataSource özelliğine Adodc1 yazılır. Programı çalıştırdığımızda şöyle bir çıktı alınır. 9. Bunlar ayrıca çalışma zamanında da düzenlenebilir. Bunun için ConnectionString, CommandType ve RecordSource özelliklerine gerekli bilgiler yazılır. With ADODC1 .ConnectionString=”ADRESLER” ‘Veri tabanına DSN bağlama .CommandType=adCmdText ‘Komut tipi .RecordSource=”Select * from ogrenciler” ‘İstenilen tablonun seçilmesi End With 10 . DSN oluşturmadan yani bir ODBS tanımlamadan bir veri kaynağına bağlanacağı zaman ConnectionString özelliği düzenlenir. With ADODC1 .ConnectionString=”driver=(SQL Server); server=(local);pwd=;uid=sa;database=ADRESLER” ‘Veri tabanına DSN bağlama .CommandType=adCmdText ‘Komut tipi .RecordSource=”ogrenciler” ‘İstenilen tablonun seçilmesi End With 11. JET / OLE DB Provider ile veri kaynağına aşağıdaki kodlarla bağlanılır. With ADODC1 .ConnectionString=”Provider=Microsoft.Jet.OLEDB.3. 51;DataSource=”&App.path&”\adresler.mdb” ‘Veri tabanına DSN bağlama .CommandType=adCmdText ‘Komut tipi .RecordSource=”SELECT [SIRA], [OKUL NO] FROM ogrenciler” ‘İstenilen tablonun seçilmesi End With 12. Eğer DSN ile tanımlamışsak Data Grid içerisinde verilerimiz otomatik görülecektir. Çünkü Data Grid DataSource özelliğini Adodc1 yapmıştık. Ancak bunu çalışma zamanında da yapabiliriz. Data Grid içerisine verilerin yerleşmesini sağlamak için aşağıdaki kodu ekleyeceğiz. Private sub Command1_Click() With ADODC1 .ConnectionString=”Provider=Microsoft.Jet.OLEDB.3. 51;DataSource=”&App.path&”\adresler.mdb” .CommandType=adCmdText .RecordSource=”ogrenciler” End With Set DataGrid1.DataSource=ADODC1 End sub 13. Sorgu için de aşağıdaki kodu yazalım. Private Sub Command1_Click() 'SORGUYU YİNELE Adodc1.RecordSource = Text1.Text Adodc1.Refresh Set DataGrid1.DataSource = Adodc1 End Sub ADODB ile Veri Tabanındaki Tabloların Listesini Almak Private Sub Form_Load() Dim MyConn As New ADODB.Connection Dim MyRs As New ADODB.Recordset MyConn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Yedek\Veritabanları\MyVT.mdb;Persist Security Info=True" MyConn.Open Set MyRs = MyConn.OpenSchema(adSchemaTables) Do Until MyRs.EOF If Mid(MyRs(2), 1, 4) <> "MSys" Then List1.AddItem MyRs(2) End If MyRs.MoveNext Loop End Sub Veri Tabanını Kod İle Onarma Public Sub CompactDB(DBName As String) Dim jr As JRO.JetEngine Dim strOld As String, strNew As String Dim x As Integer Set jr = New JRO.JetEngine strOld = DBName x = InStrRev(strOld, "\") strNew = Left(strOld, x) strNew = strNew & "chngMe.mdb" ' Access 97 için Engine Type = 4 ' Access 2000 için Engine Type = 5 jr.CompactDatabase "Provider=Microsoft.Jet.OLEDB.4.0; Jet OLEDB:Database Password=q; Data Source=" & strOld, _ "Provider=Microsoft.Jet.OLEDB.4.0; Jet OLEDB:Database Password=q;Data Source=" & strNew & ";Jet OLEDB:Engine Type=5" Kill strOld DoEvents Name strNew As strOld Set jr = Nothing End Sub Access Veritabanlarında Güvenlik Eksikliği Benim bildiğim kadarıyla access te yaratılmış bir veri tabanı 100bin kayıta ulaşmadan çöküyor. Elbetteki güvenilecek bir sistem değil. Bi kere sözde bir password koruması var. Belli karakterlerle Xor lama işlemi yapılarak şifreniz mdb nin içine kaydediliyor. ve aşağıdaki kod bunu kırıyor Private Function AccessPassword(ByVal FileName As String) As String Dim MaxSize, NextChar, MyChar, SecretPos, TempPwd Dim secret(12) secret(0) = (&H86) secret(1) = (&HFB) secret(2) = (&HEC) secret(3) = (&H37) secret(4) = (&H5D) secret(5) = (&H44) secret(6) = (&H9C) secret(7) = (&HFA) secret(8) = (&HC6) secret(9) = (&H5E) secret(10) = (&H28) secret(11) = (&HE6) secret(12) = (&H13) SecretPos = 0 Open FileName For Input As #1 For NextChar = 67 To 79 Step 1 Seek #1, NextChar MyChar = Input(1, #1) TempPwd = TempPwd & Chr(Asc(MyChar) Xor secret(SecretPos)) SecretPos = SecretPos + 1 Next NextChar Close #1 AccessPassword = TempPwd txt_sifre.Text = AccessPassword End Function Access veri tabanları sürekli olarak bozuluyor ve sözüm ona bir onarma işlemi ile boyutu bilmem kaç katına çıkıyor. Kısacası hiçbir şekilde güvenli bir sistem değil. Güvenilir bir sistem de değil. Access ile kendiniz için birşeyler yapın ama iş olarak kesinlikle bulaşmayın derim ben. SQL Server veya ORACLE kullanmak hala en iyi çözüm. Access ile basit bir login programı Öncelikle accessten bir veritabanı yaratıyoruz, bir tablo oluşturup Username ve Passwordalanları ekliyoruz, bir kullanıcı adı ve şifre belirledikten sonra VB projemizi açıyoruz ve iki tane form ekliyoruz. (Form1, Form2) Daha sonra Form1'e iki adet textbox, üç adet commandbuton ekliyoruz. Bunların hepsini yaptıysanız sıra geldi kodlara aşağıdaki kodları Form1'in kod bölümüne kopyala yapıştır yapın. Option Explicit Dim cn As New ADODB.Connection, strCNString As String Dim rs As New ADODB.Recordset Dim Txt As String Private Sub Command1_Click() On Error GoTo ErrHandler strCNString = "Data Source=" & App.Path & "\database.mdb" 'database adını yazın. cn.Provider = "Microsoft Jet 4.0 OLE DB Provider" cn.ConnectionString = strCNString cn.Properties("Jet OLEDB:Database Password") = "şifre" 'Database şifreli ise buraya şifreyi yazın cn.Open With rs .Open "Select * from Tablo1 where Username='" & txtname.Text & "' and Password='" & txtpass.Text & "'", cn, adOpenDynamic, adLockOptimistic If .EOF Then MsgBox "Lütfen Kullanıcı adı ve parolanızı kontrol ediniz!", vbOKOnly + vbCritical, "Security Login" txtname.Text = "" txtpass.Text = "" txtname.SetFocus cn.Close Else Txt = "" & " " & UCase$(txtname.Text) & "" MsgBox "HOŞGELDİN!!!" & Txt, vbOKOnly + vbExclamation, "Giriş" cn.Close Unload Me Form2.Show End If End With Exit Sub ErrHandler: MsgBox Err.Description, vbCritical, "Giriş" cn.Close End Sub Private Sub Command3_Click() Unload Me End Sub Private Sub Command2_Click() On Error Resume Next If Text1.Text = "" Then GoTo message strCNString = "Data Source=" & App.Path & "\database.mdb" 'database adını yazın cn.Provider = "Microsoft Jet 4.0 OLE DB Provider" cn.ConnectionString = strCNString cn.Properties("Jet OLEDB:Database Password") = "şifre" 'Database şifresi varsa cn.Open rs.Open "Select * from Tablo1", cn, adOpenDynamic, adLockOptimistic rs.AddNew rs(0) = Text1.Text rs(1) = Text2.Text rs.Save cn.Close rs.Close MsgBox "Kullanıcı adı ve şifre yaratıldı.", vbInformation, "Onaylama" Exit Sub message: MsgBox "Kullanıcı adı ve şifre yazmalısınız.", vbCritical, "Hata" End Sub Private Sub Form_Load() cmdRegister.Enabled = False End Sub Private Sub Text2_Change() cmdRegister.Enabled = True End Sub Çeşitli kaynaklardan yararlanılarak tarafımca düzenlenmiştir.Umarım sizlerinde işine yarar bir döküman olur..Yazılımcı olmama rağmen vermem gereken bir ödev konusuydu kendileri :) |
|
|
|
|
|
#2 |
|
Eski Üye
![]() ![]() ![]() Giriş Tarihi: 27-10-2005
Yer: yurt Türkiye...
Mesajlar: 712
Rep Puanı: 2667482
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]()
|
Dostum saolasın devamını bekliyoruz.Başarılarınla bizi aydınlatıyorsun her zaman eywallah.Hemen dokuman bolumune atıyorum
|
|
|
|
|
|
#3 |
|
● 100 Yaşında Mutlu Ol ●
![]() ![]() ![]() Giriş Tarihi: 18-05-2005
Yer: OBSCURE
Mesajlar: 3,030
Rep Puanı: 1549603
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]()
|
musti yapma dostum alttada belirttiğim gibi ve bildiğin gibi bi ödev içindi bu döküman..
bulduğum buluşturduğum bu kadar walla ![]() dökümanların arasına girecek kalitedeyse ne mutlu bana
|
|
|
|
|
|
#4 |
|
Eski Üye
![]() ![]() ![]() Giriş Tarihi: 27-10-2005
Yer: yurt Türkiye...
Mesajlar: 712
Rep Puanı: 2667482
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]()
|
Ne demek dostum her programlama konusu ve ilgimi çeken her konu benim için değer kaydeder bunlardan biriside bu ellerine sağlık ben zaten senden istemiştim hatırlarsan;emek harcamışsınya o yeter
|
|
|
|
|
|
#5 |
|
Yabancı
![]() Giriş Tarihi: 15-03-2007
Yaş: 26
Mesajlar: 4
Rep Puanı: 2375
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]()
|
çok güzel..ellerine sağlık..baya bi işe yaradı..özellikle veri tabanına bilgi kaydetme..
|
|
|
|
![]() |
| Bu konunun kısa yolunu aşağıdaki sitelere ekleyebilirsiniz |
| Konu Araçları | |
|
|
|
ForumTR Servisleri: ForumTR Video - ForumTR Haber - ForumTR Oyun - ForumTR Chat - ForumTR Mail - ForumTR IRC
Vize İşlemi | Haberler | Okul Arkadaşım Sitemiz bir forum sitesi
olduğu için kullanıcılar her türlü görüşlerini önceden onay olmadan anında
siteye yazabilmektedir. |