{"id":238,"date":"2015-12-17T00:21:37","date_gmt":"2015-12-16T21:21:37","guid":{"rendered":"http:\/\/www.cuneytbayrak.com\/?p=238"},"modified":"2025-02-21T00:23:20","modified_gmt":"2025-02-20T21:23:20","slug":"vba-excelde-hucreden-sql-sorgusu-yapmak","status":"publish","type":"post","link":"http:\/\/www.cuneytbayrak.com\/?p=238","title":{"rendered":"VBA Excelde H\u00fccreden Sql Sorgusu Yapmak"},"content":{"rendered":"<p>Baz\u0131 \u00e7al\u0131\u015fmalarda excele d\u0131\u015fardan datalar\u00a0\u00e7ekmek isteyebiliriz. Bu veriler herhangi bir database\u2019den olabilece\u011fi gibi bir ba\u015fka excel dosyas\u0131ndan da olabilir. Genelde bir database\u2019e ba\u011flan\u0131p verileri oradan \u00e7ekmek isteriz. Verileri excel sayfalar\u0131na al\u0131p gerekli d\u00fczenlemeleri yapar\u0131z. Baz\u0131 durumlarda h\u00fccreden dinamik sql sorgular\u0131 yapmak pratik \u00e7\u00f6z\u00fcmler sunabilir. Tabi bunun metodunu ve syntax\u2019\u0131n\u0131 iyi bilmek gerekir. Normalde veriyi ald\u0131ktan sonra tablomuz \u00fczerinde sa\u011f t\u0131klay\u0131p a\u00e7\u0131lan men\u00fcden Tablo-&gt;Sorgu D\u00fczenle\u2019ye bas\u0131nca \u00f6n\u00fcm\u00fcze \u201cOLE DB Sorgusu D\u00fczenle\u201d penceresi gelir. Bu pencere 3 b\u00f6l\u00fcmden olu\u015fmaktad\u0131r. Ba\u011flant\u0131, Komut T\u00fcr\u00fc, Komut Metni. Bu makalemizin konusu Komut Metni oldu\u011fu i\u00e7in sadece bu k\u0131sm\u0131na odaklanaca\u011f\u0131m. Komut T\u00fcr\u00fcn\u00fc \u201cSQL\u201d olarak se\u00e7ip Komut Metni alan\u0131na istedi\u011fimiz Sql sorgusunu yazar ve verilerimizi bu sorguya g\u00f6re \u00e7ekebiliriz. \u00d6rnek vermek gerekirse a\u015fa\u011f\u0131da ki gibi bir sorgu yazd\u0131\u011f\u0131m\u0131zda,<\/p>\n<div class=\"wp-block-codemirror-blocks code-block \">\n<pre class=\"CodeMirror\" data-setting=\"{&quot;mode&quot;:&quot;sql&quot;,&quot;mime&quot;:&quot;text\/x-sql&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:true,&quot;lineWrapping&quot;:false,&quot;styleActiveLine&quot;:false,&quot;readOnly&quot;:true,&quot;align&quot;:&quot;&quot;}\">select * from satisverileri where yil=2015<\/pre>\n<\/div>\n<p>satisverileri tablosundan 2015 y\u0131l\u0131n\u0131n verilerini \u00e7ekip al\u0131r\u0131z.<\/p>\n<div class=\"wp-block-codemirror-blocks code-block \">\n<pre class=\"CodeMirror\" data-setting=\"{&quot;mode&quot;:&quot;sql&quot;,&quot;mime&quot;:&quot;text\/x-sql&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:true,&quot;lineWrapping&quot;:false,&quot;styleActiveLine&quot;:false,&quot;readOnly&quot;:true,&quot;align&quot;:&quot;&quot;}\">select * from satisverileri where yil=2015 and firmaismi=\"abc\"<\/pre>\n<\/div>\n<p>Yada yukar\u0131da ki gibi bir sorgu yazd\u0131\u011f\u0131m\u0131zda, satisverileri tablomuzdan abc firmas\u0131n\u0131n 2015 y\u0131l\u0131 verilerini \u00e7ekip al\u0131r\u0131z. Bu gibi sorgular\u0131 art\u0131rmak m\u00fcmk\u00fcn. Konumuz bu de\u011fil. As\u0131l konumuz, her defas\u0131nda tabloda sa\u011f t\u0131klay\u0131p komut metni ekran\u0131n\u0131 a\u00e7\u0131p sorgu yazmaktansa bunu herhangi bir h\u00fccreden de\u011fer alarak yapmak. As\u0131l konumuz bu. \u00d6rne\u011fin; firma ismini h\u00fccreden de\u011fi\u015ftirdik\u00e7e tablomuz o firma ismine g\u00f6re yeniden refresh olsa. Bu \u00e7ok daha selektif bir yap\u0131 sunacakt\u0131r bize. Peki h\u00fccredeki de\u011feri sorgumuza nas\u0131l dahil edece\u011fiz. Hi\u00e7 uzatmadan size a\u015fa\u011f\u0131da ki kodu veriyorum.<\/p>\n<div class=\"wp-block-codemirror-blocks code-block \">\n<pre class=\"CodeMirror\" data-setting=\"{&quot;mode&quot;:&quot;vb&quot;,&quot;mime&quot;:&quot;text\/x-vb&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:true,&quot;lineWrapping&quot;:false,&quot;styleActiveLine&quot;:false,&quot;readOnly&quot;:true,&quot;align&quot;:&quot;&quot;}\">Sub hucredensorguyap()\r\n \r\n On Error Resume Next\r\n Range(\"A2\").Select\r\n With Selection.ListObject.QueryTable\r\n .Connection = Array( _\r\n \"OLEDB;Provider=SQLOLEDB.1;Persist Security Info=True;User ID=*****;Password=********;Initial Catalog=*****;Data Source=*********;Use Procedure for\" _\r\n , _\r\n \" Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=CBAYRAK;Use Encryption for Data=False;Tag with column collation w\" _\r\n , \"hen possible=False\")\r\n .CommandType = xlCmdSql\r\n .CommandText = Array(\"select * from dbo.Av_Satis_100 where CariUnvan like '%\" &amp; Worksheets(\"Sayfa1\").Range(\"A1\").Value &amp; \"%'\")\r\n .Refresh BackgroundQuery:=False\r\n End With\r\nEnd Sub<\/pre>\n<\/div>\n<p>Bu kodu biraz a\u00e7\u0131klayay\u0131m. Kod ba\u015flang\u0131c\u0131nda \u201cRange(\u201cA2\u2033).Select\u201d i\u015flemi, tablomuzun 2. sat\u0131rdan itibaren ba\u015flad\u0131\u011f\u0131,\u201dA1\u2033 h\u00fccresinde ise sorgulama yapaca\u011f\u0131m\u0131z \u00a0varsay\u0131m\u0131ndan kaynaklanmaktad\u0131r. \u201cRange(\u201cA2\u2033).Select\u201d yaparak bir \u015fekilde tablo \u00fczerinde bir h\u00fccrenin select olmas\u0131n\u0131 sa\u011flamak ve b\u00f6ylece with\u2026..end with blo\u011funda Selection (se\u00e7ili olan) ile ba\u015flayan kod k\u0131sm\u0131n\u0131n hata vermesini engellemek. Aksi takdirde tablo \u00fczerinde bir alan select olmazsa \u201cwith\u2026..end with\u201d blo\u011fu hata verir. Burada illa \u201cA2\u201d h\u00fccresi select edilmek zorunda de\u011fildir. Tablo \u00fczerine denk gelecek herhangi bir h\u00fccrede olabilir pekala. \u201cWith\u2026\u2026. End With\u201d blo\u011funa bakacak olursak, se\u00e7ili olan querytable (sorgu sonucu elde edilen tablo demek bu) \u2018\u0131n Connection ayarlar\u0131n\u0131 i\u00e7eren bir bloktur. \u201cArray parantez\u201d i\u00e7inde ki ifadeler bizim sql databasemiz ile olan ba\u011flant\u0131m\u0131z\u0131 sa\u011flayan connectionstring ifadelerdir. Bu ifadeleri elbette ezberlemek yersiz. Burada ufak \u00e7apl\u0131 bir kurnazl\u0131k yapmak m\u00fcmk\u00fcn. Tablomuz \u00fczerinde sa\u011f t\u0131klay\u0131p a\u00e7\u0131lan men\u00fcden Tablo-&gt;Sorgu D\u00fczenle\u2019ye bas\u0131p \u00f6n\u00fcm\u00fcze gelen \u201cOLE DB Sorgusu D\u00fczenle\u201d penceresinden \u201cBa\u011flant\u0131\u201d b\u00f6lmesinden bu ifadeyi copy-paste yapabiliriz. \u201cSelection.ListObject.QueryTable.Connection = Array(\u201cOLEDB;\u201d den sonra yap\u0131\u015ft\u0131r diyece\u011fiz buna dikkat edelim. Bu ad\u0131mlar\u0131 izah ettikten sonra esas konumuz olan h\u00fccreden al\u0131nan de\u011fere g\u00f6re sorgulama k\u0131sm\u0131na gelebiliriz. \u201cWith\u2026\u2026End With\u201d blo\u011fu i\u00e7erisinde ki \u201cCommandText=\u201d alan\u0131na tan\u0131mlanan sorgu bizim as\u0131l i\u015fimizi yapacak olan k\u0131s\u0131md\u0131r. Buraya dikkat etti\u011finizde asl\u0131nda klasik bir sql sorgusu ile kar\u015f\u0131 kar\u015f\u0131ya oldu\u011fumuzu farkedeceksiniz. \u201d\u00a0<strong>select * from satisverileri where firmaismi like \u2018%\u201d &amp; Worksheets(\u201cSayfa1\u201d).Range(\u201cA1\u201d).Value &amp; \u201c%\u2019<\/strong>\u00a0\u201d bu ifade, satisverileri tablosunun firmaismi kolunu alt\u0131nda ki verilerden i\u00e7inde \u201cSayfa1\u201d de ki \u201cA1\u201d h\u00fccresinde yer alan string ifade ge\u00e7en verileri \u00e7ekip almaktad\u0131r. Bu sorguyu normal bir \u015fekilde yazacak olsa idik\u00a0<strong>\u201d select * from satisverileri where firmaismi like \u2018%abc%\u2019 \u201d\u00a0<\/strong>\u015feklinde yazmam\u0131z gerekecekti. Yani i\u00e7inde abc ifadesi ge\u00e7en firma isimlerini se\u00e7ip getir demi\u015f olacakt\u0131k. Bu iki sorgu asl\u0131nda birbirinin ayn\u0131s\u0131. \u2018%\u2026\u2026.%\u2019 ifadesinin i\u00e7ine yaz\u0131lan k\u0131s\u0131mlar\u0131nda fark olu\u015fmaktad\u0131r. \u0130\u015fte h\u00fccrede ki de\u011fere g\u00f6re sorgu yapmak istedi\u011fimiz de bu alana\u00a0<strong>\u201c&amp; Worksheets(\u201cSayfa1\u201d).Range(\u201cA1\u2033).Value &amp;\u201d\u00a0<\/strong>yazarsak art\u0131k h\u00fccrede ki de\u011fere g\u00f6re sorgumuzu dinamik bir \u015fekilde yapm\u0131\u015f oluruz.<\/p>\n<p>Kolay gele\u2026<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Baz\u0131 \u00e7al\u0131\u015fmalarda excele d\u0131\u015fardan datalar\u00a0\u00e7ekmek isteyebiliriz. Bu veriler herhangi bir database\u2019den olabilece\u011fi gibi bir ba\u015fka excel dosyas\u0131ndan da olabilir. Genelde bir database\u2019e ba\u011flan\u0131p verileri oradan \u00e7ekmek isteriz. Verileri excel sayfalar\u0131na&#8230;<\/p>\n<div class=\"more-link-wrapper\"><a class=\"more-link\" href=\"http:\/\/www.cuneytbayrak.com\/?p=238\">Devam\u0131n\u0131 Oku<span class=\"screen-reader-text\">VBA Excelde H\u00fccreden Sql Sorgusu Yapmak<\/span><\/a><\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"iawp_total_views":4,"footnotes":""},"categories":[5],"tags":[78],"class_list":["post-238","post","type-post","status-publish","format-standard","hentry","category-excel-vba","tag-cellsqlquerry","excerpt"],"_links":{"self":[{"href":"http:\/\/www.cuneytbayrak.com\/index.php?rest_route=\/wp\/v2\/posts\/238","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.cuneytbayrak.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.cuneytbayrak.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.cuneytbayrak.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.cuneytbayrak.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=238"}],"version-history":[{"count":1,"href":"http:\/\/www.cuneytbayrak.com\/index.php?rest_route=\/wp\/v2\/posts\/238\/revisions"}],"predecessor-version":[{"id":240,"href":"http:\/\/www.cuneytbayrak.com\/index.php?rest_route=\/wp\/v2\/posts\/238\/revisions\/240"}],"wp:attachment":[{"href":"http:\/\/www.cuneytbayrak.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=238"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.cuneytbayrak.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=238"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.cuneytbayrak.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=238"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}