Fifo Uygulamasında SQL Kullanımı

ÖmerFaruk

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2017
Mesajlar
4,779
Excel Vers. ve Dili
Microsoft 365 Tr-64
@Zeki Gürsoy beyin aşağıdaki linkte bulunan dosyasından faydalanmaya ve Fifo-Sql yöntemiyle işlem yapmaya çalışıyorum.
https://www.excel.web.tr/threads/fifo-lifo-maliyet-hesaplama.83702/

Önce bir txt dosyası oluşturup daha sonra Sql sorgusu çalışıyor.
Txt dosyasının oluşmasında sıkıntı yok.
Ancak aşağıdaki kod parçasındaki 2 .satırda Object Variable or With block variable not set hatası veriyor.
C++:
Call Print_TEXT(Sheets("Hareketler"), Range("A1:M" & Sheets("hareketler").[a65000].End(3).Row))
cn.Open "Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=" & ThisWorkbook.Path & "\;"
Konu sanki delimeter ile alakalı ancak anlayamadım.
Yardımcı olur musunuz?
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,330
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
İkinci satır için aşağıdaki tanımlamayı yaptınız mı?

Set cn = New ADODB.Connection

Eğer yaptıysanız Text Driver yüklü olmayabilir. Bunu araştırınız.
 

ÖmerFaruk

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2017
Mesajlar
4,779
Excel Vers. ve Dili
Microsoft 365 Tr-64
Kodları zaten olduğu gibi aldım, henüz kendime uyarlamadım. Ado Connection satırı var.
Text Driver konusunu araştıracağım.
Teşekkürler.
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Dosyanın çalışır şekilde revize edilmiş versiyonu ektedir;

.
 

Ekli dosyalar

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,356
Excel Vers. ve Dili
Office 365 (64 bit) - Türkçe
Office mimarisinin desteklediği en yüksek sağkayıcıyı veya, bir sağlayıcının desteklenip desteklenmediğinin sınanabilmesi ve versiyon numarasını verebilen için bir fonksiyon yazdım iki gün önce....

Aşğıdaki kodlar stabil kod yazmanıza yardımcı olacaktır.

C#:
Sub Test()
    Dim cn As Object    
   
    Set cn = CreateObject("ADODB.Connection")
    
    cn.Open "Provider=" & GetProvider & "; Data Source=c:\users\zeki\desktop; Extended Properties=""Text;HDR=Yes;FMT=Delimited(,)"""
    cn.Close
End Sub

Private Function GetProvider(Optional ByVal isProviderAvailable = "", Optional ByRef getProviderVersion As String = "") As String
    ' Zeki GÜRSOY © gursoyzeki@gmail.com
    ' 09.04.2021
    '
    Dim objProvider As IUnknown, arrProviders(), strProvider
    
    On Error Resume Next
    
    If isProviderAvailable <> "" Then
        Set objProvider = CreateObject(isProviderAvailable)
        
        If Err = 0 Then GetProvider = isProviderAvailable
        Exit Function
    End If
    
    arrProviders = Array("Microsoft.ACE.OLEDB.16.0", "Microsoft.ACE.OLEDB.15.0", "Microsoft.ACE.OLEDB.14.0", _
                         "Microsoft.ACE.OLEDB.12.0", "Microsoft.JET.OLEDB.4.0", "Microsoft.JET.OLEDB.3.5")

    For Each strProvider In arrProviders
        Set objProvider = CreateObject(strProvider)
        
        If Err = 0 Then
            GetProvider = strProvider
            getProviderVersion = Replace(Replace(strProvider, "Microsoft.ACE.OLEDB.", ""), "Microsoft.JET.OLEDB.", "")
            Exit For
        End If
        
        Err.Clear
    Next

'--------------------------------------------------------------------
' Ref : https://en.wikipedia.org/wiki/Microsoft_Jet_Database_Engine
'--------------------------------------------------------------------
'Access Version - JET Version
' 1997 - 3.5
' 2000 - 4.0
' 2002 - 4.0
' 2003 - 4.0
' 2007 - ACE 12
' 2010 - ACE 14
' 2013 - ACE 15
' 2016 - ACE 16
'--------------------------------------------------------------------
' JET Version - Database Version
' 3.5    - 1 To 3.X
' 4.0    - 1 To 4.0
' ACE 12 - 1 To ACE
' ACE 14 - 3.X To ACE
' ACE 15 - 4.0/ACE
' ACE 16 - 4.0/ACE
'--------------------------------------------------------------------
End Function
 

ÖmerFaruk

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2017
Mesajlar
4,779
Excel Vers. ve Dili
Microsoft 365 Tr-64
Yardım ve destekleriniz için teşekkürler.
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Text dosyasını oluştururken Zeki Bey, ayraç olarak ";" kullanmıştı. Kodun çalışmasında sorun çıkınca ben de ayracı "," ile değiştirmiştim.

Ancak, sonradan fark ettim ki; bu haliyle kod çalıştığında Zeki Beyin dosyasındaki diğer alternatiflere göre daha farklı sonuç veriyor çünkü ondalıklı sayılarda ayraç olarak "," kullanıldığından ötürü problem oluyor.

Bu durumda, yine Zeki Beyin ilk alternatifinde olduğu gibi ";" kullanmak üzere, bu ayracı ADO'ya belirtmek için bir Schema dosyasına ihtiyaç duydum.

Buna yönelik tekrar revize ettiğim dosya ektedir.


.
 

Ekli dosyalar

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,356
Excel Vers. ve Dili
Office 365 (64 bit) - Türkçe
Schema.ini önemli Haluk Bey. Başlığı okuyanlar için tüm Schema.ini tüm özelliklerini açıklamalarıyla aşağıa vereyim.

C#:
[database.csv]
TextDelimiter="            ;Metinler çift tırnak içine alınır(Default)
ColNameHeader=True         ;İlk satır kolon başlığıdır.
Format=Delimited(;)        ;Kolon ayracı.(TabDelimited, CSVDelimited , Delimited(özel) veya FixedLength
MaxScanRows=1              ;JET Engine' nin veri tipi tahmini için bakacağı satır sayısı.(0=tüm satırlar)
CharacterSet=ANSI          ;ANSI, OEM veya Charset numerik kodu. (Ör: UTF-8 => 65001' dir.)

;Local seçenekler:
DateTimeFormat=dd.mm.yyyy  ;Tarih biçimi, saat veya birlikte.
DecimalSymbol=,            ;Ondalık ayracı.
NumberDigits=4             ;Virgül sonrası basamak sayısı
NumberLeadingZeroes=False  ;Sayıların başında '0' olup olmayacağı.(Default: False)
CurrencySymbol=TL          ;Para birimi
CurrencyPosFormat=3        ;Para birimi yerleşimi. 0(Ör:TL5), 1(Ör:5TL), 2(Ör:TL 5), 3(Ör:5 TL)
CurrencyDigits=2           ;Para virgül sonrası basamak sayısı
;CurrencyNegFormat=8       ;Negatif para görünümü. 0-15 arası biçim kodu vardır
CurrencyThousandSymbol=.   ;Para binlik ayracı.
CurrencyDecimalSymbol=,    ;Para ondalık ayracı.

;Veri tipleri ve Alan tanımları:
;[Bit | Boolean], [Byte], [Short | Integer], [Long], [Currency], [Single], [Double | Float], [DateTime],
;[Text | Char], [Memo | LongChar], [Date]
;ColN=KolonAdı veri_tipi [uzunluk_tanımı] (uzunluk tanımı, metin ifadeler için geçerlidir. Ör: Width 25)

Col1=ID Long
Col2=NO Char Width 15
Col3=TARIH DateTime
Col4=BIRIM Char Width 255
Col5=UYRUK Char Width 255
Col6=BASVURU Char Width 255
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
El altında bulunması için iyi oldu, dostum ... 226791

.
 

ÖmerFaruk

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2017
Mesajlar
4,779
Excel Vers. ve Dili
Microsoft 365 Tr-64
@Zeki Gürsoy
Forumdaki benzer bir konuda Schema.ini dosyası oluşturup
[ba-bs1.csv]
ColNameHeader=False
Format=Delimited(;)

içerisine bu satırları yazın demişsiniz.

Pazar günüm, ADO - Delimeter - Fifo içinde geçti.
Sanırım benim temel bazı bilgileri kavramam lazım. Çok zorlandım.

Sorunumu Fifo konusundan izole edip, Alış ve Satış maliyetlerini ayrı ayrı hesaplayarak çözmek zorunda kaldım.
 

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,356
Excel Vers. ve Dili
Office 365 (64 bit) - Türkçe
Tesadüf... Ben de FIFO, LIFO, Ortalama (Hareketli, Ağırlıklı) tümünü yan yana gösteren çalışma yapıyorum. Ama öncesinde database client library yazıyorum. İlk bitiren paylaşsın o zaman... :)
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,330
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Mutfaktan güzel kokular geliyor... :)
 

mancubus

Destek Ekibi
Destek Ekibi
Katılım
6 Ocak 2010
Mesajlar
2,224
Excel Vers. ve Dili
İŞ: 2021 Win Eng
elinize sağlık.
 
Üst