SQL Server käyttää yksittäisiä lainausmerkkejä merkkijonon alun ja lopun merkitsemiseen. Merkkijonon 'Rouva Brownin pojat' lisääminen tietokantataulukkoon epäonnistuu, koska kolme yksittäistä lainausmerkkiä tarkoittavat kahta merkkijonoa, joista toinen on epätäydellinen. Brownin jälkeiseen heittomerkkiin vaaditaan koodinvaihtomerkki. Tässä artikkelissa tarkastellaan mukautetun VBA-funktion käyttöä tämän poikkeaman ratkaisemiseksi.
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 Oraakkeli.
Löydetään esimerkki tässä harjoituksessa käytetystä työkirjasta täältä.
SQL-merkkijono
Heittomerkkien (tai yksittäisten lainausmerkkien) lisääminen SQL-lausekkeen sisään aiheuttaa tietokannan hallitsijan palauttaman seuraavan virheen (tässä tapauksessa nimellä O'Dowd):
Tarvitaan ohjausmerkki, joka on kahden heittomerkin sijasta yksi. Näin ollen O”Dowd on tietokannan hyväksymä. O'Dowd ei ole.
Toiminto
Jos sieppauskentissä saattaisi olla heittomerkki, voidaan luoda mukautettu funktio, joka käynnistyy ennen päivitystä ja korvaa yksittäisen lainausmerkin kaksoislainausmerkillä.
- Avaa uusi työkirja;
- 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.
- Avaa koodi-ikkuna ja lisää moduuli. Käytä valikkokohtia >Työkalut >Viitteet viitataksesi ADO-kirjastoihin.
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
- Lisää toiminto moduuliin:
Funktio fRemoveApostrophe(strWord As String) Dim n As Integer Dim x As Integer x = 0 For n = 0 To 100 x = InStr(x + 2, strWord, "'") 'Etsi heittomerkkien sijainti Jos x = 0 Then Lopeta For If x > 0 Then strWord = Left(strWord, x - 1) & Chr(39) & Chr(39) & Right(strWord, Len(strWord) - (x)) End If Next n fRemoveApostrophe = strWord End Funktio
- Ohita toiminto.
Sub IgnoreFunction() Kutsu ConnectDatabase strCriteria = Sheets("Update").Range("B10") strSQL = "Lisää tblCrewMember (LastName) -taulukkoon arvot ('" & strCriteria & "')" MsgBox strSQL & ". Tämä SQL-merkintä epäonnistuu; huomaa kolme heittomerkkiä." Debug.Print strSQL 'connDB.Execute (strSQL) End Sub
- Käytä toimintoa
Sub UseFunction() Kutsu ConnectDatabase strCriteria = Sheets("Update").Range("B15") strCriteria = fRemoveApostrophe(strCriteria) strSQL = "Lisää tblCrewMember (LastName) -taulukkoon arvot ('" & strCriteria & "')" MsgBox strSQL & ". Tämä SQL-merkintä onnistuu ja näkyy datataulussa muodossa O'Dowd." Debug.Print strSQL 'connDB.Execute (strSQL) End Sub
- Täydellinen Päivitykset laskentataulukko seuraavasti alkaen solusta A8:
- 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 kaatuu helposti, kun tietokoneen resurssit loppuvat. Tämän harjoituksen kirjoittamisen aikana Excelin tallentamaton laskentataulukko jumiutui. Koodi-ikkuna reagoi osittain, joten työkirjan voitiin sulkea kokonaan. Työkirja avautui kuitenkin normaalisti sisällön ja koodin ollessa valmiina. Jos väliaikaiset ja lähdetiedostot olisivat (liian usein) vaurioituneet, työ olisi pitänyt tehdä uudelleen ilman työkalua ongelman ratkaisemiseksi. 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 palauta rar-tiedosto ja sql-palautusohjelmistotuotteet. Lisätietoja osoitteessa www.datanumen.com


