Sayfayı Yazdır | Pencereyi Kapat

Excel'den Stok Sabit Degistirme

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=2616
Tarih: 22 Kasım 2024 Saat 08:33
Program Versiyonu: Web Wiz Forums 11.10 - http://www.webwizforums.com


Konu: Excel'den Stok Sabit Degistirme
Mesajı Yazan: unalh
Konu: Excel'den Stok Sabit Degistirme
Mesaj Tarihi: 28 Mayıs 2011 Saat 10:53
Merhabalar,
 
Veri tabaninda TRK fonksiyonu olarak
 
CREATE FUNCTION TRK(@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
 
Tanimlanmis ben stok isimlerini degistirmek istiyorum bunagöre excel sayfasina nasil bir fonksiyon yazmam gerekiyor.
 
Excel dosyasi ekte.
 
http://www.upload.gen.tr/d.php/www/wts4du5b/STSABIT_Update.xls.html - http://www.upload.gen.tr/d.php/www/wts4du5b/STSABIT_Update.xls.html
 
 
Yardimlariniz için simdiden tesekkür ederim.



Cevaplar:
Mesajı Yazan: mbaykan
Mesaj Tarihi: 29 Mayıs 2011 Saat 13:32
        vtSql = ""
        vtSql = vtSql & "UPDATE TBLSTSABIT SET STOK_ADI = .dbo.tfTRK('"
        vtSql = vtSql & esctrk(Cells(say, 3))
        vtSql = vtSql & "') WHERE STOK_KODU='"
        vtSql = vtSql & Cells(say, 2)
        vtSql = vtSql & "' AND SUBE_KODU=" & Cells(say, 1)

.dbo.tfTRK isimli fonksiyon SQL'de olusturulacak.
TRK fonksiyonunuzla bir isiniz yok.

Excel'deki bazi türkçe karakterler (GÜIgsi) SQL'e düzgün gönderilemedigi için
esctrk ve .dbo.tfTRK fonksiyonlari birlikte kullanilmasi gerekir. bu fonksiyonlar
verimizin Metin(text) oldugu durumlarda kullanilir.
2. olarak sizin makronuzda kullanidiginiz. Replace(<deger>,",",".") fonksiyonu
nümerik alanlarda ondalik olarak girilen virgül(,)ü nokta(.) ya çevirmek için

Kolay gelsin.


-------------
Mehmet Baykan


Mesajı Yazan: mbaykan
Mesaj Tarihi: 29 Mayıs 2011 Saat 13:55

CREATE FUNCTION [dbo].[tfTRK](@A NVARCHAR(4000))

RETURNS NVARCHAR(4000)

AS

BEGIN

  DECLARE @TMP NVARCHAR(4000)

  SET @TMP = REPLACE(@A , '~#G', N'Ð')

  SET @TMP = REPLACE(@TMP ,'~#S', N'Þ')

  SET @TMP = REPLACE(@TMP ,'~#I', N'Ý')

  SET @TMP = REPLACE(@TMP ,'~#i', N'ý')

  SET @TMP = REPLACE(@TMP ,'~#g', N'ð')

  SET @TMP = REPLACE(@TMP ,'~#s', N'þ')

    RETURN @TMP

END



-------------
Mehmet Baykan


Mesajı Yazan: unalh
Mesaj Tarihi: 30 Mayıs 2011 Saat 08:31

Mehmet bey merhabalar,

Bu fonksiyonun text degerlerde kullanildigini biliyorum bunnula ilgili bir sikinti yoktur fakat söylemek istedigim benim kullandigim veri tabaninda birinci mesajda verdigim foknsiyon kullanilmis türkçeye çevirim için bu fonksiyon için'de excelde esctrk fonksiyonunu kullansak ayni islemi görürmü yoksa veri tabanina [dbo].[tfTRK] adi ile yeniden bir fonksiyonmu olusturmak gerekiyor.
 
Eger yeni fonksiyon olusturmak gerekirse benim veritabanimda Sirket_1 Sirket_2 gibi kullandigim 3 tane sirket var bunlarin herbirine tanimlamam gerekiyor bu islemi nasil yapabilirim. 
 


Mesajı Yazan: mbaykan
Mesaj Tarihi: 30 Mayıs 2011 Saat 12:30
TRK fonksiyonuyla sizin tablonuzun hiç bir baglantisi yoktur

excelde esctrk fonksiyonu GSI harflerini sirasiyla ~#G , ~#S ve ~#I harflerine dönüstürür
ve SQL'e giden dönüstürülmüs text'imize de tfTRK fonksiyonu 3'er harfle gelmis olan türkçelerine
karsilik gelen Ð,Þ ve Ý harflerini yerlestirir (~# ler silinir). Sonuçta Text'imizin orjinal uzunlugu 10 karakter
ise sql'de bu fonksiyon yardimi ile tekrar 10 karaktere dönüsür.

evet kullandiginiz tüm sirketlerde tfTRK fonksiyonunu olusturmaniz(CREATE) gerekiyor
sorunlu türkçe karakter kullaniminiz yoksa söz konusu fonksiyonlara gerek yoktur.

SQL Management Studio'da ilgili sirket veritabanini seçtikten sonra
New Query ile açtiginiz pencereye tfTRK fonksiyonunun kodunu yapistirip
F5'e basarak olusturacaksiniz.
daha önce VIEW veya benzeri bir çalismaniz olmussa SQL Management Studio'yu kullanmis olmalisiniz.
Eger siz herhangi bir nedenle yapamiyorsaniz. yapacak birinden yardim almalisiniz
uzun bir açiklama yaptim. umarim sikmamisimdir.
Kolay gelsin


-------------
Mehmet Baykan


Mesajı Yazan: unalh
Mesaj Tarihi: 30 Mayıs 2011 Saat 17:54
Mehmet bey sikmadiniz aksine güzel bilgiler paylastiniz bu paylasim için tesekkür ederim.
 
Veri tabanlarimda türkçe fonksiyonlar olusturdum üç ayri firmada bunlari test ettim sikintisiz çalisiyorlar.
 
Veri alirken gayet güzel sonuçlar veriyor.
 
Yanliz söyle bir durum var stok adini degistirmek istedigimde
 
 .Execute -------->   satirinda hata veriyor
 
Örnegin stok adini deneme diye yazarsam hata aliyorum fakat 112566 gibi sayilar yazarsam degistiriyor.
 
Sorun nereden kaynaklaniyor olabilir.
 
 
Sub insertSQL()
Dim cn As Object

'On Error Resume Next
Set cn = CreateObject("ADODB.Connection")
Dim vtSql
Dim say%
   Set cnn = CreateObject("ADODB.Connection")
   cnn.Open "driver={SQL Server};server=" & Range("b1").Value & ";uid=" & Range("b2").Value & ";pwd=" & Range("b3").Value & ";database=" & Range("b4").Value & ""
    Set cmdCommand = CreateObject("ADODB.Command")
    Set cmdCommand.ActiveConnection = cnn
    sonst = [b65536].End(3).Row
    'Satir Kadar Döngü------------------
    For say = 6 To sonst
        vtSql = ""
        vtSql = vtSql & "UPDATE TBLSTSABIT SET STOK_ADI=.dbo.TURKCE('"
        vtSql = vtSql & esctrk(Cells(say, 3))
        vtSql = vtSql & " WHERE STOK_KODU='"
        vtSql = vtSql & Cells(say, 2)
        vtSql = vtSql & "' AND SUBE_KODU=" & Cells(say, 1)
            With cmdCommand
            .CommandText = vtSql
            .CommandType = adCmdText
            .Execute
            End With
      Next say
    'Satir Kadar Döngü Sonu------------------
    cnn.Close
    Set cmdCommand = Nothing
    Set cnn = Nothing
End Sub

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



Mesajı Yazan: mbaykan
Mesaj Tarihi: 30 Mayıs 2011 Saat 22:29

Cells(say,3) önünde ve arkasinda tek tirnak konuyor mu?
sizin kodunuzda görülmüyor
benim foruma yazdigimi kopyalayip yapistirin
olacaktir


-------------
Mehmet Baykan


Mesajı Yazan: unalh
Mesaj Tarihi: 31 Mayıs 2011 Saat 09:32
Mehmet bey ilginize çok tesekkür ederim.
 
Sorun çözüldü.
 
Hayirli isler.



Sayfayı Yazdır | Pencereyi Kapat

Forum Software by Web Wiz Forums® version 11.10 - http://www.webwizforums.com
Copyright ©2001-2017 Web Wiz Ltd. - https://www.webwiz.net