SQL Kayıt/Güncelleme (Excel üzerinden)

leonadies

Altın Üye
Altın Üye
Katılım
12 Şubat 2015
Mesajlar
435
Excel Vers. ve Dili
Excel 2016 TR
Değerli üstadlar;

Bir excel dosyası üzerinden SQL veri okutma veya Kaydetme derdindeyim. Genel olarak formu inceledim ama özel isteklerle dolu talepler olduğu için nokta atışlı istediğimi bulamadım.

Bir buton ile okuma yaptırıyorum sorun yok.
İsteğim; excelde yaptığım değişlikleri aktar dediğim anda ADO vb yöntem ile excelin son hali ile SQL üzerine aktarılması (Satır silmişsem, herhangi bir hücre değiştirdiysem vb) Bunu yaparken Key yazan kısımlar üzerinden kıyaslama yapılır diye düşündüm. Server vb bilgilerim dosya içindedir.

Not; Herhangi bir kolon ekleme vb isteğim olmaz sadece ilgili tablo içinde ekleme,silme değiştirme vb yapacağım. Dosyalarımı Ekledim.

SQL AKTAR-GUNCELLE.jpg
 

Ekli dosyalar

leonadies

Altın Üye
Altın Üye
Katılım
12 Şubat 2015
Mesajlar
435
Excel Vers. ve Dili
Excel 2016 TR
Çözümü varmı arkadaşlar ?
 

Asri

Altın Üye
Altın Üye
Katılım
24 Nisan 2005
Mesajlar
3,263
Excel Vers. ve Dili
Office 2016 EN 64 Bit
Çözümü varmı arkadaşlar ?
Çözüm var da zaman lazım.
Excel de düzenleme yapıldıktan sonra, ilgili tablonun içeriği sql de temizlenir.

Bu şekilde ilgili tablo ID si sıfırlanır.
SQL:
 DELETE FROM DBDATABASE.DBO.TBLTABLO
DBCC CHECKIDENT ('DBDATABASE.DBO.TBLTABLO',RESEED,0)
Sonra excel deki veriler ilgili tabloya aktarılır.

SQL konusunda uzman değilim. Ancak yöntem olarak kullanılabilir.
Uygun bir zamanda kod paylaşırım.
 

Asri

Altın Üye
Altın Üye
Katılım
24 Nisan 2005
Mesajlar
3,263
Excel Vers. ve Dili
Office 2016 EN 64 Bit
Kayıt listeleme ve günceleme ile ilgili örnek çalışma

SQL Tablo oluşturma scripti

VBA References da Microsoft ActiveX Data Objects 2.x library seçili olmalı.


SQL:
USE [TESTDB]
GO
/****** Object:  Table [dbo].[TBLTEST]    Script Date: 7.05.2021 22:05:10 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[TBLTEST](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [URUNID] [nchar](10) NULL,
    [URUN] [nchar](10) NULL,
    [FIYAT] [nchar](10) NULL
) ON [PRIMARY]

GO

C++:
     ' Carl SQL Server Connection
     '
     ' FOR THIS CODE TO WORK
     ' In VBE you need to go Tools References and check Microsoft Active X Data Objects 2.x library
     'https://social.msdn.microsoft.com/Forums/sqlserver/en-US/af843002-c47a-4126-b321-6e40a88cf34a/vba-connection-string-for-sql-server?forum=exceldev

Dim DATASI As String
Dim TABLOSU As String
Dim SERVER As String
Dim Conn As ADODB.Connection
Dim SQLStr As String
Dim rs As ADODB.Recordset
'Asri Akdeniz - asriakdeniz@gmail.com - www.asriakdeniz.com
  
Sub baglantiyap()
Set rs = New ADODB.Recordset
Set Conn = New ADODB.Connection

DATASI = Sheets("TANIMLAR").Range("B1").Value
TABLOSU = Sheets("TANIMLAR").Range("B2").Value
SERVER = Sheets("TANIMLAR").Range("B3").Value
USER = Sheets("TANIMLAR").Range("B4").Value
PASS = Sheets("TANIMLAR").Range("B5").Value

Conn.Open "Driver={SQL Server};Server=" & SERVER & ";Database=" & DATASI & ";Uid=" & USER & ";Pwd=" & PASS & ";"

End Sub

Sub baglantikapat()
    'RS.Close
    'conn.Close
    Set rs = Nothing
    Set Conn = Nothing
End Sub

Sub tblguncelleme()
   Call tbltemizle
   Call tblkayitekle
   Call tbllistele
End Sub

Sub tbllistele()
    Set shtablo = Sheets("Tablo")
    shtablo.Columns("A:D").ClearContents
    shtablo.Range("A1").Value = "ID"
    shtablo.Range("B1").Value = "URUN ID"
    shtablo.Range("C1").Value = "URUN"
    shtablo.Range("D1").Value = "FIYAT"
    shtablo.Range("E1").Select
  
    Call baglantiyap
    On Error GoTo hata1
    SQLStr = ""
    SQLStr = SQLStr & " SELECT * FROM  " & DATASI & ".DBO." & TABLOSU & " ORDER BY ID"
    rs.Open SQLStr, Conn, adOpenStatic
  
    If rs.State Then
       shtablo.Cells(2, 1).CopyFromRecordset rs
    End If
  
    On Error GoTo 0
GoTo son

hata1:
    MsgBox (TABLOSU & " Listelenemedi")
    
son:
    Set rs = Nothing
    Set Conn = Nothing
    Call baglantikapat
End Sub


Sub tbltemizle()
    Call baglantiyap
    SQLStr = ""
    SQLStr = SQLStr & " DELETE FROM " & DATASI & ".DBO." & TABLOSU
    SQLStr = SQLStr & " DBCC CHECKIDENT ('" & DATASI & ".DBO." & TABLOSU & "',RESEED,0) "
  
    On Error GoTo hata1
    rs.Open SQLStr, Conn, adOpenStatic
    On Error Resume Next
    GoTo son
hata1:
    hatavar = True
    MsgBox (TABLOSU & " Temzilenemedi")
son:
    Call baglantikapat

End Sub

Sub tblkayitekle()
Call baglantiyap
Set shtablo = Sheets("Tablo")
sonsatir = shtablo.Cells(shtablo.Rows.Count, "B").End(3).Row
If sonsatir <= 1 Then GoTo son

For i = 2 To sonsatir
   URUNID = shtablo.Cells(i, "B").Value
   URUN = shtablo.Cells(i, "C").Value
   FIYAT = shtablo.Cells(i, "D").Value

   SQLStr = ""
   SQLStr = SQLStr & "INSERT INTO [TESTDB].[dbo].[TBLTEST] ([URUNID],[URUN],[FIYAT]) VALUES ('" & URUNID & "','" & URUN & "','" & FIYAT & "')"

   On Error GoTo hata1
   rs.Open SQLStr, Conn, adOpenStatic
   On Error Resume Next
Next i

GoTo son
hata1:
hatavar = True
MsgBox ("Güncelleme tamamlanamadı")
son:
Call baglantikapat
End Sub
 

Ekli dosyalar

leonadies

Altın Üye
Altın Üye
Katılım
12 Şubat 2015
Mesajlar
435
Excel Vers. ve Dili
Excel 2016 TR
Üstadım elllerine sağlık. İlk fırsatta kapsamlı irdeleyeceğim :)
 
Üst