Duomenis serveryje galima modifikuoti „Excel VBA“ ištyrus įrašus „kliento pusėje“, juos pakeičiant pagal poreikį ir išsaugant atgal į serverį.
Veiksmingesnis būdas tai padaryti, ypač jei duomenų bazė yra atokioje vietoje ir yra didelis srautas, yra atlikti darbą „serverio pusėje“. Šis pratimas iškviečia išsaugotą procedūrą iš „Excel“, kad suskirstytų darbuotojus į amžiaus grupes pagal jų gimimo datas (ty 18–25 m., 26–35 m. ir t. t.), be gausaus duomenų mainų tarp serverio ir „Excel“.
Šiame straipsnyje daroma prielaida, kad skaitytojas turi rodomą kūrėjo juostelę ir yra susipažinęs su VBA redaktoriumi. Jei ne, naudokite Google „Excel Developer Tab“ arba „Excel Code Window“.
Pratimą sudaro trys elementai:
- Duomenų lentelė tblPersonalas duomenų bazėje TestDB;
- Išsaugota procedūra spAgeRange;
- Excel xlsm, kurį vadinsime xlsm. Galima rasti Excel failo pavyzdį čia
duomenų lentelė
Sukurkite duomenų bazę SQL Server vadinamas DBTest.
Nustatykite šiuos lentelės stulpelius tblPersonalas.

Nukopijuokite į lentelę:
| 2017/05/25 | 1 | rudas | J | 1946/12/02 | M | ||
| 2017/05/25 | 2 | Sumanus | A | 1976/03/26 | F | ||
| 2017/05/25 | 3 | kruizas | T | 1962/07/03 | M | ||
| 2017/05/25 | 4 | Lohanas | L | 1986/07/02 | F | ||
| 2017/05/25 | 5 | Fredricksenas | F | 1964/03/15 | M | ||
| 2017/05/25 | 6 | Snyderis | L | 1968/07/05 | F | ||
| 2017/05/25 | 7 | Lipnickis | 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 |
Išsaugota procedūra.
Paleiskite šį scenarijų su TestDB, kad sukurtumėte saugomą procedūrą:
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
Išsaugota procedūra bus išsaugota duomenų bazės skiltyje „Programavimas“.
„Excel VBA“
Belieka iškviesti išsaugotą procedūrą iš „Excel“, pateikiant Darbo užmokesčio data parametras „2017/05/25“. Pastebėsite, kad aš tiesiog įvedžiau duomenis Darbo užmokesčio data kaip styga, o ne grumtis su įvairiais datos formatais. Pakankamai paprasta konvertuoti eilutę į datą naudojant Konvertuoti funkcija, jei Darbo užmokesčio data turi būti naudojamas aritmetiniais tikslais.
Sukurkite naują darbaknygę. Atidarykite VBA kodo langą ir įdėkite modulį.
Kodo lango meniu Įrankiai nurodykite atitinkamą „Active X 2.nn“ biblioteka palengvinti duomenų objektų naudojimą.
Įklijuokite šį kodą į kodo langą. Tai suaktyvinus, bus prisijungta prie SQL Server, kaip nurodyta „ConnectDatabase“ antrinėje procedūroje
'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
Pridėkite mygtuką prie 1 lapo ir priskirkite jį prie procedūros „WriteStoredProcedure"
Rezultatai
Paspauskite mygtuką, tada patikrinkite tblStaff, kuris turėtų būti atnaujintas pagal amžių ir amžiaus intervalus. Apdorojimas įvyko serverio pusėje.
Sugadintų darbo knygų atkūrimas
Jei „Excel“ programa sugestų, kartu gali būti prarasta ir vienintelė darbaknygės kopija. Nemaža dalis atvejų, kai „Excel“ negali atkurti sugadintų darbaknygių; tokiu atveju visas darbas, atliktas nuo darbaknygės sukūrimo, gali būti negrįžtamai prarastas, nebent turite įrankį, kuris padėtų... taisyti Excel xlsx arba xlsm failus.
Autoriaus įvadas:
Felixas Hookeris yra duomenų atkūrimo ekspertas DataNumen, Inc., kuri yra pasaulyje duomenų atkūrimo technologijų lyderė, įskaitant rar failų taisymas ir sql atkūrimo programinės įrangos produktai. Norėdami gauti daugiau informacijos, apsilankykite WWW.datanumen.com
