raporla ilgili

Katılım
1 Şubat 2006
Mesajlar
140
Excel Vers. ve Dili
2010
sn Modalı;
1- hani bir dernek üye takip programında listede arama kısmı vardı, orada aşağıdaki kodu, yazarak mı yaptınız veya bazı ayarlarla bazı kısımları otomatik mi geldi, (şu cin olayı orda da var mı yani?)

Private Sub txtÜyeNo_Updated(Code As Integer)
Dim txtSearchString As Variant
Dim strSQL As String

txtSearchString = Me.txtÜyeNo

If Not IsNull(Me![txtÜyeNo]) Then
strSQL = "SELECT [Üyeler].[üye no],[Üyeler].[Adı],[Üyeler].[soyadı],[Üyeler].lakabı FROM [Üyeler] "
strSQL = strSQL & "WHERE (([Üyeler].[üye no]) Like '" & txtSearchString & "*') "

End If

Me.lstÜye.RowSource = strSQL
End Sub

2- kod üzerinde geçen şu kısımları açıklarmısınız;
a).If Not IsNull(Me![txtÜyeNo]) Then
b).strSQL = strSQL & "WHERE (([Üyeler].[üye no]) Like '" & txtSearchString & "*') "
c). burda strSQL in tanımlanmasının özel bir nedeni var mı? strSQL değilde aliveli diye tanımlasak ne olurdu? (yoksa şu frm, cmd, txt olayından mı strSQL olarak tanımlandı?


3- bazı yerlerde =IIf(IsNull(... şeklinde kod var, burdaki IIf normal "if" mi?
4-başka bir veritabanı programında bir yere aşağıdaki if li bir kod yazdım,

Private Sub txtödenen_Click()
If Me.txtteklif >= Me.txthesap Then
txtödenen = txthesap / 2
Else
txtödenen = txtteklif / 2
End If
End Sub

ama ödenecek yere hep "hesap/2" değeri gelmekte(yani hep ilk if'in sonucu gelmekte), eğer hesap kısmı boş ise o zaman "teklif/2" değeri geliyor , neden böyle olabilir acaba. yani formulde amaç ödenecek yere hangisi küçükse o gelsin diyorum.
 
Katılım
25 Aralık 2005
Mesajlar
4,160
Excel Vers. ve Dili
MS Office 2010 Pro Türkçe
Sayın eskala,

İlk sorunuzdaki kodlar bir SQL sorgusunun VBA aya uygulanmasına ait. Hayır malesef burada Accessin cini iş başında değil ama web de bulup foruma elediğim SQL Bulder diye bir Access uygulaması var onu kullanıyorum ama nasıl.

Burada söz konusu olan sorgu değil mi? O zaman VBA koduna ekleyeceğim sorguyu normal bir sorgu olarak hazırlıyorum. ondan sonra sorgunun başlığına sağ klikleyip SQL görüntüsünü açıyorum. Oradaki SQL kodunu kopyalayıp SQL Buildere yapıştırıp oradaki uygulama kodları VBA koduna çeviriyor. Ama tabi bazen hatalarda oluşmuyor değil. Bir de Web den yardım alabilirsiniz. MSDN kütüphanesinde geniş bilgi var.

2.
a) If Not IsNull(Me![txtÜyeNo]) Then
kodunda Eğer txtÜyeNo alanı boş değilse, yani herhangi bir veri girilmiş ise o zaman aşağıda devam eden kod dizisini çalıştır diyor.

b) strSQL = strSQL & "WHERE (([Üyeler].[üye no]) Like '" & txtSearchString & "*') "
Sorgu cümlesine bir önceki sorgu cümlesine WHERE yan tümcesi ile FROM yan tümcesinde listelenen tablolardaki hangi kayıtların SELECT, UPDATE veya DELETE deyiminden etkilendiğini belirtir.
Yan, Üye no tablosunun Üyeler alanı txtSerchString alanına benziyen verileri süz diyoruz.

c) Doğru hissetiniz tabiki aliveli olabilirdi ama str metin dizisini SQL ise sorgu ifadesini gösteriyor. o zaman bu şekilde yazarsanız nerede görürseniz bunun bir sorgu tümcesi olduğunu anlarsınız.

3) IIf fonksiyonu If fonksiyonunun daha basit bir kullanım şekli.

IIf(karşılaştırma ifadesi, eğerdoğru ise olacaklar, yanlışsa olacaklar) şeklinde kullanılır.

4. Belki ifadelerde yazım yanlışı var. Onun için ben nesneleri adlandırırken boşluk bırakmıyorum. O zaman kodu yazarken Me. koyarsanız o zaman size yardımcı bir pencere açılacaktır ve oradan istediğiniz alanı üç öneği yazarak kolaytlıkla bulup hatasız ekleyebilirsiniz.

İyi çalışmalar
 
Katılım
1 Şubat 2006
Mesajlar
140
Excel Vers. ve Dili
2010
Sn. Modalı;
öncelikle sabınıza sığınarak bazı sorular soracağım,
1- önceki sorularımda (2-b deki)
strSQL = strSQL & "WHERE (([Üyeler].[lakabı]) Like '" & txtSearchString & "*') " kodunu açıklarmısınız ve özellikle '" & txtSearchString & "*' kelimesindeki '" ve "*' işaretlerinin özel anlamı mı var? bu işaretler yoksa SQL Bulder'in yapısından mı kaynaklanıyor? ayırca bu SQL Bulder uygulmasını nerden bulabilirm? yani normal sorgu tasarlayıp ordaki sql kodunu kopyalayıp nereye yapıştırılacak ki vba koduna çevirsin.
2- genel bir soru, form oluşturuken tablo veya sorguya dayanmayan veri kaydedilmez mi? yani form üzerinde yazılan her veri bir yerlere kaydediliyor mu? illa form üzerine eklenen her nesne ya bir tabloya veya bir sorguya dayandırılmak zorunda mı? hesaplanarak elde edilen alanlar bir formulle elde edilip yazılsa olmaz mı? sorguya dayandırmak zorunda mı? bu konularda genel bir açıklama yaparmısınız?
3- access konusunda önereceğiniz örneklerle anlatılmış kitap var mı? (mesela sizin var mı?)
teşekkürler, hayırlı ramazanlar...
 
Katılım
25 Aralık 2005
Mesajlar
4,160
Excel Vers. ve Dili
MS Office 2010 Pro Türkçe
Sayın eskala,

strSQL = strSQL & "WHERE (([Üyeler].[lakabı]) Like '" & txtSearchString & "*') "
Kodunu açıklarmısınız dediniz öncelikle strSQL in en sonda nasıl görüneceğini açıklayayım:

SELECT [Üyeler].[üye no],[Üyeler].[Adı],[Üyeler].[soyadı],[Üyeler].lakabı FROM [Üyeler] WHERE (([Üyeler].[lakabı]) Like 'txtSearchString'

" " lar VBA ya yazılanın bir metin olduğunu göstermek için ekleniyor.
txtSerchString form üzerindeki bir nesne adı olduğu için o noktada " " ları kesip & ile birbirine eklememiz gerekiyor.

SQL de sayılar veya sayı başvuruları direkt olarak yazılırlar
SQL de metinler veya metin başvuruları ' ' arasına alınılırlar.
SQL de tarih veya tarih başvuruları # # arasına alınırlar.

Ancak tarih alanlarında bir problem var formatı amerikan tarih formatında olması gerekiyor. Yani #mm/dd/yyyy# olması gerekiyor. Onun için tarih yazılırken bu değişikliği de göz önünde bulundurmak gerekiyor.

Gelelim formlara. Dayandırmak ve kaydetmek iki ayrı şey. Veri kaydedebilmek için mutlaka sorguya veya tabloya dayandırmak gerekir. (VBA kodu ile tabloya form içinden kayıt yapabiliriz tabi ama bu pek de kullanışlı değil.)

Hesaplanan alanların tabloda yer almamsı gerktiğini söylüyorum. İşte bu noktada hesaplanan alanlar form üzerinde yer alabilirler.

Access ile ilgili piyasada birkaç kitap var. İnceleyip beğendiğinizi alabilirsiniz.
 

assenucler

Altın Üye
Katılım
19 Ağustos 2004
Mesajlar
3,552
Excel Vers. ve Dili
Ofis 365 TR 64 Windows 11 Home Single Language x64 TR
Altın Üyelik Bitiş Tarihi
29-05-2025
Access SQL Builder

Sn. Modalı

Sitemizde herkese bıkmadan usanmadan yaptığınız ayrıntılı açıklamaları büyük bir zevkle okuyor ve uygulamaya çalışıyoruz.

Access konusunda uzmanlardan birisiniz, eskala'ya son yanıtınızda Access için "SQL Builder'ı" web'te bularak foruma eklediğinizi belirtiyorsunuz.

Bu programı "Arama" ile arattığımda bulamadım.

Yanıtınızı bekliyorum. Sevgi ve saygılarımla.
 
Katılım
25 Aralık 2005
Mesajlar
4,160
Excel Vers. ve Dili
MS Office 2010 Pro Türkçe
Sayın assenucler,

İstediğiniz uygulamayı Access örnekleri ve uygulamaları bölümüne ekledim.

İyi çalışmalar:)
 

assenucler

Altın Üye
Katılım
19 Ağustos 2004
Mesajlar
3,552
Excel Vers. ve Dili
Ofis 365 TR 64 Windows 11 Home Single Language x64 TR
Altın Üyelik Bitiş Tarihi
29-05-2025
Sayın Modalı;

Kısa sürede verdiğiniz yanıta ve yakın ilginize teşekkürler.

Kolay gelsin.
 
Katılım
1 Şubat 2006
Mesajlar
140
Excel Vers. ve Dili
2010
Sn. Modalı;
alt formlarla ilgili bir kaç sorunum var
ekteki denemeden yola çıkarak sorayım, denemede görüldüğü gibi liste adlı bir form var, bu forma bağlı hesap diye alt form var. liste formu açıldığında alt form false, isim girilince true oluyor. buraya kadar tamam, bundan sonra ;
1-başka bir kayıda geçince ilk kayıt neden kaydedilmiyor,
2-bu alt formu ana forma bağlamak için alt/üst alanları bağla sekmesinden ikisini de sıra no yapmak istiyorum ama, alt alanlar kısmında sıra no yok ki?
yani bu alt/üst alanları bağlama hakkında ve kayıtları kaydetmek hakkında bilgi verirmisiniz?
bu denemenin doğru halini yaparmısınız?
3-form açıldığında otomatikmen en son kayıtta olmasını istiyorum. (ilk kayıtta değil.)
teşekkürler...
 
Son düzenleme:
Katılım
25 Aralık 2005
Mesajlar
4,160
Excel Vers. ve Dili
MS Office 2010 Pro Türkçe
Sayın eskala,

1. Alt formu niçin görünmez yapıyorsunuz? Bu yeni kayıt yazarken uygu ama varolan kayda alacak verecek eklemek istediğinizde tekrar adı yenilemeniz gerekiyor.

2. Alt alanda sıra no yu sizin tablodan eklemeniz gerekiyor. Ekledikten sonra tablo ilişkileri penceresinden de ilişkiyi oluşturursanız alt form eklerken zorluk çekmezsiniz. Eğer alt form düzgün eklenmise ve tablo ilişkilendirmede bilgi tutarlılığına zorla kutusu dolu ise kaydetme sırasında zorluk çekmezsiniz.

3.Başka bir cevapta da değinmiştim. Kod yazmanın en kolay yolu var olan kodları kopyalayıp yapıştırmaktır diye. Şimdi buton eklerken açılan sihirbaz penceresini iyice incelemenizi istiyorum. Burada bir sürü komut var ve bu komutların da kodları hazır. O zaman kayıt gezintisi kategorisinden son kaydı seçip butonu eklerseniz o zaman otomatik olarak kodlar kod yazım sayfasına eklenirler. Sizin yapacağınız bu kodları sizin olayın altına taşımanız. Ne diyorsunuz soruda form açılırken yani form load olayı sırasında form son kaydı göstersin. Eklediğiniz son kayıt butonunun kodlarını form load olayı altına taşıyın. Butonu silin.

İyi çalışmalar:)
 
Katılım
1 Şubat 2006
Mesajlar
140
Excel Vers. ve Dili
2010
ÇOK TEŞEKKÜRLER SN. MODALI;
Alt formu niçin görünmez yapıyorsunuz demişsiniz, çünkü farklı farklı bir kaç alt form var, seçilen kritere göre uygun olanı aktifleşsin istiyorum, bilmiyorum bu mantıksız oluyo galiba. yoksa tek alt form olsa sorun değil, görünürde olabilir tabi. yani benim mesele, örneğin eğer formda bir listbok var orda "a" seçilirse x alt formu, "b" seçilirse y alt formu gibi böyle 8-9 tane alt form var, onun için ilk açılışta form üzerinde alt formlar görünmesin çabasındayım.
bir de alt formu bağlarken, alt alanı bağla, üst alanı bağla derken bu alt- üst neresi yani, alt nereyi bağlıyor, üst nereyi bağlıyo? ve ikisi arasında bir uyum olmalımıdır?
sizin cevap olarak yolladığınız denemde hesap tablosuna "işlem ID" alanı neden eklediniz ve bu ID nin açılımı nedir ki "işlem no" olsa ne olur?
sizi çok yorduğum için özür diliyor, sabrınız ve cevaplarınız için sonsuz teşekkür ediyorum.
saygılarımla....
 
Katılım
25 Aralık 2005
Mesajlar
4,160
Excel Vers. ve Dili
MS Office 2010 Pro Türkçe
Sayın eskala,

Pek tabi ID yerine işlem nosu denebilir. Veri tabanı uygulamalarında daima benzer olmayan bir anahtar alan eklemeyi alışkanlık edinin.

İyi çalışmalar:)
 
Katılım
1 Şubat 2006
Mesajlar
140
Excel Vers. ve Dili
2010
sn. Modalı,
ağ üzerinden yaklaşık 5-10 kişinin kullanması gereken bir program var, ancak bir kişinin kullandığı bir formu başkası kullandımı hatalar oluşmakta, kayıt, eksik bilgi vs gibi. bunu çözmenin bir yolu var mıdır? veya formu açan kişinin kimin hangi formu kullandığını görme şansı var mıdır?
teşekkürler...
 
Katılım
25 Aralık 2005
Mesajlar
4,160
Excel Vers. ve Dili
MS Office 2010 Pro Türkçe
Sayın eskala elbette var. Çözümsüz soru çok az. Ancak şu anda elimde döküman olmadığından tam olarak açıklamasını akşama evden yaparım.
Kayıt kilitleme ile ilgili ayarların yapılması gerekiyor. Kayıt kilitlendiğinde bir kişi işini bitirmeden diğeri müdahale edemiyor.

iyi çalışmalar:)
 
Katılım
1 Şubat 2006
Mesajlar
140
Excel Vers. ve Dili
2010
sn. Modalı,
ağ üzerinden yaklaşık 5-10 kişinin kullanması gereken bir program var, ancak bir kişinin kullandığı bir formu başkası kullandımı hatalar oluşmakta, kayıt, eksik bilgi vs gibi. bunu çözmenin bir yolu var mıdır? özellikle formu açan kişinin "kimin hangi formu kullandığını" görme şansı var mıdır?
teşekkürler...
 
Katılım
1 Şubat 2006
Mesajlar
140
Excel Vers. ve Dili
2010
belirtilen linkte benim aradığım cevap yok. "kim hangi formu kullanıyor? " onu görmek mümkün mü?
saygılarımla...
 
Katılım
25 Aralık 2005
Mesajlar
4,160
Excel Vers. ve Dili
MS Office 2010 Pro Türkçe
Sayın eskala,

Yukarıdaki link de verilen açıklamaları dikkatli okumuşsanız herkesin kendi formunu kullandığını anlamış olmanız gerekirdi. Uygulama bölünmesi doğru yapılmı ise o zaman her bilgisayar üstünde yüklü olan uygulamanın (aynı) formlarını, raporlarını kullanır. Ortak olan tablolardır. Ve bir bilgisayar bir tablo kullanırken üstünde çalıştığı veri kilitlenir ve diğer bilgisayarlar kullanamaz.

iyi çalışmalar
 
Katılım
1 Şubat 2006
Mesajlar
140
Excel Vers. ve Dili
2010
Merhabalar Sn. Modalı,
Ramazan bayram derken yeniden geldik iş hayatına devam. uzun bir ara tatildeydim, bu hafta iş başı yaptık. bu nedenle geçmiş bayramınız mübarek olsun.
Sn. modalı bir sorum olacak, çok uğraştım ama çözemedim olayı. şu ekte gönderdiğim programda sizin daha önceden yapmış olduğunuz "üye bul" olayını bir türlü çözemedim ve yapamadım, hatta daha sonra yollamış olduğunuz "SQL Builder" programıyla yapıldığını belirttiniz ama yine de çözemedim. bu nedenle bu "üye bul", kısmını ekteki sorguyu örnek alarak adım adım nasıl yaptığınızı izah edermisiniz. yani işe nerden nasıl başladınız.
teşekkürler...
 
Katılım
25 Aralık 2005
Mesajlar
4,160
Excel Vers. ve Dili
MS Office 2010 Pro Türkçe
Sayın eskala,

Ben de geçmiş bayramınızı kutlarım.

Gelelim sorununuza:

1.Öncelikle boş bir form açarız.

2. Formun ayrıntı bölümüne bir liste kutusu ekleriz. Bu listenin veri kaynağınının yanındaki ... basıp sorgu hazırlama sihirbazını çalıştırıp istediğimiz tablonun istediğimiz alanların ekleyip kaydederiz. İlişkili sütunu 1 yaparız. Tabloda tekrarsız alan olan üye numarasına göre listenin davranışını ayarlarız. Tamam ve İptal düğümlerini ekleriz.

3. Formun form üst ve alt bilgisini görünür hale getiririz. Üst bilgisine listenin süzülmesini istediğimiz alanalar kadar BURAYA DİKKAT metin kutusu değilde activx denetimi içinden microsoft form nesnelerinden metin kutusu ekleriz. Bunu yapmamızın sebebi, bu tür metin kutularının yeniden sorgulama özelliğinin bulunması. Yani siz içine her harf girişinizde ilişkili nesne (liste) tekrar sorgulanıyor.

4. Eklediğimiz nesnelere mantıklı adlar veririz.

5. Kod sayfasını açıp kodları yazmaya başalarız. işi yapan kodların açıklamasına geçeyim.

Kod:
Private Sub Form_Load()
Me.txtAdı = ""
Me.txtLakabı = ""
Me.txtÜyeNo = ""
Me.txtSoyadı = ""
End Sub
Burada form açılırken metin kutularının içeriğini boşaltıyoruz.

Kod:
Private Sub lstÜye_DblClick(Cancel As Integer)
Call Tamam_Click
End Sub
Listeye çift tıkladığımızda Tamam_Click prosedürünün çalışmasını sağlıyoruz. Burada alan tasaruffu yapıyoruz. yani tamam düğü mesinin kliklenmesiyle aynı işi yaptırıyoruz.

Kod:
Private Sub Tamam_Click()
Dim BulNo As Variant
Dim frm As Form
    On Error GoTo Gozardi
For Each frm In Forms
    If frm.Name = "frmüyeler" Then
        GoTo cikis
    End If
Next frm
cikis:
    BulNo = Val(Me.lstÜye)
    frm.RecordsetClone.FindFirst "[üye no]=" & Str(BulNo)
    frm.Bookmark = frm.RecordsetClone.Bookmark
    DoCmd.Close acForm, "üyeseç"
Exit Sub
Gozardi:
    DoCmd.Close acForm, "frmOgrenciYardim"
End Sub
Burada ise en başta açık olan formları denetliyoruz bunlardan biri frm üyeler ise cıkış alt yordamını çalıştırırız yoksa yardım formumuzu kapatıp işlemi bitiriiz.
Çıkış prosedüründe ise BulNo değişkenine listenin ilişkili sütununun içeriğinin sayısal değerini atıyoruz. frmÜyeler formunun kayıt setini üyenosunun bulno ya eşit olan kaydını bulmasını ve daha sonra görüntülenmesini sağlıyoruz ve füyeseç formumuzu kapatıyoruz.


Kod:
Private Sub txtAdı_Updated(Code As Integer)
Dim txtSearchString As Variant
Dim strSQL As String
txtSearchString = Me.txtAdı
If Not IsNull(Me![txtÜyeNo]) Then
    strSQL = "SELECT [Üyeler].[üye no],[Üyeler].[Adı],[Üyeler].[soyadı],[Üyeler].lakabı FROM [Üyeler] "
    strSQL = strSQL & "WHERE (([Üyeler].[adı]) Like '" & txtSearchString & "*') "
   
End If
Me.lstÜye.RowSource = strSQL
End Sub
Metin kutlarının update olayı nda ise eğer ilişkili metin kutusu Boş değil ise o zaman bir SQL cümleciği oluşturacak kodları yazıp bunları form üstünde bulunan liste nesnesinin veri satırına atıyoruz. Kısaca listede yazdığımız veri kaynağının cümlesini değiştiriyoruz.

Sql cümlesinde ise: Üyeler tablosundan üyeno, adı, soyadı, lakabı alanlarını seçip ilişkili text içinde yazdığımız kelime dizisi ile başlayan kayıtların süzülmesini sağlıyoruz.

Eğer baştan normal metin kutusu kullanmış olsaydık o zaman her harf yazışta yukarıdaki kod çalışmayıp kutudan çıkıldığında kod çalışır duruma geçecekti.

Diğer metin kutularının kodlarını da aynı düşünceye göre yazarız.

Şimdilik bu kadar:)
 
Katılım
1 Şubat 2006
Mesajlar
140
Excel Vers. ve Dili
2010
teşekkürler..

eline sağlık modalı bey, çok makbule geçti.
 
Üst