![]() | |
| | ||
![]() |
| | Seçenekler |
| | #1 |
| *** İlk önce bir Access veri tabanı oluşturalım. Adı veri.mdb olsun. *** İçerisinde kayit adında bir tablo oluşturalım. *** Tabloya 4 değişken gireceğiz. id Otomatik Metin(ve birincil anahtar) adi Metin soyadi Metin telefon Metin *** Şimdi açıklamaları yapalım: id : Neden otomatik metin ve birincil anahtar; Çünkü biz bu kayıda karışmayacağız. Her yeni kayıt yapıldığında ACCESS otomatik olarak buraya bir rakam atayacak ve birincil anahtar olduğu için aynı numaraya sahip bir başka kayıt olmayacak. Bu numara bize silme ve düzeltme işlemlerinde yarayacak. adi, soyadi, telefon : Neden Metin olduğu ortada sanırım. Sayısal bir işlem yapmayacağız. *** Çalışma alanımız C:\Belgelerim\ilksql klasörü olsun. Ve veri tabanımızı buraya koyalım. *** Kayıt alanımızda şunlar kayıtlı olsun kayit id adi soyadi telefon 1 Şevket Bulamaz 05355555555 2 Özge Gölbaşı 05352552525 3 Çağrı Solakoğlu 05354212121 4 Sadık Bulamaz 05423454545 5 Mediha Bulamaz 05558898998 6 Vbturk NoktaNet 05455617181 *** Şimdi kodlarımızı yapalım. Formumuza bir listbox ekleyelim. Adı listbox1. Form load olayına şunu yazalım. Private Sub Form_Load() On Local Error GoTo hata ‘program içerisinde hata olduğunda hata etiketine gönderiyoruz. Set baglanti = New ADODB.Connection baglanti.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & App.Path & "\veri.mdb" ‘yukarıdaki 2 satır bizim veri tabanı ile bağlantı kurmamıza yarıyor. ‘app.path olayı programımızın da c:\belgelerim\ilksql klasöründe olduğunu anlatıyor. ‘yani programı nerede çalıştırırsak çalıştıralım program veri.mdb dosyasını yanında arayacak. sql = "select adi,soyadi,telefon from kayit order by soyadi" Set rs = New ADODB.Recordset rs.Open sql, baglanti, 1, 3 ‘yukarıdaki 3 satırda ise veri tabanı içindeki verilere ulaşmak için ‘ilgili tablo ile bağlantımızı kuruyoruz. ‘sql değişkenimize kayit tablosu içinden adi soyadi ve telefon değişkenlerini seçmesini ‘ve bunları soyadi sırasına göre dizmesini söyledik. Eğer ki en sona DESC yazsaydık ‘dizilimi z `den a `ya yani azalan sıraya göre yapacaktı. ‘sql bağlantı tiplerini program sonrasında etraflıca anlatacağım. Şimdilik bir fikrimiz ‘olması açısından olaya böyle başladık. Dim adi, sadi, teli As String ‘şimdi 3 değişken tanımladık işi biraz uzattık Do While Not rs.EOF ‘Kayıt sonu değilse veya boş değilse do loop arasındakileri yap adi = rs("adi") ‘veri tabanındaki adi değişkeninin değerini adi değişkenine atadık sadi = rs("soyadi") ‘veri tabanındaki soyadi değişkeninin değerini sadi değişkenine atadık teli = rs("telefon") ‘veri tabanındaki telefon değişkeninin değerini telii değişkenine atadık listbox1.AddItem adi & " " & sadi & " " & teli ‘ve bu değişkenleri ard arda listbox a ekledik rs.MoveNext ‘Birsonraki kayıda geç Loop ‘Do ifadesinin doğasını gerçekleştir. GoTo kayitson ‘işlem bittiğinde kayıtson a git ve bitir. hata: ‘hata etiketi MsgBox "HATA OLUŞTU" & Chr(13) & Err ‘hata oluştu ise haber ver ve hata sebebini yaz kayitson: ‘işlem bitti etiketi End Sub Eğer ki bir yazım yanlışı yapmadıysanız listbox içerisinde kayıtlarınızı görebilirsiniz. Sql içerisindeki “select” deyimi bize listeleme ,düzenleme ve kayıt girişinde yarayacak. Ben işlemleri şimdilik recordset kullanarak yapıyorum bide bunu yapmanın sql ile yolu var. Mesela yani kayıt eklemek için sql değişkeni şöyle olacak: sql="insert into kayit(adi,soyadi, telefon) values('Mustafa','KESER','05055050505')" ve bu durumda hiç recordset açmamıza gerek kalmayacaktı. sql = "select adi,soyadi,telefon from kayit order by soyadi" Set rs = New ADODB.Recordset rs.Open sql, baglanti, 1, 3 yerine sql="insert into kayit(adi,soyadi, telefon) values('Mustafa','KESER','05055050505')" baglanti.execute(sql) dememiz kayıt için yeterli olurdu. Ancak recordset kullanarak kayıt eklemek şunların yapılmasını gerektiriyor. Dim adi, sadi, teli as String adi = “Mustafa” sadi = “KESER” teli = “05055050505” Set baglanti = New ADODB.Connection baglanti.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & App.Path & "\veri.mdb" sql = "select adi,soyadi,telefon from kayit order by soyadi" Set rs = New ADODB.Recordset rs.Open sql, baglanti, 1, 3 rs.AddNew rs(“adi”) = adi rs(“soyadi”) = sadi rs(“telefon”) = teli rs.Update Recordset ile bir kayıt yaptık işte. Eğer ki textboxlardan veri alalım derseniz rs.AddNew rs(“adi”) = text1.text rs(“soyadi”) = text2.text rs(“telefon”) = text3.text rs.Update şeklinde bir düzenleme yapmanız yeterli olacaktır. *** Şimdi sql’in en çok işe yaradığı yerlerden birine göz atalım ben adı Mustafa olan kişinin telefonunu değiştirmek istiyorum. Önce recordsetsiz sonrada recordsetli bir yapalım. sql="update kayit set telefon='05332226655' where adi='Mustafa'" baglanti.execute(sql) buradaki where komutu adı Mustafa olan herkesin telefon numaralarını değiştirir. İşte id burada işe yarayacak. Çünkü sadece bir tane id bir tane isime ait. Diyelim ki Bizim Mustafa’nın id si 15 olsun. Bu durumda komut, sql="update kayit set telefon='05332226655' where id=15" baglanti.execute(sql) olarak değişecektir. 15 numaralı kaydın telefon numarası değişti. Bir de recordset ile yapalım Set baglanti = New ADODB.Connection baglanti.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & App.Path & "\veri.mdb" sql = "select id,telefon from kayit where id = 15" Set rs = New ADODB.Recordset rs.Open sql, baglanti, 1, 3 rs(“telefon”) = “05332226655” rs.Update İşte bukadar basit. Değiştirme işlemini de bu şekilde yapıyoruz. *** En kolayı ise silme işlemi. sql="delete from kayit where id=15" baglanti.execute(sql) işte bukadar. Veri tabanından 15 numaralı kaydı bir anda sildik. Bu komut için recordset kullanmıyoruz. Çünkü bir zorluk çıkarmıyor. Recordset kullanmanın amacı toplu kayıt, listeleme ve aramalarda yarıyor. Recordset kullanmasak yaparmıyız. Tabi ki yapabiliriz. Uygun döngülerle her şey yapılabilir. Yada tüm database i boşaltmak istersek ; sql="delete from kayit" baglanti.execute(sql) yazmamız yeterli. Veritabanı bomboş… | |
| | |
| internetadami, Tesekkür Edenler: |
| | #2 |
| Bu örnekte serverdaki datalara bağlanarak treeview ile seçim yapıcaz ve treeview üzerinden seçtiğimiz herhangi bir veri datagrid'te görüntülenecek. İlk olarak formumuza datagrid ve treewiev yerleştirin eğer treeview yoksa projects/components/microsoft common controls seçeneğiyle treewiev'e ulaşabilirsiniz. Datagrid içinde aynı şekilde microsoft datagrid control 6.0(OLEDB) seçeneğinden ulaşabilirisiniz. Private Sub Form_Load() Dim nodX As Node ' Bir metni ana baslik olarak atamak için asagidaki gibi bir komut kullanmalisiniz. Set nodX = TreeView1.Nodes.Add(, , , "Tablo1") 'Asagidakinin amaci 1. Basliga bir alt baslik eklemektir. ' Eklediginiz altbasliklar eklenme siralarina göre görüntülenir. 'BEN RASGELE BİR TABLO1'E ÜÇ BAŞLIK TABLO 2'YE İKİ BAŞLIK EKLEDİM Set nodX = TreeView1.Nodes.Add(1, tvwChild, , "DATA1") Set nodX = TreeView1.Nodes.Add(1, tvwChild, , "DATA2'") Set nodX = TreeView1.Nodes.Add(1, tvwChild, , "DATA3") ' 2. Anabasligi ekliyoruz. Set nodX = TreeView1.Nodes.Add(, , , "Tablo2") 'Bu Kisimdada Diger AltBasliklar Var Set nodX = TreeView1.Nodes.Add(5, tvwChild, , "DATA1'") Set nodX = TreeView1.Nodes.Add(5, tvwChild, , "DATA3") ' Tüm agaci göstermek için kontrolü tazele. nodX.EnsureVisible End Sub 'Serverdaki Dosyalara Bağlanıyoruz Private Sub TreeView1_NodeClick(ByVal Node As MSComctlLib.Node) Dim nodX As Node Dim db As Connection Set db = New Connection Set kayitalani = New Recordset Set kayitalani1 = New Recordset Set kayitalani2 = New Recordset db.CursorLocation = adUseClient db.Open "Provider=MSDASQL.1;Persist Security Info=False;User ID=rapor;Data Source=Emre;Initial Catalog=QWE2346" kayitalani.Open "select top 50 CLIENT,COMPANY,MATERIAL,VALIDFROM,ORGCOUNTRY from DATA1 ", db, adOpenStatic, adLockOptimistic kayitalani1.Open "select top 50 COMPANY,LANGU,STEXT,MAINMATGRP FROM DATA3", db, adOpenStatic, adLockOptimistic kayitalani2.Open "select top 50 COMPANY ,MATTYPE ,SKUNIT, FACTOR ,CHANGEDAT from DATA2", db, adOpenStatic, adLockOptimistic Set n = TreeView1.SelectedItem If TreeView1.SelectedItem = ("DATA1") Then Set DataGrid1.DataSource = kayitalani End If If TreeView1.SelectedItem = ("DATA3") Then Set DataGrid1.DataSource = kayitalani1 End If If TreeView1.SelectedItem = ("DATA2") Then Set DataGrid1.DataSource = kayitalani2 End If mbDataChanged = False End Sub | |
| | |
| | #3 |
| Programınız izniniz olmadan kullanılamasın... ------------------------------------------------------------- Hazırladığınız programın sizin bilginiz dışında kopyalanarak kullanılmasını istemiyorsanız işte size mini bir örnek : (Burada istenen yükleme sırasında size danışılmak zorunluluğu oluşturmak.) Programınızla birlikte yüklenecek konfigürasyonla ilgili veri tabanında tek bir flag tanımlayın. yani yerini tasarım sırasında belirleyeceğiniz - sadece sizin bileceğiniz bir adreste bir bitlik bir yer ayırın. Bu bite "RegBit" diyelim. Aşağıdaki anlatımın sonunda "RegBit=1" ise program bilginizde yüklenmiş; "RegBit=0" ise program kopyalanmıştır diyeceğiz.("True/False" veya başka işaretler de kullanabilirsiniz - önemli olan iki farklı değere sahip olmak).Tabii ki ilk oluşturduğumuzda "RegBit=0" durumunda olacak. Basit olarak mantığımız ne olacak : Program çalıştığı zaman ilk yapacağı RegBit'i kontrol etmek olacak. "RegBit=0" olduğunu gördüğünde Register Formunu çağıracak. Bu formu tanımlayalım : Üzerinde 4 adet Label , 1 adet Text ve 1 adet de Command temel elemanları olan bir form. Çevre süslemeleri size ait... Bu formun yüklenişinde Label elemanlarına 1'den 9'a kadar rastgele değerler yüklüyoruz. (Yüklenecek değerlerin kaçtan kaça kadar olabileceği size bağlı; ben örneği basitleştirmek için 1den 9a diyorum). ---------------------------------------------------------------------------- Option Explicit Dim x(1 To 4) As Integer ---------------------------------------------------------------------------- Private Sub Form_Load() x(1) = Int((9 * Rnd) + 1) '1'den 9'a rastgele sayılar üret. x(2) = Int((9 * Rnd) + 1) x(3) = Int((9 * Rnd) + 1) x(4) = Int((9 * Rnd) + 1) Label1.Caption = x(1) Label2.Caption = x(2) Label3.Caption = x(3) Label4.Caption = x(4) End Sub ---------------------------------------------------------------------------- Kullanıcıdan da bu değerlere karşılık gelen bir değeri Text'e yazmasını istiyoruz. Bunu belirten bir ifadeyi Label5 olarak forma yerleştirmek doğru olacaktır.(Label5.Caption="Lütfen kullanıcı kodunu giriniz...") Kullanıcı tarafından değerler girilip Command'a tıklanınca ilk olarak Label'lardaki değerleri alıp tasarım sırasında belirlediğim matemetik formulünde yerlerine koyuyorum ve beklediğim kodu elde ediyorum. Sonrasında basit olarak kullanıcının girdiği değerle hesapladığım değeri karşılaştırıyorum. Aynı değilse RegBit'i "0" bırakıyorum ve programdan çıkıyorum. Böylece program her çalıştırıldığında yukarıdaki durum tekrarlanıyor. Her defasında başka sayılar ve farklı bir kod... Eğer kullanıcı sizin bilginiz dahilinde programı yüklüyorsa kendisinden "kullanıcı kodu" istendiğinde de sizi aramaktan çekinmeyecektir. siz de programın rastgele oluşturduğu değerleri alıp belki kafadan, belki hesap makinesi ile veya belki de bir başka kodlama programı ile programınızın sorduğu kodu oluşturup ona söyleyeceksiniz. Kullanıcı doğru kodu girdiğinde program RegBit=1 kaydını yapacak bir sonraki çalıştırılmasında tekrar kod sormayacaktır. ---------------------------------------------------------------------------- Private Sub Command1_Click() If Text1.Text = "" Then Exit Sub Dim a As Integer Dim b As Integer Dim c As Integer Dim d As Integer 'şifre kontrol a = x(1) + 1 b = x(2) + 1 c = x(3) + 1 d = x(4) + 1 Dim pass As Integer '*** 'Formülün ne derece karmaşık olacağı size bağlı 'Burada rastgele oluşturulan sayıların birer fazlasının mod 10 değerleri toplanıyor... pass = ((2 * a) Mod 10) + ((2 * b) Mod 10) + ((2 * c) Mod 10) + ((2 * d) Mod 10) 'şifrenin doğruluğuna göre hareket If Text1.Text <> pass Then MsgBox "Hatalı şifre !", vbExclamation, "Dikkat" End 'programı sonlandır Else 'RebBit=1 yap, bu formu kapat ve programı çalıştır End If End Sub ---------------------------------------------------------------------------- Burada anlatılmaya çalışılan sadece bir yöntemdir. RegBit dediğimiz flag bitini nereye nasıl saklayacağınız veya formülün nasıl olacağı sizin VBasic programlama düzeyinize ve tarzınıza bağlıdır. RegBit'in saklanacağı veri tabanı ilk çalışma sırasında dışarı atılan exe içine gömülü bir dosya; sizin programınızdan ayrı bir yerde oluşturacağınız bir text dosyası.... gibi birçok olasılıktan biri olabilir. | |
| | |
| | #4 |
| EXE içine Dosya Gömmek RES dosyalarının kullanıma bir örnek vereceğim. Bu örnek kod vasıtasıyla EXE'nizin içine istediğiniz EXE,DLL,OCX ya da başka bir dosyayı gömebilirsiniz. Bunu VB 6.0 içinden gerçekleştireceğiz. Vurgulama istediğim tek şey, bu kodu VB 6.0 içindeki RES Editor vasıtasıyla programınıza eklenen dosyaları dışarı çıkartmak için kullanabileceğinizdir. Yani bu kod ile EXE çalışırken içine herhangi bir dosya gömemezsiniz; EXE derlenmeden önce VB 6.0 içinden RES dosyası içine gömülen dosyaları dışarı atabilirsiniz. RES Editor Tools menüsünde bulunur. Eğer yoksa Add-Ins menüsünden Add-In Manager komutunu çalıştırın. Karşınıza gelen pencerede VB 6 Resource Editor satırına tıklayın ve Loaded konumuna geçirin. Tamam deyip pencereyi kapatın. Tools menusundan ya da Araç Çubuğundan RES Editörünü çalıştırın. RES Editör penceresinde araç çubuğundan Add Custom Resource komutunu verin. Hangi dosyayı EXE'nizin içine gömmek istiyorsanız RES dosyasına ekleyiniz. RES Dosyanızı kaydedin. Formunuzun üzerine Command1 adlı bir düğme yerleştirin. Bunun Click olayına aşağıdaki kodu ekleyin. Private Sub Command1_Click() Dim resbytes() As Byte resbytes = LoadResData(101, "CUSTOM") Dim no As Byte no = FreeFile Open App.Path & "\deneme.exe" For Binary As #no Put #no, , resbytes Close #no Shell App.Path & "\deneme.exe", vbNormalFocus End Sub Düğmeye basıldığı zaman EXE'nizin yanında bir de gömdüğünüz dosya oluşacaktır. Burada birşeye dikkat edin. ben "deneme.exe" dedim. Sizin dosyanız ne ise uzuntasını ona göre değiştirin. DLL ise "deneme.dll", "ZIP" ise "deneme.zip" olarak değiştirmeyi unutmayın. | |
| | |
| | #5 |
| VB6 XML Kullanımı ________________________________________ XML'e yazma Bunun icin once Project menusunden references..XML data sources 3.0 i ekleyin Private xDoc As msxml.DOMDocument Public Enum eOpenXMLDoc xDosya = 0 xMetin = 1 End Enum Public Function XML_AC(ByVal kaynak As String, Optional ByVal tur As eOpenXMLDoc = xDosya) As Boolean xDoc = New msxml.DOMDocument Select Case tur Case xDosya XML_AC = xDoc.Load(kaynak) Case xMetin XML_AC = xDoc.loadXML(kaynak) End Select End Function Public Function NesneOku(ByVal yol As String) As String On Error GoTo HATA Dim x As msxml.IXMLDOMNode x = xDoc.documentElement.selectSingleNode(yol) NesneOku = x.Text Exit Function HATA: x = Nothing End Function Public Function NesneXMLiniOku(ByVal yol As String) As String Dim x As msxml.IXMLDOMNode x = xDoc.documentElement.selectSingleNode(yol) NesneXMLiniOku = x.xml End Function Public Function NesneYaz(ByVal yol As String, ByVal deger As Object) On Error GoTo HATA Dim x As msxml.IXMLDOMNode x = xDoc.documentElement.selectSingleNode(yol) x.Text = deger Exit Function HATA: x = Nothing End Function Public Function DegerOku(ByVal yol As String, ByVal isim As String) As String On Error GoTo HATA Dim x As msxml.IXMLDOMElement x = xDoc.documentElement.selectSingleNode(yol) DegerOku = x.getAttribute(isim) Exit Function HATA: DegerOku = "" End Function Public Function DegerYaz(ByVal yol As String, ByVal isim As String, ByVal deger As Object) On Error GoTo HATA Dim x As msxml.IXMLDOMElement x = xDoc.documentElement.selectSingleNode(yol) x.setAttribute(isim, deger) Exit Function HATA: End Function Public Function NesneSayisi(ByVal yol As String) As Long On Error GoTo HATA Dim x As msxml.IXMLDOMNodeList x = xDoc.documentElement.SelectNodes(yol) NesneSayisi = x.length Exit Function HATA: End Function Public Function Kaydet(ByVal dosya As String) xDoc.Save(dosya) End Function | |
| | |
| | #6 |
| tsk emmegine salik | |
| | |
| | #7 |
| Tesekkürker | |
| | |
![]() |
| Konuyu Toplam 1 Üye okuyor. (0 Kayıtlı üye ve 1 Misafir) | |
| Seçenekler | |
| |
Benzer Konular | ||||
| Konu | Konuyu Başlatan | Forum | Cvpl | Son Mesaj |
| Emu Kodları | cetocan | ŞİFRELİ & ŞİFRESİZ UYDU | 11 | 02.11.2008 23:41 |
| msn hata kodları | turan58 | İnternet ve Güvenlik Bilgileri | 3 | 15.10.2008 14:30 |
| Html kodları | enlafonten | Webmaster çözümleri | 15 | 25.09.2008 10:56 |
| VB Hata Kodları | internetadami | Programlama Dilleri | 0 | 07.06.2008 00:25 |
| Vb'de Keyascii Kodları | burak25 | Programlama Dilleri | 1 | 06.10.2007 11:56 |