Excel den Sql e veri gönderim metotları

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
Excel dosyasının olduğu yerde "myTable.txt" isimli dosya oluşturup, Excel dosyasında Sayfa1 isimli sayfanın 14.satırdan başlayarak A, B, C, D, E ve G, H sütunlarındaki verileri aktarır.

C#:
Sub Test()
'   Haluk - 03/03/2023
'   sa4truss@gmail.com
'
    Dim adoCN As Object
    Dim strSQL As String, DatabasePath As String, TargetPath As String
    Dim FileNum As Long
    
    DatabasePath = ThisWorkbook.FullName
    TargetPath = ThisWorkbook.Path
    
    If Dir(TargetPath & "\myTable.txt") <> "" Then Kill TargetPath & "\myTable.txt"
    
    FileNum = FreeFile
    Open TargetPath & "\Schema.ini" For Output As #FileNum
        Print #FileNum, "[myTable.txt]"
        Print #FileNum, "ColNameHeader=False"
        Print #FileNum, "CharacterSet=ANSI"
        Print #FileNum, "DecimalSymbol=."
        Print #FileNum, "TextDelimiter=None"
    Close #FileNum
    
    Set adoCN = CreateObject("ADODB.Connection")
    
    If Val(Application.Version) < 14 Then
        adoCN.Provider = "Microsoft.Jet.OLEDB.4.0"
        adoCN.Properties("Extended Properties") = "Excel 8.0; HDR=No;IMEX=1;"
    Else
        adoCN.Provider = "Microsoft.ACE.OLEDB.12.0"
        adoCN.Properties("Extended Properties") = "Excel 12.0; HDR=No;IMEX=1;"
    End If
    
    adoCN.ConnectionString = DatabasePath
    adoCN.Open
    
    strSQL = " Select F1, F2, F3, F4, F5, F7, F8 Into [Text;Database=" & TargetPath & ";CharacterSet=65001;HDR=No;].[myTable.txt] From [Sayfa1$A14:H] "
    
    adoCN.Execute strSQL
    
    Kill TargetPath & "\Schema.ini"
    
    MsgBox "myTable.txt dosyası " & vbCrLf & vbCrLf & TargetPath & vbCrLf & vbCrLf & "klasöründe oluşturuldu...!"
    adoCN.Close
    Set adoCN = Nothing
End Sub

.
 

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
3,074
Excel Vers. ve Dili
Office 2013 İngilizce
Excel dosyasının olduğu yerde "myTable.txt" isimli dosya oluşturup, Excel dosyasında Sayfa1 isimli sayfanın 14.satırdan başlayarak A, B, C, D, E ve G, H sütunlarındaki verileri aktarır.

C#:
Sub Test()
'   Haluk - 03/03/2023
'   sa4truss@gmail.com
'
    Dim adoCN As Object
    Dim strSQL As String, DatabasePath As String, TargetPath As String
    Dim FileNum As Long
   
    DatabasePath = ThisWorkbook.FullName
    TargetPath = ThisWorkbook.Path
   
    If Dir(TargetPath & "\myTable.txt") <> "" Then Kill TargetPath & "\myTable.txt"
   
    FileNum = FreeFile
    Open TargetPath & "\Schema.ini" For Output As #FileNum
        Print #FileNum, "[myTable.txt]"
        Print #FileNum, "ColNameHeader=False"
        Print #FileNum, "CharacterSet=ANSI"
        Print #FileNum, "DecimalSymbol=."
        Print #FileNum, "TextDelimiter=None"
    Close #FileNum
   
    Set adoCN = CreateObject("ADODB.Connection")
   
    If Val(Application.Version) < 14 Then
        adoCN.Provider = "Microsoft.Jet.OLEDB.4.0"
        adoCN.Properties("Extended Properties") = "Excel 8.0; HDR=No;IMEX=1;"
    Else
        adoCN.Provider = "Microsoft.ACE.OLEDB.12.0"
        adoCN.Properties("Extended Properties") = "Excel 12.0; HDR=No;IMEX=1;"
    End If
   
    adoCN.ConnectionString = DatabasePath
    adoCN.Open
   
    strSQL = " Select F1, F2, F3, F4, F5, F7, F8 Into [Text;Database=" & TargetPath & ";CharacterSet=65001;HDR=No;].[myTable.txt] From [Sayfa1$A14:H] "
   
    adoCN.Execute strSQL
   
    Kill TargetPath & "\Schema.ini"
   
    MsgBox "myTable.txt dosyası " & vbCrLf & vbCrLf & TargetPath & vbCrLf & vbCrLf & "klasöründe oluşturuldu...!"
    adoCN.Close
    Set adoCN = Nothing
End Sub

.
Haluk Hocam çok güzel bilgi ve emeğinize sağlık,
yalnız bir problem var, bu TXT dosyasının devamına yazmıyor, önceki yazılanları silip tekrar üzerine yazıyor,
Benim istediğim önceki yazılı olanlar kalıp, yenilerini devamına yazıp gitmesi
Aşağıda For ... Next döngüsü ile oluşturdğum yapı mevcut, yalnız veri çok olunca çok zaman alıyor.

tekrar teşekkürler,

Kod:
Sub txtado2()
Dim Sht As Worksheet
Dim a(1 To 7), ff, sorgu
Dim deg As Variant, j As Byte
Dim i As Long, LR As Long

Set Sht = ActiveSheet
LR = Sht.Cells(Sht.Rows.Count, "A").End(xlUp).Row

Set con = CreateObject("ADODB.Connection")

myPath = ThisWorkbook.Path

ff = "firstTable.txt"

con.Open _
"Provider=Microsoft.ace.OLEDB.12.0;Data Source=" & myPath & ";Extended Properties=""text;HDR=No;FMT=Delimited"""
              
        For i = 14 To LR
     
               For j = 1 To 7
                    deg = Sht.Cells(i, j).Value

                    If Not IsNumeric(deg) Or IsEmpty(deg) Then deg = "'" & deg & "'"
                  ''  If IsEmpty(deg) Then deg = "'" & deg & "'"
                    a(j) = deg
                    
                    deg = Empty
               Next j
              
               strSQL = "(" & a(1) & ", " & a(2) & ", " & a(3) & ", " & a(4) & ", " & a(5) & ", " & a(6) & ", " & a(7) & ")"
               
                sorgu = "INSERT INTO [" & ff & "]  Values " & strSQL
                
                con.Execute (sorgu)
                
                Erase a
               
             strSQL = ""
        Next i

End Sub
iyi Çalışmalar.
 

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
Sorununuzu en baştan doğru bir şekilde anlatmadığınız için boş yere vakit harcıyorum..... Mevcut bir Text dosyasına aktarılacağını daha şimdi söylüyorsunuz.

.
 

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
3,074
Excel Vers. ve Dili
Office 2013 İngilizce
Sorununuzu en baştan doğru bir şekilde anlatmadığınız için boş yere vakit harcıyorum..... Mevcut bir Text dosyasına aktarılacağını daha şimdi söylüyorsunuz.

.
Haluk Hocam Kusura bakmayın, özür dilerim ama baştan bu yana INSERT INTO üzerinde duruyordum,

Not: Burada verdiğiniz kodlarda gayet faydalı, kesinlikle işime yarayacaktır.

tekrar teşekkürler,
lütfen hakkınızı helal edin!
 

Ekli dosyalar

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
Şöyle yapın;

Excel dosyasının olduğu yerde myTable.txt dosyasını oluşturun. İlk satırı aşağıdaki gibi olsun (alan başlıkları olarak kullanmak üzere);


Kod:
cF1,cF2,cF3,cF4,cF5,cF7,cF8


Excel dosyasının A13:H13 hücrelerinde de ;


Kod:
cF1,cF2,cF3,cF4,cF5,cF6,cF7,cF8
olsun......

Excel dosyasında kullanacağınız kod;

C#:
Sub Test2()
'   Haluk - 03/03/2023
'   sa4truss@gmail.com
'
    Dim adoCN As Object
    Dim strSQL As String, DatabasePath As String, TargetPath As String
    Dim FileNum As Long
    
    DatabasePath = ThisWorkbook.FullName
    TargetPath = ThisWorkbook.Path
    
    FileNum = FreeFile
    Open TargetPath & "\Schema.ini" For Output As #FileNum
        Print #FileNum, "[myTable.txt]"
        Print #FileNum, "ColNameHeader=True"
        Print #FileNum, "CharacterSet=ANSI"
        Print #FileNum, "DecimalSymbol=."
        Print #FileNum, "TextDelimiter=None"
    Close #FileNum
    
    Set adoCN = CreateObject("ADODB.Connection")
    
    If Val(Application.Version) < 14 Then
        adoCN.Provider = "Microsoft.Jet.OLEDB.4.0"
        adoCN.Properties("Extended Properties") = "Excel 8.0; HDR=Yes;IMEX=1;"
    Else
        adoCN.Provider = "Microsoft.ACE.OLEDB.12.0"
        adoCN.Properties("Extended Properties") = "Excel 12.0; HDR=Yes;IMEX=1;"
    End If
    
    adoCN.ConnectionString = DatabasePath
    adoCN.Open
    
    strSQL = " Insert Into [Text;Database=" & TargetPath & ";CharacterSet=65001;HDR=Yes;].[myTable.txt] (cF1, cF2, cF3, cF4, cF5, cF7, cF8 ) " _
           & " Select cF1, cF2, cF3, cF4, cF5, cF7, cF8 From [Sayfa1$A13:H]"
    
    adoCN.Execute strSQL
    
    Kill TargetPath & "\Schema.ini"
    
    MsgBox "myTable.txt dosyasına veriler aktarıldı "
    adoCN.Close
    Set adoCN = Nothing
End Sub
.
 
Son düzenleme:

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
25 No'lu mesaj içeriği ve kodda revizyon yapıldı....

.
 

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
3,074
Excel Vers. ve Dili
Office 2013 İngilizce
25 No'lu mesaj içeriği ve kodda revizyon yapıldı....

.
Haluk Hocam çok teşekkürler,
iyi ki varsnız!

Çok önemli olmayan, sadece öğrenmek amaçlı bir hususu soracağım,
Aşağıdaki kod satırında:
HDR=No
yazmak mümkün mü?
bu durumda kod içinde başka bir düzenleme yapmak gerekir mi?


Kod:
  strSQL = " Insert Into [Text;Database=" & TargetPath & ";CharacterSet=65001;HDR=Yes;].[myTable.txt]
tekrar 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ın 1. satırında aşağıdaki satır (alan başlıkları) varsa,


Kod:
cF1,cF2,cF3,cF4,cF5,cF6,cF7,cF8




Excel dosyasındaki A14:E ve G14:H aralığındaki veriler (sütun başlıkları olmadan) aşağıdaki kodla aktarılabilir;


C#:
Sub Test3()
'   Haluk - 03/03/2023
'   sa4truss@gmail.com
'
    Dim adoCN As Object
    Dim strSQL As String, DatabasePath As String, TargetPath As String
    Dim FileNum As Long
    
    DatabasePath = ThisWorkbook.FullName
    TargetPath = ThisWorkbook.Path
    
    FileNum = FreeFile
    Open TargetPath & "\Schema.ini" For Output As #FileNum
        Print #FileNum, "[myTable.txt]"
        Print #FileNum, "ColNameHeader=True"
        Print #FileNum, "CharacterSet=ANSI"
        Print #FileNum, "DecimalSymbol=."
        Print #FileNum, "TextDelimiter=None"
    Close #FileNum
    
    Set adoCN = CreateObject("ADODB.Connection")
    
    If Val(Application.Version) < 14 Then
        adoCN.Provider = "Microsoft.Jet.OLEDB.4.0"
        adoCN.Properties("Extended Properties") = "Excel 8.0; HDR=No;IMEX=1;"
    Else
        adoCN.Provider = "Microsoft.ACE.OLEDB.12.0"
        adoCN.Properties("Extended Properties") = "Excel 12.0; HDR=No;IMEX=1;"
    End If
    
    adoCN.ConnectionString = DatabasePath
    adoCN.Open
    
    strSQL = " Insert Into [Text;Database=" & TargetPath & ";CharacterSet=65001;HDR=Yes;].[myTable.txt] (cF1, cF2, cF3, cF4, cF5, cF7, cF8 ) " _
           & " Select F1, F2, F3, F4, F5, F7, F8 From [Sayfa1$A14:H]"
    
    adoCN.Execute strSQL
    
    Kill TargetPath & "\Schema.ini"
    
    MsgBox "myTable.txt dosyasına veriler aktarıldı "
    adoCN.Close
    Set adoCN = Nothing
End Sub
.
 

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
3,074
Excel Vers. ve Dili
Office 2013 İngilizce
Text dosyasının 1. satırında aşağıdaki satır (alan başlıkları) varsa,

Kod:
cF1,cF2,cF3,cF4,cF5,cF6,cF7,cF8
Sanırım TXT dosyasında başlıklar olmadan işlem mümkün olmuyor Haluk Hocam,
her şey 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
Sanırım TXT dosyasında başlıklar olmadan işlem mümkün olmuyor Haluk Hocam,
her şey için teşekkürler
Benim anladığım; "myTable.txt" dosyası mevcut. Anlamadığım husus ise; niye bu text dosyasındaki ilk satırı (yani, alan isimlerini) kodun içindeki "strSQL" değişkeninde kullanmak istemiyorsunuz?

.
 

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
3,074
Excel Vers. ve Dili
Office 2013 İngilizce
Benim anladığım; "myTable.txt" dosyası mevcut. Anlamadığım husus ise; niye bu text dosyasındaki ilk satırı (yani, alan isimlerini) kodun içindeki "strSQL" değişkeninde kullanmak istemiyorsunuz?

.
Haluk Hocam öğrenmek amaçlı sormuştum,
her şey için teşekkürler, varolun, sağ olun....
 
Son düzenleme:

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
Aşağıdaki kod; Excel dosyasındaki Sayfa1 sayfasında A14:E ve G14:H aralığındaki veriler (sütun başlıkları olmadan) Excel dosyasının bulunduğu yerde "myTable.txt" dosyasına yazar. Eğer bu text dosyası yoksa oluşturup, yazar. Dosya varsa, verileri dosyanın sonuna yazar. Bu kodda veriler binary formatta açılan Text dosyasına döngü falan kullanmadan yazılmakta olup, Text dosyasında alan isimlerine de gerek yoktur.

C#:
Sub Test4()
'   Haluk - 04/03/2023
'   sa4truss@gmail.com
'
    Dim adoCN As Object
    Dim strSQL As String, DatabasePath As String, TargetPath As String
    Dim RS As Object, objFSO As Object, txtfile As Object
    
'    Const adClipString = 2
    Const ForAppending = 8
    
    DatabasePath = ThisWorkbook.FullName
    TargetPath = ThisWorkbook.Path
        
    Set adoCN = CreateObject("ADODB.Connection")
    
    If Val(Application.Version) < 14 Then
        adoCN.Provider = "Microsoft.Jet.OLEDB.4.0"
        adoCN.Properties("Extended Properties") = "Excel 8.0; HDR=No;IMEX=1;"
    Else
        adoCN.Provider = "Microsoft.ACE.OLEDB.12.0"
        adoCN.Properties("Extended Properties") = "Excel 12.0; HDR=No;IMEX=1;"
    End If
    
    adoCN.ConnectionString = DatabasePath
    adoCN.Open
    
    strSQL = "Select F1, F2, F3, F4, F5, F7, F8 From [Sayfa1$A14:H]"
    
    Set RS = adoCN.Execute(strSQL)
    
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set txtfile = objFSO.OpenTextFile(TargetPath & "\myTable.txt", ForAppending, True)
    txtfile.Write RS.GetString(, , ",", vbCrLf)
    
    MsgBox "myTable.txt dosyasına veriler aktarıldı "
    adoCN.Close
    Set adoCN = Nothing
End Sub

.
 

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
3,074
Excel Vers. ve Dili
Office 2013 İngilizce
Dosya ekle
Aşağıdaki kod; Excel dosyasındaki Sayfa1 sayfasında A14:E ve G14:H aralığındaki veriler (sütun başlıkları olmadan) Excel dosyasının bulunduğu yerde "myTable.txt" dosyasına yazar. Eğer bu text dosyası yoksa oluşturup, yazar. Dosya varsa, verileri dosyanın sonuna yazar. Bu kodda veriler binary formatta açılan Text dosyasına döngü falan kullanmadan yazılmakta olup, Text dosyasında alan isimlerine de gerek yoktur.

C#:
Sub Test4()
'   Haluk - 04/03/2023
'   sa4truss@gmail.com
'
    Dim adoCN As Object
    Dim strSQL As String, DatabasePath As String, TargetPath As String
    Dim RS As Object, objFSO As Object, txtfile As Object
   
'    Const adClipString = 2
    Const ForAppending = 8
   
    DatabasePath = ThisWorkbook.FullName
    TargetPath = ThisWorkbook.Path
       
    Set adoCN = CreateObject("ADODB.Connection")
   
    If Val(Application.Version) < 14 Then
        adoCN.Provider = "Microsoft.Jet.OLEDB.4.0"
        adoCN.Properties("Extended Properties") = "Excel 8.0; HDR=No;IMEX=1;"
    Else
        adoCN.Provider = "Microsoft.ACE.OLEDB.12.0"
        adoCN.Properties("Extended Properties") = "Excel 12.0; HDR=No;IMEX=1;"
    End If
   
    adoCN.ConnectionString = DatabasePath
    adoCN.Open
   
    strSQL = "Select F1, F2, F3, F4, F5, F7, F8 From [Sayfa1$A14:H]"
   
    Set RS = adoCN.Execute(strSQL)
   
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set txtfile = objFSO.OpenTextFile(TargetPath & "\myTable.txt", ForAppending, True)
    txtfile.Write RS.GetString(, , ",", vbCrLf)
   
    MsgBox "myTable.txt dosyasına veriler aktarıldı "
    adoCN.Close
    Set adoCN = Nothing
End Sub

.
Çok teşekkürler Haluk Hocam,
Bilginize ve emeğinize sağlık!
 
Üst