3.party uygulamada collation sorunu
Nereden Yazdırıldığı: ERP Nedir? | Türkiye'nin ERP Forum Platformu
Kategori: SQL
Forum Adı: SQL Veri Tabanı İşlemleri
Forum Tanımlaması: Table,View,Trigger,SELECT,UPDATE,INSERT...
URL: http://www.erpne.org/forum_posts.asp?TID=644
Tarih: 23 Kasım 2024 Saat 01:00 Program Versiyonu: Web Wiz Forums 11.10 - http://www.webwizforums.com
Konu: 3.party uygulamada collation sorunu
Mesajı Yazan: erdal_sert
Konu: 3.party uygulamada collation sorunu
Mesaj Tarihi: 14 Ocak 2008 Saat 15:39
Selamlar,
Netsis databse'ine 3. party uygulama yazan varmi acaba ?
Bu collation çok dert oluyor basima, söyleki;
VS.NET 2005 ve c# kullaniyorum, connection için sqlclient kullanirsam okudugum datadaki Türkçe karakterler bozuk geliyor.
I ler Ý
S ler Þ
G ler Ð olarak dönüyor.
Eger OleDb ( auto translate=false paremetresi ile) kullanirsam Türkçe karakterleri düzgün aliyorum fakat bu seferde yazarken ç leri c ve s leride s olarak yaziyor.
bende gittim yeni bir database yarattim ama Türkçe de sorun olmasin diye collation'u Turkish_CI_AI yaptim. ve Trigger'lar ile greken datalari netsis database'in den bu yeni database tasidirm.
Fakat bu seferde trigger lar bu Turkish_CI_AI databse'ine yazarken türkçe karakterler
I ler Y ye
S ler ? ye
dönüsüyor.
sql server gruplarina sordum, kullandiginiz makinenin bölgesel ayarlarina bakin dediler onuda denedim gene ayni sorun var.
Hem Türkçe hem Ingilizce XP kurulmus client makinelerde denedim gene aynisey oldu.
Ne yapmak lazim ?
Yorumlarinizi bekliyorum ...
NOT: Bir örnek ekran resmi ekliyorum.
TBLSTSABIT tablosundan select edilip gird'e bound edilmis halidir...
|
Cevaplar:
Mesajı Yazan: emiray
Mesaj Tarihi: 14 Ocak 2008 Saat 16:40
evet dogru söylüyorsunuz, bu sorunu ancak asci karakter kodlarini göstererek çözebilirsiniz. Bölgesel ayarlarla alakasi yok. Netsis bu isi trigerle çözüyor
------------- netsis bir tutkudur.Yaşamak Lazım
|
Mesajı Yazan: erdal_sert
Mesaj Tarihi: 14 Ocak 2008 Saat 16:54
http://www.erpne.org/member_profile.asp?PF=443&FID=33 - emiray Selam,
Dedigini tam anlayamadim, yani mesala stok karti açilirken stok adi string'ini parse edip I gördügün yere sunu yaz yada G gördügün yere sunu yaz gibi bir trigger mi var ?
----
Ben simdi TBLSTSABIT tabolusunun trigger larina bakiyorum, o tür bir replace islemi göremedim.
Eger öyle bir islem olsa TBLSTSABIT'in insert trigger larinda olurdu diye düsünüyorum.
o tabloda for insert için sadece NTR_STSABITI trigger'i var, onun içinde de o tür bir degisim yok.
Acaba dedigin gibi bir (ben yanlis anlamadiysam) replace islemini varsa, exe'nin içinden yapiyor olabilirler mi ?
Ne dersin ?
|
Mesajı Yazan: (sa)
Mesaj Tarihi: 14 Ocak 2008 Saat 17:27
selam
ornek bir trigger olmasi lazim.
bulursam gondereyim ustad
------------- (sa)
|
Mesajı Yazan: emiray
Mesaj Tarihi: 14 Ocak 2008 Saat 17:48
netsis database nin altinda çalisan bir triger var.
çalisma sekli ise söyle ekrandan girilen Türkçe karakterler database islenirken farkli karakterler isleniyor excel e dis veri al yada 3.party yazimla datalar çagrildigi zaman database deki hangi karakterle yazili ise o sekilde ekrana geliyor. netsis de islem yaparken yada rehber çalistirildigi zaman bu triger çalisiyor ve S - I - G lerin yerini tutan farkli asci karakterleri Türkçe harfe dönüstürüyor. degisen bu türkçe karakterlerin asci kodlarini göstererek yapiliyor.
örnegin: S nin karsiligi 1150
------------- netsis bir tutkudur.Yaşamak Lazım
|
Mesajı Yazan: erdal_sert
Mesaj Tarihi: 14 Ocak 2008 Saat 17:57
Netsis database nin altinda çalisan bir triger dediginin adini biliyormusun ?
Bin inceliyeyim bakalim.
Bu arada bu replace islemi performani etkilemiyormu arkadaslar ?
Yeni 2000 stokkartinin hareketlerini dökerken trigger'lar ile bile olsa bu replace aglatmazmi, ne dersiniz ?
Bu bahsetiginiz trigger i çok acil sizden alabilirsem yada netsis database'in den bulabilirsem çok memnun olacagim.
script olarak gönderebilirseniz erdNOKTAsert deki NOKTA yi . ile degistirip gmail'e gönderebilirsiniz.
|
Mesajı Yazan: emiray
Mesaj Tarihi: 14 Ocak 2008 Saat 18:09
ilgili sirketin altinda programmability var onun altinda functions altinda scalar-valued functions nin altinda dbo.TRK var türkçe karakter sorununu iste bu function hallediyor
------------- netsis bir tutkudur.Yaşamak Lazım
|
Mesajı Yazan: emiray
Mesaj Tarihi: 14 Ocak 2008 Saat 18:10
dbo.TRK
/****** Object: UserDefinedFunction [dbo].[TRK] Script Date: 01/14/2008 18:05:19 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
ALTER FUNCTION [dbo].[TRK](@A NVARCHAR(4000))
RETURNS NVARCHAR(4000)
AS
BEGIN
DECLARE @TMP NVARCHAR(4000)
SET @TMP = REPLACE(@A COLLATE LATIN1_GENERAL_BIN, CHAR(208), N'Ð')
SET @TMP = REPLACE(@TMP COLLATE LATIN1_GENERAL_BIN, CHAR(220), N'Ü')
SET @TMP = REPLACE(@TMP COLLATE LATIN1_GENERAL_BIN, CHAR(222), N'Þ')
SET @TMP = REPLACE(@TMP COLLATE LATIN1_GENERAL_BIN, CHAR(221), N'Ý')
SET @TMP = REPLACE(@TMP COLLATE LATIN1_GENERAL_BIN, CHAR(214), N'Ö')
SET @TMP = REPLACE(@TMP COLLATE LATIN1_GENERAL_BIN, CHAR(199), N'Ç')
SET @TMP = REPLACE(@TMP COLLATE LATIN1_GENERAL_BIN, CHAR(73), N'I')
SET @TMP = REPLACE(@TMP COLLATE LATIN1_GENERAL_BIN, CHAR(240), N'ð')
SET @TMP = REPLACE(@TMP COLLATE LATIN1_GENERAL_BIN, CHAR(252), N'ü')
SET @TMP = REPLACE(@TMP COLLATE LATIN1_GENERAL_BIN, CHAR(254), N'þ')
SET @TMP = REPLACE(@TMP COLLATE LATIN1_GENERAL_BIN, CHAR(105), N'i')
SET @TMP = REPLACE(@TMP COLLATE LATIN1_GENERAL_BIN, CHAR(246), N'ö')
SET @TMP = REPLACE(@TMP COLLATE LATIN1_GENERAL_BIN, CHAR(231), N'ç')
SET @TMP = REPLACE(@TMP COLLATE LATIN1_GENERAL_BIN, CHAR(253), N'ý')
RETURN @TMP
END
------------- netsis bir tutkudur.Yaşamak Lazım
|
Mesajı Yazan: erdal_sert
Mesaj Tarihi: 14 Ocak 2008 Saat 18:22
http://www.erpne.org/member_profile.asp?PF=443&FID=33 - emiray ,
Çok sagolasin.
Sana bir kahve borcum var bira'da olabilir.
http://www.erpne.org/member_profile.asp?PF=407&FID=33 - (sa) 'i da unutmadim tabi onada borçlandim...
|
Mesajı Yazan: erdal_sert
Mesaj Tarihi: 14 Ocak 2008 Saat 19:11
Arkadaslar birseyi anlayamadim bu trigger'da.
Simdi @A param'i ile gelen string'i aliyor ve bazi karakterleri replace ediyor.
Ama ; REPLACE(@TMP COLLATE LATIN1_GENERAL_BIN, CHAR(222), N'Þ') simdi burada CHAR(222) yi , 'Þ' ile replace ediyoruz ama zaten 'Þ' isaretinin ascii karakter kodu 222'dir.
Yani biz 'Þ' yi gene 'Þ' ile degistirmis olmuyormuyuz ? oysa 'S' ile degistirmek lazim.
simdi mesala ben su query'i çalistirdim. SELECT dbo.TRK('NÝKEL ZÝNCÝR')
------------------------------------------------- NÝKEL ZÝNCÝR (1 row(s) affected)
Dönende dogal olarak ayni oldu.
Yani benim select cümlemde TRK fonksiyonunu kulanmam birsey degistirmeyecek.
Acaba ters fonksiyon mu yazmak lazim, yani
REPLACE(@TMP COLLATE LATIN1_GENERAL_BIN, CHAR(222), N'S')
REPLACE(@TMP COLLATE LATIN1_GENERAL_BIN, CHAR(221), N'I')
gibi ...?
benmi birseyi gözden kaçiriyorum ?
|
Mesajı Yazan: AyGuMuS
Mesaj Tarihi: 16 Ocak 2008 Saat 12:04
Bunun için Connection nesnesinin Property lerinden halledebilirsin...
------------- SA
|
Mesajı Yazan: AyGuMuS
Mesaj Tarihi: 16 Ocak 2008 Saat 12:07
illede SQL le halldecem dersen NETSIS in yazdigi Fonksiyonu kendine uyarla...
CREATE FUNCTION [dbo].[TRK_CEVIR](@A NVARCHAR(4000))
RETURNS NVARCHAR(4000)
AS
BEGIN
DECLARE @TMP NVARCHAR(4000)
SET @TMP = REPLACE(@A COLLATE LATIN1_GENERAL_BIN, CHAR(208), N'G')
SET @TMP = REPLACE(@TMP COLLATE LATIN1_GENERAL_BIN, CHAR(220), N'Ü')
SET @TMP = REPLACE(@TMP COLLATE LATIN1_GENERAL_BIN, CHAR(222), N'S')
SET @TMP = REPLACE(@TMP COLLATE LATIN1_GENERAL_BIN, CHAR(221), N'I')
SET @TMP = REPLACE(@TMP COLLATE LATIN1_GENERAL_BIN, CHAR(214), N'Ö')
SET @TMP = REPLACE(@TMP COLLATE LATIN1_GENERAL_BIN, CHAR(199), N'Ç')
SET @TMP = REPLACE(@TMP COLLATE LATIN1_GENERAL_BIN, CHAR(73), N'I')
SET @TMP = REPLACE(@TMP COLLATE LATIN1_GENERAL_BIN, CHAR(240), N'g')
SET @TMP = REPLACE(@TMP COLLATE LATIN1_GENERAL_BIN, CHAR(252), N'ü')
SET @TMP = REPLACE(@TMP COLLATE LATIN1_GENERAL_BIN, CHAR(254), N's')
SET @TMP = REPLACE(@TMP COLLATE LATIN1_GENERAL_BIN, CHAR(105), N'i')
SET @TMP = REPLACE(@TMP COLLATE LATIN1_GENERAL_BIN, CHAR(246), N'ö')
SET @TMP = REPLACE(@TMP COLLATE LATIN1_GENERAL_BIN, CHAR(231), N'ç')
SET @TMP = REPLACE(@TMP COLLATE LATIN1_GENERAL_BIN, CHAR(253), N'i')
RETURN @TMP
END
------------- SA
|
Mesajı Yazan: AyGuMuS
Mesaj Tarihi: 16 Ocak 2008 Saat 12:18
erdal_sert Yazdı:
Eger OleDb ( auto translate=false paremetresi ile) kullanirsam Türkçe karakterleri düzgün aliyorum fakat bu seferde yazarken ç leri c ve s leride s olarak yaziyor. |
Bunu yaptigin zaman düzgün olarak gelmesi gerekir. Çünkü ben bu sekilde yapiyorum. Eger dedigin gibiyse aklima PC nin Bölgesel ayarlarina göre çeviriyor demek geliyor. bide ona bak istersen onu Türlkçe yap.
------------- SA
|
|