Parametreli sorgu

Katılım
15 Kasım 2006
Mesajlar
583
Excel Vers. ve Dili
Ms Office 2003 Türkçe
Merhaba arkadaşlar,

formun kayıt kaynağı bir sorgu cümlesi.

sorgu cümlesinde, select kısmında bir parametre kullandım. (where şartında değil.)

yani,

select iif(v_parametre='X';1;0) ........ gibi birşey.

Formu açtığımda otomatik olarak parametre ekranı açılıyor e v_parametre yi girmemi istiyor.

Sorum şu: Bu şekilde bir ekran açılmadan, v_parametre parametresine nasıl değer gönderebilirim?

v_parametre yerine Forms!<form_adi>!<form_elemani> &#351;eklinde kullanmak istemiyorum.
Direkt v_parametre = xxxx &#351;eklinde kullanmak m&#252;mk&#252;n m&#252;?

Sayg&#305;lar.
 
Katılım
25 Aralık 2005
Mesajlar
4,160
Excel Vers. ve Dili
MS Office 2010 Pro Türkçe
Sayın yeni54,

Doğru anladıysam, parametrenizi sql cümlesi dışında bir değişkene atayın ondan sonra da bu değişkeni sql cümlesi içinde kullanın.


İyi çalışmalar
 
Katılım
15 Kasım 2006
Mesajlar
583
Excel Vers. ve Dili
Ms Office 2003 Türkçe
Valla ne yalan s&#246;yliim say&#305;n modal&#305;, jeton d&#252;&#351;medi.

v_parametreyi form &#252;zerinde tan&#305;ml&#305;yorum ama, form a&#231;&#305;l&#305;rken parametre ekran&#305; &#231;&#305;k&#305;yor &#246;nce.

v_parametre yerine forms!<form_adi>!<alan_adi> &#351;eklinde kullan&#305;nca bir sorun &#231;&#305;km&#305;yor.

Bu &#351;ekilde de sorgu bir forma ba&#287;l&#305; oluyor. ba&#351;ka formlarda kullanam&#305;yorum.

Asl&#305;nda query nin sql c&#252;mlesini, kullanaca&#287;&#305;m formun kod k&#305;sm&#305;nda kullan&#305;rsam da bir sorun olmuyor ama, bu sefer de ayn&#305; sql c&#252;mlesini, kullanaca&#287;&#305;m t&#252;m formlara ta&#351;&#305;mak zorunda kalacam. Bir de&#287;i&#351;iklik icab ederse, t&#252;m&#252;nde tek tek de&#287;i&#351;tirmem gerekecek.

<query_ismi>.<parametre_ismi> = <deger>

benzeri bir kullan&#305;m ar&#305;yorum yani.
 
Katılım
25 Aralık 2005
Mesajlar
4,160
Excel Vers. ve Dili
MS Office 2010 Pro Türkçe
O zaman bir modüle bir fonksiyon veya alt yordam yazın ve formlar üstünden çağırıp kullnın.

İyi çalışmalar
 
Katılım
15 Kasım 2006
Mesajlar
583
Excel Vers. ve Dili
Ms Office 2003 Türkçe
Teşekkürler sayın modalı.

İstediğimi sağlamıyorsa da en iyi çözüm bu herhalde.

Benim istediğim tam olarak şu aslında:

Tüm sorguları, belli bir hiyerarşi içinde query bölümünde toplayayım
ve dışarıdan göndereceğim parametrelerle bu query leri kullanayım.
Kod kısmında veya formun veya bir objenin kaynağında salt sql kodu olmasın.

Ama access bunu sağlamıyor galiba. Ne yapalım canı sağolsun.
 

beab05

Özel Üye
Katılım
19 Mart 2007
Mesajlar
1,418
Excel Vers. ve Dili
Office 2013
Benim jeton da d&#252;&#351;medi bu arada.. Hala ne istedi&#287;inizi tam olarak anlayamad&#305;m akl&#305;ma gelen benim de modullerdi ama bu da sizin i&#231;in uygun de&#287;ilmi&#351; demek.. &#214;rneklendirerek anlattan&#305;z yani &#246;rnekten kast&#305;m senaryoyu anlatsan&#305;z.. &#304;lgin&#231; geldi a&#231;&#305;k&#231;as&#305;...
 
Katılım
15 Kasım 2006
Mesajlar
583
Excel Vers. ve Dili
Ms Office 2003 Türkçe
Mod&#252;ller kesinlikle sa&#287;l&#305;yor tabi. Sorguda kullanaca&#287;&#305;m parametreyi fonksiyona parametre olarak g&#246;nderirim olur biter.

Ama, ben o &#351;ekilde istemiyorum. (Belki de &#231;ok sa&#231;ma bi&#351;ey istiyorumdur. E&#287;er b&#246;yleyse kusuruma bakmay&#305;n)

&#214;rnek bir sql c&#252;mlesi &#252;zerinden gidelim:

Kod:
SELECT stok_kart_table.stok_grup, stok_kart_table.stok_id, stok_kart_table.stok_adi, stok_kart_table.kritik_seviye, IIf([COLOR="red"]v_rg[/COLOR]='R',nz([rdevreden],0),IIf([COLOR="red"]v_rg[/COLOR]='G',nz([gdevreden],0),nz([rdevreden],0)+nz([gdevreden],0))) AS Devir
FROM stok_kart_table LEFT JOIN stok_devreden_table ON stok_kart_table.stok_id = stok_devreden_table.stok_id;
Bu sorguyu sorgular bolumunde sorgu1 ad&#305;yla kaydetti&#287;imi d&#252;&#351;&#252;n&#252;n.

&#350;imdi form1 ad&#305;nda bir form haz&#305;rlayal&#305;m ve kayna&#287;&#305;na sorgu1 i koyal&#305;m.

form1 i &#231;al&#305;&#351;t&#305;r&#305;nca, &#246;nce v_rg yi isteyen bir parametre penceresi a&#231;&#305;l&#305;yor.

Benim istedi&#287;im, v_rg ye bir &#351;ekilde de&#287;er g&#246;ndereyim. parametre ekran&#305; olarak sormas&#305;n bana.

Umar&#305;m anlatabilmi&#351;imdir.
 
Katılım
25 Aralık 2005
Mesajlar
4,160
Excel Vers. ve Dili
MS Office 2010 Pro Türkçe
Sayın yeni54,

Durum şimdi dahada basitleşti: Formu kodla açıyoruz ve kullanılan komut:


Kod:
Dim stDocName As String
    Dim stLinkCriteria As String
    stDocName = "Form1"
    DoCmd.OpenForm stDocName, , , stLinkCriteria
Buradaki stLinkCriteria cümlesi tam sizin istediğinizi karşılıyor . Biraz deneme yapın düzgün çalıştığını göreceksiniz.

OpenForm(FormName, View, FilterName, WhereCondition, DataMode, WindowMode, OpenArgs)

Kullanılabilecek diğer parametreler.

İyi çalışmalar
 

beab05

Özel Üye
Katılım
19 Mart 2007
Mesajlar
1,418
Excel Vers. ve Dili
Office 2013
Ben hala jetonumu yontuyorum ve merakla takip ediyorum ;)
 
Katılım
15 Kasım 2006
Mesajlar
583
Excel Vers. ve Dili
Ms Office 2003 Türkçe
Say&#305;n modal&#305;, buradaki stLinkCriteria where &#351;art&#305;n&#305; etkilemiyor mu?
Ben where &#351;art&#305;nda parametre kullanm&#305;yorum.
 
Katılım
15 Kasım 2006
Mesajlar
583
Excel Vers. ve Dili
Ms Office 2003 Türkçe
beab05, olay, sorgular b&#246;l&#252;m&#252;ndeki bir sorgunun select inde kullan&#305;lan bir de&#287;i&#351;kene de&#287;er aktarmak.
 
Katılım
15 Kasım 2006
Mesajlar
583
Excel Vers. ve Dili
Ms Office 2003 Türkçe
Millete at&#305;p tutuyoruz &#246;rnek eklemiyorsun diye ama biz de eklemiyoruz.

T&#252;m &#252;&#351;enge&#231;li&#287;imi b&#305;rak&#305;p bir &#246;rnek haz&#305;rlayay&#305;m en iyisi. :)
 

beab05

Özel Üye
Katılım
19 Mart 2007
Mesajlar
1,418
Excel Vers. ve Dili
Office 2013
O de&#287;i&#351;kene de&#287;er aktarmak oldu&#287;unu anlad&#305;m ama o de&#287;er zaten ayn&#305; database i&#231;inde olmayacak m&#305;? Dolay&#305;s&#305;yla bir module fonksiyon olarak konulmas&#305;n&#305; neden istemedin anlamad&#305;m? Harici bir yerden verilecekse "ve d&#305;&#351;ar&#305;dan g&#246;nderece&#287;im parametrelerle bu query leri kullanay&#305;m" dedin, buna da tak&#305;ld&#305;m ;) Stored procedur bile geliyor akl&#305;ma.. Neyse &#246;rne&#287;i bekleyelim..
 
Son düzenleme:
Katılım
15 Kasım 2006
Mesajlar
583
Excel Vers. ve Dili
Ms Office 2003 Türkçe
Örnek Ekte.

Şimdi olaydan da bahsedeyim biraz:

tabloda kdv_oran alnı ve miktar alanı var.

Eğer kdv_oran = 0 ise işlem gayri resmi işlem, > 0 ise resmi işlem olarak adlandırılıyor.

Şimdi form1 i açtığımda v_g yi istiyor.

v_g yi istemeden bu işi nasıl hallederim? soru bu.

v_g ye R değeri verirsem gayri resmi hareket gören stoklar görünecek
v_g ye G değeri verirsem resmi hareket gören stoklar görünecek
boş geçersem de ayırım yapmadan gösterecek.

Şimdi anlatabildim umarım.
 

beab05

Özel Üye
Katılım
19 Mart 2007
Mesajlar
1,418
Excel Vers. ve Dili
Office 2013
Merhaba;

Stored procedures / queries tam size g&#246;re; olu&#351;turaca&#287;&#305;n&#305;z procedurlere isted&#287;iniz her yerden de&#287;i&#351;ken de atayabilirsiniz local veya harici ayr&#305;ca bu procedurleri de istedi&#287;iniz heryerden &#231;a&#287;&#305;rabilirsiniz..

&#214;rne&#287;in;

Kod:
Dim confirma As ADODB.Connection
    Dim strProcedure As String
    
    Set confirma= Application.CurrentProject.Connection
    strProcedure = "CREATE PROCEDURE procedur_ismi " & _
                   "AS " & _
                   " Select alan from tablo"    
    confirma.Execute strProcedure
    confirma.Close
CREATE ProcedureName
(ParameterName1 DataType, ParameterName2 DataType, ParameterName_n DataType_n)
AS
Body of the Procedure


Kod:
Private Sub buton_Click()
    Dim confirma As ADODB.Connection
    Dim strProcedure As String
    
    Set confirma = Application.CurrentProject.Connection
    strProcedure = "EXECUTE procedur_ismi ;"
    
    confirma.Execute strProcedure
    confirma.Close
End Sub
butona, loada ya da nereye isterseniz &#231;al&#305;&#351;t&#305;rabilirsiniz..

v_g de&#287;i&#351;kenine de do&#287;ru tan&#305;mlamalarla "Parameters.Add " ile istedi&#287;iniz yerden veri alabilirsiniz..

Olay&#305;n g&#252;zelli&#287;i hali haz&#305;rda bekleyen sakl&#305; bir yordam&#305;n&#305;z oluyor.. Ayr&#305;ca view olu&#351;turma da i&#351;inize yarayabilir query gibi oluyor ama henuz fark&#305; var m&#305; yok mu &#231;&#305;kartamad&#305;m..

Asl&#305;nda biraz kafam da kar&#305;&#351;t&#305; ama sizin ihtiyac&#305;n&#305;z "stored" dir.. Bir de tablolarda hesaplanm&#305;&#351; alan var sanki!!!
 
Son düzenleme:
Katılım
6 Şubat 2005
Mesajlar
1,467
Sn yeni54
A&#231;&#305;l&#305;&#351;ta, Form'un Kay&#305;t kayna&#287;&#305;n&#305; ve stok_id alan&#305; ile Mik alan&#305;n&#305;n Denetim kaynaklar&#305;n&#305; bo&#351; belirleseniz. Forma hi&#231; bir de&#287;er gelmeyecektir.
Daha sonra Formun KeyUp olay&#305;nda, Kay&#305;t Kayna&#287;&#305; ve alanlar&#305;n Denetim kaynaklar&#305;n&#305; basaca&#287;&#305;n&#305;z tu&#351;lara g&#246;re ayarlasan&#305;z. &#199;are olabilir mi?
 
Katılım
15 Kasım 2006
Mesajlar
583
Excel Vers. ve Dili
Ms Office 2003 Türkçe
Nihayet...

&#199;ok da basitmi&#351;.

&#350;&#246;yleki:

tblMusteriler ad&#305;nda bir tablomuz olsun. alanlarinin bir kismi:
......
......
adi....... metin (adi ve soyadi alan&#305;, &#351;ah&#305;s bilgileri i&#231;in kullan&#305;l&#305;yor olacak)
soyadi.. metin
unvani.. metin (unvani alani, firma bilgileri i&#231;in kullan&#305;l&#305;yor olacak)
.....
.....
&#351;eklinde olsun.

&#350;imdi, d&#305;&#351;ar&#305;dan parametre olarak verece&#287;imiz p_firma_sahis parametresine
g&#246;re firma bilgilerini veya &#351;ah&#305;s bilgilerini getirecek Sorgu1 ad&#305;nda bir sorgu olu&#351;tural&#305;m.

Yani,
Sorgu1: (select iif([p_firma_sahis] = 'F',unvan,adi & ' ' & soyadi) from tblMusteriler)
&#351;eklinde.
(Burada kulland&#305;&#287;&#305;m&#305;z p_firma_sahis parametresinin tablo alanlar&#305; ile hi&#231;bir ilgisi yok.)

Bu sorgumuzu, Form1 formumuza veri kayna&#287;&#305; olarak ba&#287;layal&#305;m.
Bu ba&#287;lama i&#351;lemini, formun &#246;zellikler ekran&#305;nda de&#287;il, Form_open olay&#305;nda halledece&#287;iz.

Kod:
Option Compare Database
Option Explicit

Dim db As Database
Dim qr As [COLOR="red"]DAO.QueryDef[/COLOR]

Private Sub Form_Open(Cancel As Integer)
    Set db = CurrentDb
    [COLOR="Blue"]Set qr = db.QueryDefs("Sorgu1")[/COLOR]
    [COLOR="Red"]qr.Parameters("p_firma_sahis") = "F"[/COLOR]
 
    [COLOR="Blue"]Set Me.Recordset = qr.OpenRecordset[/COLOR]
    
End Sub

Private Sub Form_Close()
    Set qr = Nothing
    Set db = Nothing
End Sub
Bu mod&#252;lde, DAO.QueryDef nesnesini kulland&#305;k.
Set qr = db.QueryDefs("Sorgu1") sat&#305;r&#305; ile Sorgu1 i haf&#305;zada olu&#351;turduk.
QueryDefs in &#246;zellikleri ve fonksiyonlar&#305; incelendi&#287;inde, bizim i&#351;imize yarayacak Parameters ve OpenRecordset &#246;zellik ve fonksiyonu oldu&#287;unu g&#246;r&#252;yoruz.
Parameters &#246;zelli&#287;i ile sorgumuzda kulland&#305;&#287;&#305;m&#305;z parametrelere de&#287;er aktar&#305;m&#305; yapabiliyoruz.
Yani qr.Parameters("p_firma_sahis") = "R" sat&#305;r&#305; ile. Burada istedi&#287;imiz kadar parametre kullanabiliriz.
OpenRecordset ise bu sorguyu i&#351;letip geriye bir recordset nesnesi d&#246;nd&#252;r&#252;yor.
&#304;&#351;te bu recordset nesnesini Form1 imize ba&#287;lad&#305;&#287;&#305;m&#305;z anda i&#351;lemimiz ger&#231;ekle&#351;mi&#351; oluyor. yani Set Me.Recordset = qr.OpenRecordset sat&#305;r&#305; ile.

&#350;imdi bu bize ne sa&#287;lad&#305;. Tamamen esneklik.
Art&#305;k herhangi bir parametreli sorgumuzu, herhangi bir formumuza veya raporumuza
rahatl&#305;kla ba&#287;layabilece&#287;iz.
 

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
Bir istek

Sn. yeni54

Merhabalar, geçmiş bayramınız kutlu olsun. Sizden bir ricam var, takıldığınız konuları siteye genişce yazdınız ve aldığınız yanıta göre de sanırım, sorunu çözdünüz. Acaba son halini yükleyebilir misiniz?

Burada yazılanlar ile dosya içeriğini karşılaştırıp kendi adıma olayı
n inceliğini anlamaya çalışacağım.

Teşekkürler.
 
Üst