Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
SQL Sorguda Türkçe Sorunu
#1
Arkadaşlar Merhaba; DBComboBox da türkçe karakterli bir veri girdiğimde filtre sonucu sıfır geliyor. Nasıl bir değişiklik yapmam gerekir? Yardımcı olur musunuz?

STOK_KODU ve GRUP_KODU Filitre alanlarım.

procedure TForm25.BitBtn1Click(Sender: TObject);
Var
STSabit : TStatusWindowHandle;
begin
STSabit := CreateStatusWindow('İşlemler Devam Ediyor. Lütfen Bekleyiniz !');
 try
 Sleep(2000);
 finally
RemoveStatusWindow(STSabit);
Form26.StokSabit.Close;
Form26.StokSabit.SQL.Clear;
Form26.StokSabit.SQL.Add('SELECT STOK_KODU,STOK_ADI,GRUP_KODU,SATIS_FIAT1,SATIS_FIAT2,SATIS_FIAT3,SATIS_FIAT4,ALIS_FIAT1,ALIS_FIAT2,ALIS_FIAT3,ALIS_FIAT4 FROM TBLSTSABIT WHERE 1=1');
if Edit1.Text<>'' then
  Form26.StokSabit.SQL.Add('And Stok_Kodu='+ QuotedStr(Edit1.Text));
if DBComboBox1.Text<>'' then
  Form26.StokSabit.SQL.Add('And Grup_Kodu='+ QuotedStr(DBComboBox1.Text));
Cevapla
#2
(20-08-2020, Saat: 07:03)OZCANK Adlı Kullanıcıdan Alıntı: Arkadaşlar Merhaba; DBComboBox da türkçe karakterli bir veri girdiğimde filtre sonucu sıfır geliyor. Nasıl bir değişiklik yapmam gerekir? Yardımcı olur musunuz?

STOK_KODU ve GRUP_KODU Filitre alanlarım.

procedure TForm25.BitBtn1Click(Sender: TObject);
Var
STSabit : TStatusWindowHandle;
begin
STSabit := CreateStatusWindow('İşlemler Devam Ediyor. Lütfen Bekleyiniz !');
 try
 Sleep(2000);
 finally
RemoveStatusWindow(STSabit);
Form26.StokSabit.Close;
Form26.StokSabit.SQL.Clear;
Form26.StokSabit.SQL.Add('SELECT STOK_KODU,STOK_ADI,GRUP_KODU,SATIS_FIAT1,SATIS_FIAT2,SATIS_FIAT3,SATIS_FIAT4,ALIS_FIAT1,ALIS_FIAT2,ALIS_FIAT3,ALIS_FIAT4 FROM TBLSTSABIT WHERE 1=1');
if Edit1.Text<>'' then
  Form26.StokSabit.SQL.Add('And Stok_Kodu='+ QuotedStr(Edit1.Text));
if DBComboBox1.Text<>'' then
  Form26.StokSabit.SQL.Add('And Grup_Kodu='+ QuotedStr(DBComboBox1.Text));

Uygulama girişinde Database in Collation a bakıyorum.

COLL.Close;
       COLL.SQL.Clear;
       COLL.SQL.Add('SELECT name, collation_name FROM sys.databases WHERE NAME=' + #39 + sirketadi + #39 + '');
       COLL.Open;
       if COLLcollation_name.AsString = 'Turkish_CI_AS' then
         sqldil := 'E'
       else
         sqldil := 'H';


function turkce(deger:string):string;
VAR
deger2:string;
begin
deger2:=deger;
if sqldil='H' then
begin
deger2:=StringReplace(deger2,'Ş','Þ', [rfReplaceAll]);
deger2:=StringReplace(deger2,'İ','Ý', [rfReplaceAll]);
deger2:=StringReplace(deger2,'Ğ','Ð', [rfReplaceAll]);
deger2:=StringReplace(deger2,'ı','ý', [rfReplaceAll]);
deger2:=StringReplace(deger2,'ş','þ', [rfReplaceAll]);
deger2:=StringReplace(deger2,'ğ','ð', [rfReplaceAll]);
end;
deger2:=StringReplace(deger2,#39,#39+#39, [rfReplaceAll]);
Result:=#39+deger2+#39;
end;
Cevapla
#3
SELECT cümlesinin sonuna şunu bir ekleyip deneyebilirsiniz.
Şunun gibi.

Select * From tablo Where isim like "%Ayşe%" COLLATE SQL_Latin1_General_CP1_CI_AS;
Cevapla
#4
(27-08-2020, Saat: 21:01)ysfckr Adlı Kullanıcıdan Alıntı: SELECT cümlesinin sonuna şunu bir ekleyip deneyebilirsiniz.
Şunun gibi.

Select * From tablo Where isim like "%Ayşe%" COLLATE SQL_Latin1_General_CP1_CI_AS;


Asıl sorunum 
SQL Select edince listelenen kayıtların içeriği bu şekilde ; 

"'Ş','Þ'"
"'İ','Ý'"
"'Ğ','Ð'"
"'ı','ý'"
"'ş','þ'"
"'ğ','ð'"

DBCombobox1 de türkçe 'ŞADİ' yazdığım zaman boş geliyor. SQL deki 'Ş' ve 'İ' bulamadığı için.

Bu şekilde kullanmayı denedim olmadı.
if DBComboBox1.Text<>'' then
Form26.StokSabit.SQL.Add('And Grup_Kodu='+ QuotedStr(DBComboBox1.Text) COLLATE SQL_Latin1_General_CP1_CI_AS);
Cevapla
#5
Arkadaşlar SQL de bu şekilde sorgulama yaptığım da Rapor boş geliyor sebebini bir türlü bulamadım rica etsem yardımcı olabilir misiniz ?;
SELECT STOK_KODU,STOK_ADI,GRUP_KODU,SATIS_FIAT1,SATIS_FIAT2,SATIS_FIAT3,SATIS_FIAT4,ALIS_FIAT1,ALIS_FIAT2,ALIS_FIAT3,ALIS_FIAT4 FROM TBLSTSABIT WHERE GRUP_KODU COLLATE TURKISH_CI_AS='TARİŞYAĞ' AND 1=1
Cevapla
#6
Arkadaşlar Merhaba;
Türkçe karakter ile başım yine dertte yardımlarınıza ihtiyacım var.

DECLARE @ARA VARCHAR(60)
SET @ARA = REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(@ARA,'Ş','_'),'Ç','_'),'Ö','_'),'İ','_'),'G','_'),'Ü','_')
SELECT DBO.TRK(GRUP_KODU) AS GKOD
FROM TBLSTSABIT 
where DBO.TRK(GRUP_KODU) LIKE '%T_BET%'

bu şekilde rapor dönüyor ama Delphi 'ye uyarlayamadım.

Form26.StokSabit.Close;
Form26.StokSabit.SQL.Clear;
Form26.StokSabit.SQL.Add('SELECT DISTINCT STOK_KODU,STOK_ADI,GRUP_KODU(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(GRUP_KODU,''Ş'',''_''),''Ç'',''_''),''Ö'',''_''),''İ'',''_''),''Ğ'',''_''),''Ü'',''_'') AS GKOD,'+
                        'SATIS_FIAT1,SATIS_FIAT2,SATIS_FIAT3,SATIS_FIAT4,ALIS_FIAT1,ALIS_FIAT2,ALIS_FIAT3,ALIS_FIAT4 FROM TBLSTSABIT WHERE 1=1');
if Edit1.Text<>'' then
  Form26.StokSabit.SQL.Add('And Stok_Kodu='+ QuotedStr(Edit1.Text));
if DBComboBox1.Text<>'' then
  Form26.StokSabit.SQL.Add('And Grup_Kodu='+ QuotedStr(DBComboBox1.Text));
if DBComboBox2.Text<>'' then
Cevapla
#7
Bir tane procedure yazın orada halledin mesela;

Create Proc Sp_Rapor1 ( @STOK_KODU varchar(30) = null  ,   @GRUP_KODU varchar(30) = null )
as
begin

-- BURADA KARAKTER TEMİZLİĞİN YAPILIYOR
SET @STOK_KODU = REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(@STOK_KODU,'Ş','_'),'Ç','_'),'Ö','_'),'İ','_'),'G','_'),'Ü','_')
SET @GRUP_KODU = REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(@GRUP_KODU,'Ş','_'),'Ç','_'),'Ö','_'),'İ','_'),'G','_'),'Ü','_')

SELECT DISTINCT STOK_KODU,STOK_ADI,GRUP_KODU GKOD ,SATIS_FIAT1,SATIS_FIAT2,SATIS_FIAT3,SATIS_FIAT4,ALIS_FIAT1,ALIS_FIAT2,ALIS_FIAT3,ALIS_FIAT4 
FROM TBLSTSABIT 
WHERE STOK_KODU LIKE '%'+COALESCE( NULLIF( @STOK_KODU , '') , STOK_KODU )+'%'  AND  GRUP_KODU LIKE '%'+COALESCE( NULLIF( @GRUP_KODU , '') , GRUP_KODU ) +'%'

end


-- bu şekilde çalıştırırsanız koşulsuz tüm tablo gelir
exec  Sp_Rapor1 

-- bu şekilde çalıştırırsanız stok kodu aliler gelir
exec  Sp_Rapor1 @STOK_KODU ='ALİ' 

-- bu şekilde çalıştırırsanız grup kodu veliler gelir
exec  Sp_Rapor1 @GRUP_KODU ='VELİ' 

-- bu şekilde çalıştırırsanız stok kodu aliler ve grup kodu veliler gelir
exec  Sp_Rapor1 @STOK_KODU ='ALİ'  , @GRUP_KODU ='VELİ'
Sorsaydı Bilirdi Sormuyor ki Bilsin.
Bilseydi Sorardı Bilmiyor ki Sorsun. 
Cevapla
#8
(08-09-2020, Saat: 08:54)bydelphi Adlı Kullanıcıdan Alıntı: Bir tane procedure yazın orada halledin mesela;

Create Proc Sp_Rapor1 ( @STOK_KODU varchar(30) = null  ,   @GRUP_KODU varchar(30) = null )
as
begin

-- BURADA KARAKTER TEMİZLİĞİN YAPILIYOR
SET @STOK_KODU = REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(@STOK_KODU,'Ş','_'),'Ç','_'),'Ö','_'),'İ','_'),'G','_'),'Ü','_')
SET @GRUP_KODU = REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(@GRUP_KODU,'Ş','_'),'Ç','_'),'Ö','_'),'İ','_'),'G','_'),'Ü','_')

SELECT DISTINCT STOK_KODU,STOK_ADI,GRUP_KODU GKOD ,SATIS_FIAT1,SATIS_FIAT2,SATIS_FIAT3,SATIS_FIAT4,ALIS_FIAT1,ALIS_FIAT2,ALIS_FIAT3,ALIS_FIAT4 
FROM TBLSTSABIT 
WHERE STOK_KODU LIKE '%'+COALESCE( NULLIF( @STOK_KODU , '') , STOK_KODU )+'%'  AND  GRUP_KODU LIKE '%'+COALESCE( NULLIF( @GRUP_KODU , '') , GRUP_KODU ) +'%'

end


-- bu şekilde çalıştırırsanız koşulsuz tüm tablo gelir
exec  Sp_Rapor1 

-- bu şekilde çalıştırırsanız stok kodu aliler gelir
exec  Sp_Rapor1 @STOK_KODU ='ALİ' 

-- bu şekilde çalıştırırsanız grup kodu veliler gelir
exec  Sp_Rapor1 @GRUP_KODU ='VELİ' 

-- bu şekilde çalıştırırsanız stok kodu aliler ve grup kodu veliler gelir
exec  Sp_Rapor1 @STOK_KODU ='ALİ'  , @GRUP_KODU ='VELİ'

Kardeşim çok teşekkür ederim bu şekilde oldu.
Cevapla
#9
(08-09-2020, Saat: 09:47)OZCANK Adlı Kullanıcıdan Alıntı:
(08-09-2020, Saat: 08:54)bydelphi Adlı Kullanıcıdan Alıntı: Bir tane procedure yazın orada halledin mesela;

Create Proc Sp_Rapor1 ( @STOK_KODU varchar(30) = null  ,   @GRUP_KODU varchar(30) = null )
as
begin

-- BURADA KARAKTER TEMİZLİĞİN YAPILIYOR
SET @STOK_KODU = REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(@STOK_KODU,'Ş','_'),'Ç','_'),'Ö','_'),'İ','_'),'G','_'),'Ü','_')
SET @GRUP_KODU = REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(@GRUP_KODU,'Ş','_'),'Ç','_'),'Ö','_'),'İ','_'),'G','_'),'Ü','_')

SELECT DISTINCT STOK_KODU,STOK_ADI,GRUP_KODU GKOD ,SATIS_FIAT1,SATIS_FIAT2,SATIS_FIAT3,SATIS_FIAT4,ALIS_FIAT1,ALIS_FIAT2,ALIS_FIAT3,ALIS_FIAT4 
FROM TBLSTSABIT 
WHERE STOK_KODU LIKE '%'+COALESCE( NULLIF( @STOK_KODU , '') , STOK_KODU )+'%'  AND  GRUP_KODU LIKE '%'+COALESCE( NULLIF( @GRUP_KODU , '') , GRUP_KODU ) +'%'

end


-- bu şekilde çalıştırırsanız koşulsuz tüm tablo gelir
exec  Sp_Rapor1 

-- bu şekilde çalıştırırsanız stok kodu aliler gelir
exec  Sp_Rapor1 @STOK_KODU ='ALİ' 

-- bu şekilde çalıştırırsanız grup kodu veliler gelir
exec  Sp_Rapor1 @GRUP_KODU ='VELİ' 

-- bu şekilde çalıştırırsanız stok kodu aliler ve grup kodu veliler gelir
exec  Sp_Rapor1 @STOK_KODU ='ALİ'  , @GRUP_KODU ='VELİ'

Kardeşim çok teşekkür ederim bu şekilde oldu.

Delphi de şu şekilde mi? Kullanacam;

Form26.StokSabit.Close;
Form26.StokSabit.SQL.Clear;
Form26.StokSabit.SQL.Add('SELECT STOK_KODU,STOK_ADI,GRUP_KODU,SATIS_FIAT1,SATIS_FIAT2,SATIS_FIAT3,SATIS_FIAT4,ALIS_FIAT1,ALIS_FIAT2,ALIS_FIAT3,ALIS_FIAT4 FROM TBLSTSABIT WHERE 1=1');
if Edit1.Text<>'' then
  Form26.StokSabit.SQL.Add('And Stok_Kodu='+ QuotedStr(Edit1.Text));
if DBComboBox1.Text<>'' then
  Form26.StokSabit.SQL.Add('And EXECUTE PROCEDURE ''SP_RAPOR1'' ''@GRUP_KODU =''+ QuotedStr(DBComboBox1.Text));
if DBComboBox2.Text<>'' then
  Form26.StokSabit.SQL.Add('And Kod_1='+ QuotedStr(DBComboBox2.Text));
if DBComboBox3.Text<>'' then
Cevapla
#10
(08-09-2020, Saat: 10:56)OZCANK Adlı Kullanıcıdan Alıntı:
(08-09-2020, Saat: 09:47)OZCANK Adlı Kullanıcıdan Alıntı: Kardeşim çok teşekkür ederim bu şekilde oldu.

Delphi de şu şekilde mi? Kullanacam;

Form26.StokSabit.Close;
Form26.StokSabit.SQL.Clear;
Form26.StokSabit.SQL.Add('SELECT STOK_KODU,STOK_ADI,GRUP_KODU,SATIS_FIAT1,SATIS_FIAT2,SATIS_FIAT3,SATIS_FIAT4,ALIS_FIAT1,ALIS_FIAT2,ALIS_FIAT3,ALIS_FIAT4 FROM TBLSTSABIT WHERE 1=1');
if Edit1.Text<>'' then
  Form26.StokSabit.SQL.Add('And Stok_Kodu='+ QuotedStr(Edit1.Text));
if DBComboBox1.Text<>'' then
  Form26.StokSabit.SQL.Add('And EXECUTE PROCEDURE ''SP_RAPOR1'' ''@GRUP_KODU =''+ QuotedStr(DBComboBox1.Text));
if DBComboBox2.Text<>'' then
  Form26.StokSabit.SQL.Add('And Kod_1='+ QuotedStr(DBComboBox2.Text));
if DBComboBox3.Text<>'' then





Form26.StokSabit.Close;

Form26.StokSabit.SQL.text := 
' EXEC SP_RAPOR1  @GRUP_KODU = '+ QuotedStr(DBComboBox1.Text)+'  ,  @STOK_KODU = '+ QuotedStr(DBComboBox2.Text);

Form26.StokSabit.open;



bu kadar.
kalanını proc zaten hallediyor.
Sorsaydı Bilirdi Sormuyor ki Bilsin.
Bilseydi Sorardı Bilmiyor ki Sorsun. 
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  türkçe karakter problemi delphiX14 4 460 27-12-2023, Saat: 10:03
Son Yorum: delphiX14
  Cas Terazi Veri gönderimi Delphi sürüm sorunu KUNTAY 12 4.418 08-11-2023, Saat: 00:06
Son Yorum: berkan
  TCMB Kur Almada Explorer Sertifika Sorunu Adem Kurt 3 622 24-10-2023, Saat: 15:14
Son Yorum: RAD Coder
  program exe icon sorunu cvheneburi 9 2.832 19-10-2023, Saat: 15:04
Son Yorum: harunyl
  TThread.Synchronize çalışmama sorunu muratmutlu 3 636 10-10-2023, Saat: 12:16
Son Yorum: Tuğrul HELVACI



Konuyu Okuyanlar: 1 Ziyaretçi