როგორ დავურეკოთ ა SQL Server შენახული პროცედურა Excel VBA-დან

გააზიარე ახლა:

სერვერზე მონაცემები შეიძლება შეიცვალოს Excel VBA-ში ჩანაწერების „კლიენტის მხარის“ შემოწმებით, საჭიროებისამებრ შეცვლით და სერვერზე დაბრუნებით.
ამის გაკეთების უფრო ეფექტური გზა, განსაკუთრებით იმ შემთხვევაში, თუ მონაცემთა ბაზა დისტანციურ ადგილას მდებარეობს და ბევრი ტრეფიკია ჩართული, არის სამუშაოს შესრულება "სერვერის მხარეს". ეს სავარჯიშო მოითხოვს Excel-ის შენახულ პროცედურას თანამშრომლების ასაკობრივ დიაპაზონებად დაყოფისთვის მათი დაბადების თარიღების მიხედვით (მაგ. 18-25 წელი, 26-35 წელი და ა.შ.), სერვერსა და Excel-ს შორის მონაცემთა უხვი გაცვლის გარეშე.

ეს სტატია ვარაუდობს, რომ მკითხველს აქვს დეველოპერის ლენტი ნაჩვენები და იცნობს VBA რედაქტორს. თუ არა, გთხოვთ Google „Excel Developer Tab“ ან „Excel Code Window“.

სავარჯიშოში სამი ელემენტია:

  • მონაცემთა ცხრილი tblStaff მონაცემთა ბაზაში TestDB;
  • შენახული პროცედურა spAgeRange;
  • Excel xlsm, რომელსაც ჩვენ დავარქმევთ xlsm. შეგიძლიათ იპოვოთ Excel ფაილის ნიმუში აქ დაწკაპუნებით

მონაცემთა ცხრილი

შექმენით მონაცემთა ბაზა SQL Server მოუწოდა DBTest.

დააყენეთ შემდეგი სვეტები ცხრილისთვის tblStaff.

დააყენეთ სვეტები მაგიდისთვის tblStaff

დააკოპირეთ შემდეგი ცხრილში:

2017/05/25 1 Brown J 1946/12/02 M
2017/05/25 2 Smart A 1976/03/26 F
2017/05/25 3 საკრუიზო T 1962/07/03 M
2017/05/25 4 Lohan L 1986/07/02 F
2017/05/25 5 ფრედრიქსენი F 1964/03/15 M
2017/05/25 6 Snyder L 1968/07/05 F
2017/05/25 7 ლიპნიკი J 1983/11/25 M
2017/05/25 8 Hoover S 2002/12/08 F
2017/05/25 9 Watson E 1990/04/15 F

შენახვის პროცედურა.

გაუშვით ეს სკრიპტი TestDB-ის წინააღმდეგ შენახული პროცედურის შესაქმნელად:

USE [TestDB]
GO
/****** Object: StoredProcedure [dbo].[spAgeRange] Script Date: 2017/05/10 12:16:28 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[spAgeRange]

    @PayrollDate varchar(50)
 
AS
BEGIN

    SET NOCOUNT ON;
    UPDATE tblStaff SET Age = CONVERT(int, DATEDIFF(day, DateOfBirth, GETDATE()) / 365.25, 0) 
    WHERE tblStaff.PayrollDate = @PayrollDate
 
    Update tblStaff set AgeRange = '>56' where Age >= 56 and PayrollDate = @PayrollDate

    Update tblStaff set AgeRange = '46 to 55' where Age >= 46 and Age < 56 and PayrollDate = PayrollDate 
 
    Update tblStaff set AgeRange = '39 to 45' where Age >= 39 and Age < 46 and PayrollDate = @PayrollDate 
 
    Update tblStaff set AgeRange = '31 to 38' where Age >= 30 and Age < 39 and PayrollDate = @PayrollDate 
 
    Update tblStaff set AgeRange = '25 to 30' where Age >= 25 and Age < 30 and PayrollDate = @PayrollDate 
 
    Update tblStaff set AgeRange = '18 to 24' where Age >= 18 and Age < 25 and PayrollDate = @PayrollDate 
 
    Update tblStaff set AgeRange = '<18' where Age < 18 and PayrollDate = @PayrollDate

END

შენახული პროცედურა შეინახება მონაცემთა ბაზაში „პროგრამირებადობის“ ქვეშ.

Excel VBA

რჩება მხოლოდ Excel-დან შენახული პროცედურის გამოძახება, მოწოდებით სახელფასო თარიღი პარამეტრი "2017/05/25". თქვენ შეამჩნევთ, რომ მე უბრალოდ მონაცემები მაქვს აკრეფილი  სახელფასო თარიღი როგორც სტრიქონი, ვიდრე ეჭიდება თარიღის სხვადასხვა ფორმატებს. სტრიქონის თარიღად გადაქცევა საკმარისად მარტივია გადაიყვანეთ ფუნქცია თუ სახელფასო თარიღი გამოიყენება არითმეტიკული მიზნებისთვის.

შექმენით ახალი სამუშაო წიგნი. გახსენით VBA კოდის ფანჯარა და ჩადეთ მოდული.

კოდის ფანჯრის ინსტრუმენტების მენიუდან, მიუთითეთ შესაბამისი Active X 2.nn ბიბლიოთეკა მონაცემთა ობიექტების გამოყენების გასაადვილებლად.მონაცემთა ობიექტების გამოყენების გასაადვილებლად იხილეთ შესაბამისი Active X 2.nn ბიბლიოთეკა

ჩასვით შემდეგი კოდი კოდის ფანჯარაში. ეს, გააქტიურების შემდეგ, დაუკავშირდება SQL Server, ConnectDatabase ქვეპროცედურის მიხედვით

'All "public" in case the code is spread over several modules.
Public connDB As New ADODB.Connection
Public rs As New ADODB.Recordset
Public strSQL As String
Public strConnectionstring As String
Public strServer As String
Public strDBase As String
Public strUser As String
Public strPwd As String
Public PayrollDate As String

Sub WriteStoredProcedure()
     PayrollDate = "2017/05/25"
     Call ConnectDatabase
     On Error GoTo errSP
     strSQL = "EXEC spAgeRange '" & PayrollDate & "'"
     connDB.Execute (strSQL)
     Exit Sub
errSP:
MsgBox Err.Description
End Sub

Sub ConnectDatabase()
     If connDB.State = 1 Then connDB.Close
     On Error GoTo ErrConnect
     strServer = "SERVERNAME" ‘The name or IP Address of the SQL Server
     strDBase = "TestDB"
     strUser = "" 'leave this blank for Windows authentication
     strPwd = ""

     If strPwd > "" Then
         strConnectionstring = "DRIVER={SQL Server};Server=" & strServer & ";Database=" & strDBase & ";Uid=" & strUser & ";Pwd=" & strPwd & ";Connection Timeout=30;"
     Else
         strConnectionstring = "DRIVER={SQL Server};SERVER=" & strServer & ";Trusted_Connection=yes;DATABASE=" &    strDBase 'Windows authentication
     End If
     connDB.ConnectionTimeout = 30
     connDB.Open strConnectionstring
Exit Sub
ErrConnect:
     MsgBox Err.Description
End Sub

დაამატეთ ღილაკი Sheet1-ს და მიანიშნეთ იგი ქვეპროცედურზე “WriteStoredProcedure"

შედეგები

დააჭირეთ ღილაკს, შემდეგ შეამოწმეთ tblStaff, რომელიც უნდა განახლდეს ასაკისა და ასაკობრივი დიაპაზონის მიხედვით. დამუშავება მოხდა სერვერის მხარეს.

დაზიანებული სამუშაო წიგნების აღდგენა

თუ Excel-ი გაითიშება, შესაძლოა, მასთან ერთად სამუშაო წიგნის თქვენი ერთადერთი ასლიც წაიშალოს. შემთხვევათა დიდ ნაწილში Excel ხშირად ვერ ახერხებს დაზიანებული სამუშაო წიგნების აღდგენას; ასეთ შემთხვევაში, სამუშაო წიგნის შექმნის შემდეგ შესრულებული ყველა სამუშაო შეიძლება შეუქცევადად დაიკარგოს, თუ არ გაქვთ ინსტრუმენტი, რომელიც... Excel-ის შეკეთება xlsx ან xlsm ფაილები.

ავტორი შესავალი:

ფელიქს ჰუკერი არის მონაცემთა აღდგენის ექსპერტი DataNumen, Inc., რომელიც მსოფლიო ლიდერია მონაცემთა აღდგენის ტექნოლოგიებში, მათ შორის rar-ის შეკეთება და sql აღდგენის პროგრამული პროდუქტები. დამატებითი ინფორმაციისთვის ეწვიეთ www.datanumen. ერთად

გააზიარე ახლა:

კომენტარები დახურულია.