Kuinka paeta tarjotut merkkijonot tietokannassa käytetyille SQL-lauseille Excel VBA: n kautta

SQL Server käyttää yksittäisten lainausparien tunnistamaan starmerkkijono t ja merkkijono. 'Mrs Brown's Boys' lisääminen tietokantataulukkoon epäonnistuu, koska kolme yksittäistä lainausta merkitsevät kahta merkkijonoa, joista toinen on puutteellinen. Ap: lle vaaditaan pakomerkkiostköysi Brownin jälkeen. Tässä artikkelissa tarkastellaan räätälöidyn VBA-toiminnon käyttöä tämän poikkeaman korjaamiseksi.

Tässä artikkelissa oletetaan, että lukijalla on kehittäjänauha ja että hän tuntee VBA-editorin. Jos ei, ota Google "Excel Developer -välilehti" tai "Excel Code -ikkuna".

Termi "tietokanta" tarkoittaa tässä "teollisen vahvuuden" tietokantoja, kuten SQL Server ja Oracle.

Löydetään esimerkki tässä harjoituksessa käytetystä työkirjasta täältä.

SQL-merkkijono

ApostSQL-käskyn sisällä olevat rophes (tai yksittäiset lainausmerkit) tarjoavat seuraavan virheen, joka palautetaan tietokannan hallinnasta (tässä tapauksessa nimelle O'Dowd):Virhe palautettu tietokannan hallintaohjelmasta

Tarvitaan pakohahmo, joka on kaksinkertainen apostköysi yhden sijasta. Siten O ”Dowd on hyväksyttävä tietokantaan. O'Dowd ei ole.

Toiminto

Siellä missä sieppauskentät saattavat sisältää AP: nostrophe, mukautettu toiminto voidaan rakentaa käynnistämään ennen päivitystä korvaamalla yksittäinen lainaus kaksinkertaisella.

  1. Avaa uusi työkirja;
  1. Nimeä ensimmäinen arkki ”Päivitä” ja täytä se seuraavasti käyttämällä omaa tietokannan nimeä jne. Näitä kenttiä käytetään muodostamaan yhteysmerkkijono SQL Server.Nimeä ensimmäinen arkki "Päivitä" ja täytä tämä
  2. Avaa koodiikkuna ja aseta moduuli. Käytä valikkokohteita> Työkalut> Viitteet viittaamaan ADO librart.Avaa Koodi-ikkuna ja lisää moduuli

Kopioi alla oleva koodi moduuliin. Tämä muodostaa yhteyden tietokantaan.

Julkinen connectDB uutena ADODB.Connection Julkinen rs kuten uusi ADODB.Recordset Julkinen strSQL As String Julkinen strCriteria As String Sub ConnectDatabase () Jos connDB.State = 1 Sitten connDB.Close On Error GoTo ErrConnect Dim strServer, strDBase, strUser, strPWD As String strServer = Sheets ("Päivitä"). Range ("B2") strDBase = Sheets ("Päivitä"). Range ("B3") strUser = Sheets ("Päivitä"). Range ("B4") strPWD = Sheets (" Päivitä "). Alue (" B5 ") Jos strPWD>" "Sitten strConnectionstring =" DRIVER = {SQL Server}; Server = "& strServer &"; Database = "& strDBase &"; Uid = "& strUser &"; Pwd = "& strPWD &"; Yhteyden aikakatkaisu = 30; "Muu strConnectionstring =" DRIVER = {SQL Server}; SERVER = "& strServer &"; Trusted_Connection = kyllä; DATABASE = "& strDBase 'Windows-todennus loppu
  1. Lisää toiminto moduuliin:
Toiminto fRemoveApostrophe (strWord as string) Dim n kuten kokonaisuus Dim x kuten kokonaisuus x = 0 For n = 0 - 100 x = InStr (x + 2, strWord, "'")' 'Etsi apostrophes Jos x = 0, Lopeta, jos x> 0 Sitten strWord = Vasen (strWord, x - 1) & Chr (39) & Chr (39) & Oikea (strWord, Len (strWord) - (x)) Lopeta, jos Seuraava n fRemoveApostrophe = strWord End -toiminto
  1. Ohita toiminto.
Sub IgnoreFunction () Kutsu ConnectDatabase strCriteria = Arkit ("Päivitä"). Alue ("B10") strSQL = "Lisää tblCrewMember (Sukunimi) -arvoihin ('" & strCriteria & "')" MsgBox strSQL & ". Tämä SQL-merkintä tulee epäonnistua; huomaa kolme apost"DebugPrint strSQL 'connDB.Execute (strSQL) Loppu
  1. Käytä toimintoa
Sub UseFunction () Kutsu ConnectDatabase strCriteria = Arkit ("Päivitä"). Alue ("B15") strCriteria = fRemoveApostrophe (strCriteria) strSQL = "Lisää tblCrewMember (Sukunimi) -arvoihin ('" & strCriteria & "')" MsgBox strSQL & ". Tämä SQL-merkintä onnistuu ja näkyy tietokannassa nimellä O'Dowd." Debug.Print strSQL 'connDB.Execute (strSQL) End Sub
  1. Täydellinen Päivitykset laskentataulukko seuraavasti, starsolussa A8:Täytä Päivitä laskentataulukko
  1. Määritä painikkeet makroihin Ohita toiminto ja UseFunction vastaavasti

Tulokset

Viestiruutu näyttää tulokset; yhtään tietokantaa ei ole päivitetty fyysisesti tässä harjoituksessa, mutta jos haluat tehdä niin, varmista, että kenttien nimet ovat yhteensopivia tietokannan kanssa, ja lisää VBA-käsky conndb.execute (strSQL)

Palauttaminen Excelistä kaatuu

Excel on taipuvainen kaatumaan, kun tietokoneesi resurssit ovat loppumassa. Tämän harjoituksen kirjoittamisen aikana Excelin laskentataulukko, vielä tallentamatta, jäätyi. Koodi-ikkuna oli osittain reagoiva, mikä mahdollisti työkirjan sulkemisen kokonaisuudessaan. Kuten kävi ilmi, työkirja avautui normaalisti sisällön ja koodin valmistuttua. Oli temporary ja lähdetiedostot ovat vahingoittuneet (aivan liian usein), työ olisi jouduttu tekemään uudestaan ​​ilman korjaustyökalua xlsx-vaurio. Sillä ei ollut merkitystä tässä tapauksessa, mutta se voi olla potentiaalinen katastrofi suuremmille työkirjoille.

Tekijän esittely:

Felix Hooker on tietojen palauttamisen asiantuntija DataNumen, Inc., joka on maailman johtava tietojen palautustekniikoissa, mukaan lukien toipua rar ja sql-palautusohjelmistotuotteet. Lisätietoja osoitteessa www.datanumen.com

Kommenttien lisääminen on estetty.