Eczane Programları Yapmak

29/12/2010, 15:27

Hayri16

29/12/2010, 15:43

Şeyma462

hocamız SQLde yapılmayacak demişti bize. başka yoldan yapamaz mıyız ?
29/12/2010, 15:53

Hayri16

Bizim bu konuda yazacağımız Sql cümlesi:
"INSERT INTO T_GIRIS ( firmano, fattar, fatno )
SELECT [FORMS]![F_ILACALIM]![firmakutu] , [FORMS]![F_ILACALIM]![ffattar] , [FORMS]![F_ILACALIM]![ffatno]"

Burada ne diyoruz. INSERT INTO ekle demek, Bir tabloya Sql kullanarak bir kayıt eklemek istediğimiz zaman Sql cümlemiz "INSERT INTO" komutuyla başilamalı.
google çevirisi gibi yazalım "Ekle T_GIRIS tablosuna (firmano,fattar,fatno) alanlarına
seçiyorum F_ILACALIM formunda firmakutu değerini, ffattar değerini, ffatno değerini"
Cümlede belirtilen ilk alana seçilen ilk değeri, ikinciye ikinci değeri v.b atar.
İlk değer firmano alanı ise select ten sonra yazdığınız ilk değer oraya atanır.
Atanacak alanlar ve seçilecek değerler eşit sayıda olmalı yoksa hata verir.
Yine atanacak alanın veri tipi ile seçilen değer aynı tipte olmalı. Sayı alana metin, metin alana başka bir tip atanmaması gerekir.

Bu Sql cümlemizi bir değişkene atayıp o değişken olarak çalıştırcağız. Nasıl bir değişkene atamamız gerekir. Tabiki metin(string) olmalı.
o zaman "ekle" adını vereceğimiz bir değişken belirleyelim ve ona bu Sql cümlesini atayalım.
Dim ekle as string ' komutuyla ben ekle adında bir string değişken kullanacağım haberin olsun diye accesse bildirimde bulunup accessi uyarıyoruz. Sonra bunu çalıştıralım. Bunun içinde kontak anahtarı görevi gören bir komutumuz var.
Docmd.RunSql sqlcümlesi
sqlcümlesi DoCmd.RunSql komutunun çalıştıracağı cümle. Biz bu cümleyi ekle değişkenine atadığımız için
DoCmd.Run Sql ekle
yazıyoruz.
Böylece kayıt yapılmış oluyor. Bir de kaydın yapıldığını bildiren bir mesaj çıkartarak kodumuzun son hali:
Private Sub fatkaydet_Click()
Dim ekle As String
ekle = "INSERT INTO T_GIRIS ( firmano, fattar, fatno )" _
& " SELECT [FORMS]![F_ILACALIM]![firmakutu] , [FORMS]![F_ILACALIM]!" _
& "[ffattar] , [FORMS]![F_ILACALIM]![ffatno]"
DoCmd.RunSQL ekle

MsgBox (" KAYIT TAMAM ")
End Sub
bu şekilde oldu. Bu normal şartlar altında, yani herşeyin doğru gittiği zaman kaydeder. Ama ya normal gitmezse;
İşte o zaman programımız hata verir ya da hatalı kayıt üretir. Burada normal gitmeyen ne olabilir?
Kullanıcı verilerden birini veya hiç birini girmez, boş kayıt eklemeye çalışır. Ya da fatura tarihine günümüz tarihinden ilerisi bir tarih girmeye çalışır. Bu durumları önlemek için programcılar hata denetimleri uygular. Biz bunları burada yapmayacağız. İleride bilgileriniz geliştikçe bunları eklersiniz.
Hatalar konusunda bilgi için
1.Link
2.Link
lere bakabilirsiniz.
Hımmm.. O zaman ADO kullanacağız. Ben şimdi onunla ilgili bilgileri hazırlayayım. Bir müddet yazmayacağım.
29/12/2010, 16:57

Hayri16

Madem Öğretmenininz Sql le olmasın dedi , O halde biz ADO kullanarak bu işi yapalım.
ADO için öncelikle Kod sayfamızın üstünde bulunan menüden Tools u seçip, referanslara tıklıyoruz. gelen Pencerede Microsoft ActiveX Data Objects 2.8 Library i bulup veritabanımıza ekliyoruz.


Önce bir kayıt nesnesi tanımlamamız gerekiyor.
Dim kyt As New ADODB.Recordset
Bu kodla kyt adlı değişkenimizin yeni bir ADO kayıt seti olduğunu accesse bildiriyoruz.
Sonra tablomuzu açıyoruz.
kyt.Open "T_GIRIS", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
Bu kodun adLockOptimistic adlı kısmı tabloyu ekleme, silme,değiştirme yapmak üzere açar.
Eğer adLockReadOnly bu kodu kullanarak açsaydık kayıtları sadece okuyabilirdik. Üzerinde değişiklik yapılamazdı.

kyt.AddNew
kyt.Fields("firmano") = firmakutu
kyt.Fields("fattar") = ffattar
kyt.Fields("fatno") = ffatno
kyt.Update

kyt adlı kayıt setimize Add.New diyerek yeni ekleme yapacağımızı söylüyoruz. Sonra bu kyt setimizin "firmano" adlı alanımıza firmakutu değerini, "fattar" alanına ffattar değerini, "fatno" alanına ise ffatno değerini eşitlediğimizi söylüyoruz.
Update komutuyla tablomuzu güncelleyip kaydediyoruz.

kyt.Close 'kyt setimizi kapatıyoruz.
Set kyt = Nothing ' ADO ile bağlantımızı kesiyoruz.
Sonuçta yeni kodumuz ;
Private Sub fatkaydet_Click()
Dim kyt As New ADODB.Recordset
kyt.Open "T_GIRIS", CurrentProject.Connection, adOpenKeyset, adLockOptimistic

kyt.AddNew
kyt.Fields("firmano") = firmakutu
kyt.Fields("fattar") = ffattar
kyt.Fields("fatno") = ffatno
kyt.Update

kyt.Close
Set kyt = Nothing

MsgBox (" KAYIT TAMAM ")
End Sub
böyle oluyor. Burada benim kullanmadığım ama çok sayıda veri girişlerinde kullanılan bir yöntem var. Onu da belirtmek isterim.
With-End with yöntemi.
Çok sayıda tekrarlanan kayıt setini bununla yazabiliyoruz.
Yukarıdaki kısmı şöyle yazdığımızda da aynı sonucu alırız.

With kyt
.AddNew
.Fields("firmano") = firmakutu
.Fields("fattar") = ffattar
.Fields("fatno") = ffatno
.Update
End With

Fatura bilgilerini kaydettik. Yukarıda yazdığım Hata kontrol meselesi aynen burada da geçerli.


29/12/2010, 17:17

Hayri16

Şimdi sıra geldi Faturada yazan ilaçların girilmesine. Bunları girmek için combobox (Açılan kutu) yapacağız. Bunu yapmayı biliyorsunuz. Buraya yazacağımız ilaçlar olduğu için bunu T_ILAC tablosuna bağlayacağız.... Ama hepsini al türünden bir bağlantı yapmayacağız. Nasıl bir bağlantı yapacağız. Faturada seçtiğimiz firmanın ilçaları listelensin. O firmaya ait olmayan bir ilacın gelmesi ve girilmesi ciddi bir mantık hatasıdır. O yüzden bunu baştan önlememiz gerekir. Bunu nasıl yapacağız? Açılan kutuya kaynak olmak üzere bir sorgu yapacağız. Tasarım sayfasında Oluştur menüsünden Sorgu sihirbazını seçip Basit Sorgu Sihirbazına tıklıyoruz. Hangi Tabloyu sorduğunda T_ILAC tablosunu seçip, onun da
ilac_id, barkod, ilac_adi,firmano, fiyat, mevcut alanlarını seçip tasarım görünümünde açıyoruz.
Karşımıza şöyle bir görüntü çıkıyor.

29/12/2010, 17:59

Hayri16

Bu sorguyu çalıştırdığımızda İlaç dosyamızda ne varsa seçilen alanlara gelir. Oysa biz firmaya göre seçmek istiyoruz.
O zaman firmano yazan sütunun altında bulunan ölçüt kısmına bir şey yazmalıyız. Biz formumuzda fatura kaydettiğimiz firmayı nerde belirliyorduk. firmakutu da o halde buraya firmakutuya eşitse diyeceğiz.
[FORMS]![F_ILACALIM]![firmakutu]
bu satırı oraya yazıyoruz.
Bu arada sorgumuzun adını da ileride "ya bu ne iş yapıyordu" dememek için
"S_ALIM_FIRMAILAC" yapalım.
Şimdi formumuza dönüp açılan kutumuzu oluşturalım ve Satır kaynağı için yaptığımız sorguyu seçelim.
Bunun adını da ilackutu yapalım.
Sütunların genişliklerini ayarlayarak istediğimiz sütunun görünmesini sağlayalım.
Ama bir şeyi yapmadık. neyi? Güncellemeyi.
Bunun için Kaydetme kodlarımızı yazdığımız yerin mesajdan sonra end sub tan öncesine
ilackutu.requery
kodunu yazarak işlemimizi tamamlıyoruz.