Sql de gariplikler...
Nereden Yazdırıldığı: ERP Nedir? | Türkiye'nin ERP Forum Platformu
Kategori: ERP Genel
Forum Adı: ERP ve Excel
Forum Tanımlaması: ERP'den Excel'e Veri Çekmek ve Excel İle İlgili Bilgiler ve Sorular İçin...
URL: http://www.erpne.org/forum_posts.asp?TID=1018
Tarih: 22 Kasım 2024 Saat 00:42 Program Versiyonu: Web Wiz Forums 11.10 - http://www.webwizforums.com
Konu: Sql de gariplikler...
Mesajı Yazan: hbulus
Konu: Sql de gariplikler...
Mesaj Tarihi: 15 Temmuz 2008 Saat 14:37
Excel VBA'da asagidaki sql koduyla cari hareket listesi aliyorum.
Sql = "SELECT * FROM TBLCAHAR " Sql = Sql + " WHERE CARI_KOD='" + (Sayfa12.Cells(2, 1)) + "'" Sql = Sql + " ORDER BY TARIH ASC "
Bazi cari kodlari islemiyor. Bazilarinda güzel bir sekilde çalisiyor. Acaba nereye dikkat etmeliyim?
|
Cevaplar:
Mesajı Yazan: mbaykan
Mesaj Tarihi: 15 Temmuz 2008 Saat 15:54
Sayfa12.Cells(2,1) ifadesini Cstr(Sayfa12.Cells(2,1)) seklinde denermisin?
------------- Mehmet Baykan
|
Mesajı Yazan: Conari
Mesaj Tarihi: 15 Temmuz 2008 Saat 15:57
Sql = Sql + " WHERE CARI_KOD='" &Sayfa12.Cells(2, 1)&"'"
Çalistirmasi lazim.
------------- Netsisden vazgeçemiyorum. Beni engelliyor..
|
Mesajı Yazan: hbulus
Mesaj Tarihi: 15 Temmuz 2008 Saat 16:23
mbaykan Yazdı:
Sayfa12.Cells(2,1) ifadesini Cstr(Sayfa12.Cells(2,1)) seklinde denermisin?
|
Seklinde sonuç degismedi
|
Mesajı Yazan: hbulus
Mesaj Tarihi: 15 Temmuz 2008 Saat 16:25
Conari Yazdı:
Sql = Sql + " WHERE CARI_KOD='" &Sayfa12.Cells(2, 1)&"'"
Çalistirmasi lazim. |
Bu sekilde denedigimde ise cari kod kisiti verilmemis gibi tüm carileri döküyor. Arkadaslardan yeni fikirler bekliyorum.
|
Mesajı Yazan: mbaykan
Mesaj Tarihi: 15 Temmuz 2008 Saat 16:40
bazi carilerde dogru verip bazilarinda vermiyorsa, verdigi cari kodla, vermedigi cari kodu yazar misiniz?. Cari kodunuzda I,S ve G biçiminde türkçe harf varsa Netsis'ten ek bir Fonksiyonla bu harflerin dogru bir sekilde sorgulanasini saglayabiliyorsunuz..
------------- Mehmet Baykan
|
Mesajı Yazan: hbulus
Mesaj Tarihi: 15 Temmuz 2008 Saat 16:45
Örnek olarak;
"GÜÇLÜ MOB." diye bir cari kodu deger döndürürken,
"MARIFET" seklindeki cari kod, hareketi olmasina ragmen deger döndürmüyor. Yani sadece Türkçe karakterlerle ilgili degil sanirim olay.
Bir de bu ek fonksiyon dediginiz nedir?
|
Mesajı Yazan: hbulus
Mesaj Tarihi: 15 Temmuz 2008 Saat 16:51
hbulus Yazdı:
Conari Yazdı:
Sql = Sql + " WHERE CARI_KOD='" &Sayfa12.Cells(2, 1)&"'"
Çalistirmasi lazim. |
Bu sekilde denedigimde ise cari kod kisiti verilmemis gibi tüm carileri döküyor. Arkadaslardan yeni fikirler bekliyorum. |
Bu arada Conari arkadasimdan özür dilerim. ben sql olan degisken ismini degistirmistim. Sizin yazdiginiz cevabi direk yapistirinca where blogunu görmedigi için arkadas tümünü listeliyormus. Sonradan farkettim . Düzelttigimde benim kodla sizinki ayni sonucu veriyor. Yani tüm cari kodlarda çalismadi.
|
Mesajı Yazan: mbaykan
Mesaj Tarihi: 15 Temmuz 2008 Saat 16:59
probleminiz çözüldü galiba benim Cstr(Sayfa12.Cells(2,1)) yazilisi da ayni sonucu veriyor mu? (vermesi gerekir)
------------- Mehmet Baykan
|
Mesajı Yazan: hbulus
Mesaj Tarihi: 15 Temmuz 2008 Saat 17:03
problem maalesef çözülmedi. Cstr(Sayfa12.Cells(2,1)) ifadesi de ayni sekilde davraniyor.
|
Mesajı Yazan: mbaykan
Mesaj Tarihi: 15 Temmuz 2008 Saat 17:41
2 Adet fonksiyon veriyorum
1.si VBA için Excel'de
2.si SQL'de her database içinde olusturulacak ondan sonra senin SQL stiring'in su sekilde olmali
... CARI_KOD = .dbo.W2NTRK('" + esctrk(Sayfa12.Cells(2,1)) +"') ORDER BY ..."
VBA için
Public Function esctrk(gstr) Dim geri As String geri = gstr geri = Replace(geri, "G", "~G") geri = Replace(geri, "S", "~S") geri = Replace(geri, "I", "~I") geri = Replace(geri, "g", "~g") geri = Replace(geri, "s", "~s") geri = Replace(geri, "i", "~i") esctrk = geri End Function
SQL için
CREATE FUNCTION [dbo].[W2NTRK](@A NVARCHAR(4000))
RETURNS NVARCHAR(4000)
AS
BEGIN
DECLARE @TMP NVARCHAR(4000)
SET @TMP = REPLACE(@A , N'~G', N'')--
SET @TMP = REPLACE(@TMP , N'~S', N'')--
SET @TMP = REPLACE(@TMP , N'~I', N'')--
SET @TMP = REPLACE(@TMP , N'~g', N'')--
SET @TMP = REPLACE(@TMP , N'~s', N'')--
SET @TMP = REPLACE(@TMP , N'~i', N'')--
RETURN @TMP
END
kolay gelsin
------------- Mehmet Baykan
|
Mesajı Yazan: hbulus
Mesaj Tarihi: 15 Temmuz 2008 Saat 17:47
Asagidaki gibi bir hata verdi;
"Run-time error....
cannot find either column '''' or the user-defined function or aggregate "dbo.W2NTRK", or the name is ambiguous."
|
Mesajı Yazan: mbaykan
Mesaj Tarihi: 15 Temmuz 2008 Saat 18:10
Aldiginiz hatayi CREATE FUNCTION ile baslayan satirlari Query Analyzer'da çalistirdiniz ve W2NTRK fonksiyonunu olusturtunuz degil mi? Bu fonksiyon Netsis'in TRK fonksiyonuna benzer. çalistiginiz database'de olusturulmalidir. VBA'da kullanirken ... .dbo.W2NTRK('"+esctrk(<metin>)+"') ... mavi renkli parantezlerin önünde ve arkasinda (açarken/kapatirken) tektirnak (') -parantez isareti yok-
------------- Mehmet Baykan
|
Mesajı Yazan: SERHAT
Mesaj Tarihi: 15 Temmuz 2008 Saat 19:01
Merhaba;
vba içinde ekrandan alinan deger için aramada problem yasiyorum.
TBLCASABIT.CARI_ISIM Like '" & Trim(txtad) & "%" & "' " için örnek verecek isek
mesela 'SERIF%' ile baslayan için getirmemektedir latin'den dolayi. S = Þ ,I=Ý olmasi gerekmekte, function için vba editürü içinde latin harfini kabül etmediginden replace yapamamaktayim. Bu konu da yardimci olabilirmisiniz.Tesekkürler.
------------- Serhat ÜLKER, www.eston.com
Gömleğin ilk düğmesi yanlış iliklenince diğerleri de yanlış gider.
|
Mesajı Yazan: hbulus
Mesaj Tarihi: 15 Temmuz 2008 Saat 19:01
Sql server'da dediginiz islemi yapmamistim. Simdi uyariniz üzerine yaptim. Exceldeki hata gerçektende kalkti. Ama sonuçlar yine ayni. Ben bir sey anlamadim bu isten. excel de denedigim sonuç vermeyen cari kodlari Netsis üzerinde deneyerek bakiyorum gerçekten hareket yok mu diye ama nafile. Where blogunu kaldirdigim zaman tüm hareketleri döküyor, o cari kodlari burada problemsiz (dogal olarak) döküyor.
|
Mesajı Yazan: Conari
Mesaj Tarihi: 16 Temmuz 2008 Saat 08:39
Profellerdan olusturdugunuz ve çekilen sql cümlesine bakin where den sonrasi nasil gidiyor?
------------- Netsisden vazgeçemiyorum. Beni engelliyor..
|
Mesajı Yazan: hbulus
Mesaj Tarihi: 16 Temmuz 2008 Saat 10:02
mbaykan Yazdı:
Public Function esctrk(gstr) Dim geri As String geri = gstr geri = Replace(geri, "G", "~G") geri = Replace(geri, "S", "~S") geri = Replace(geri, "I", "~I") geri = Replace(geri, "g", "~g") geri = Replace(geri, "s", "~s") geri = Replace(geri, "i", "~i") esctrk = geri End Function
|
Ilginç bir durum. Bunu bilmiyordum. Sn. mbaykan'in gönderdigi fonksiyonda
geri = Replace(geri, "I", "~I" satirindaki I harfini "~I" yerine "Ý" ile degistirmek istedim ama bir türlü olmuyor. Yani VBA da Word'deki gibi hem Türkçe hem de diger dilleri yanyana kullanamiyorum. Yapistirdigim zaman " ? " isareti çikiyor. Halbuki bunu becerirsek olay düzelecek.
|
Mesajı Yazan: mbaykan
Mesaj Tarihi: 16 Temmuz 2008 Saat 10:23
Mesajı Yazan: hbulus
Mesaj Tarihi: 16 Temmuz 2008 Saat 12:29
Sn. Mbaykan sorunu sizin fonksiyonla oynayarak su sekilde çözdüm;
Public Function esctrk(gstr) Dim geri As String geri = gstr geri = Replace(geri, "G", Sayfa12.Cells(1, 3)) geri = Replace(geri, "S", Sayfa12.Cells(1, 1)) geri = Replace(geri, "I", Sayfa12.Cells(1, 2)) esctrk = geri End Function
1., 2. ve 3. hücrelere Þ, Ý, Ð harflerini yerlestirdim ve sizin fonksiyonda replace islemine bu hücreleri soktum. Sonuç harika oldu. Gariptir Ö, Ç ve Ü harflerinde sorun yok sadece I, G ve S harflerinde bu gerekiyor. Ilginize çok tesekkür ederim.
Kolay gelsin.
|
Mesajı Yazan: mbaykan
Mesaj Tarihi: 16 Temmuz 2008 Saat 12:38
excel'deki hücrelere G,S ve I'nin çevrimini hücrelere koymak VBasic açisindan tasinabilirlik zorlugu çikartir. Bu fonksiyonu kullandiginiz her Excel tablosunda Sheet12 isimli bir sayfayi bulundurmak gerekir.
netsisnedir forum'unda SQL için yazdigim Function bir garip görünüyor, onu düzeltiyorum. Baska arkadaslarin isine yarar umarim.
CREATE FUNCTION [dbo].[W2NTRK](@A NVARCHAR(4000)) RETURNS NVARCHAR(4000) AS BEGIN DECLARE @TMP NVARCHAR(4000) SET @TMP = REPLACE(@A , N'~G', N'Ð') --G (SQL'de yumusak G görüntüsü SET @TMP = REPLACE(@TMP , N'~S', N'Þ') --S (SQL'de S görüntüsü SET @TMP = REPLACE(@TMP , N'~I', N'Ý') --I (SQL'de I harfi görüntüsü SET @TMP = REPLACE(@TMP , N'~g', N'ð') --g SET @TMP = REPLACE(@TMP , N'~s', N'þ') --s SET @TMP = REPLACE(@TMP , N'~i', N'ý') --i RETURN @TMP END
------------- Mehmet Baykan
|
Mesajı Yazan: hbulus
Mesaj Tarihi: 16 Temmuz 2008 Saat 13:20
Evet verdiginiz son function düzgün çalisti. Ama önceki çalismayinca bende kendimce alternatif üretmistim. Tsk.
|
|