sql >> Database >  >> RDS >> Access

Ad-hoc verbindingsreeksen en heterogene query's voor MS Access

Ad-hoc verbindingsreeksen en heterogene query's voor MS Access

Heterogene query's zijn de reden waarom verbindingsreeksen, met name ad-hocverbindingsreeksen, belangrijk zijn. In eerdere artikelen van de serie hebt u gezien hoe u de verbindingsparameters kunt aanpassen om verbinding te maken met Excel en tekstbestanden. In het geval van de tekstbestanden kunt u ook het schema van de structuur van het tekstbestand beschrijven met behulp van schema.ini of opgeslagen specificaties. In het eerste artikel heb je ook het verschil geleerd tussen het koppelen en openen van een gegevensbron.

Heterogene zoekopdrachten in plaats van VBA-code

U zag in de vorige artikelen voorbeeldcode van het openen van een dergelijke gegevensbron met behulp van de OpenDatabase van de DAO methode.

Set db = DBEngine.OpenDatabase(vbNullString, False, False, "Excel 12.0 Xml;HDR=YES;IMEX=2;ACCDB=YES;DATABASE=C:\Links\Products.xlsx")

Dit kan u de indruk geven dat de enige manier om een ​​gegevensbron te openen via code is. Maar dat hoeft niet zo te zijn! U kunt eigenlijk een willekeurige gegevensbron openen met alleen Access-query. Hier is een voorbeeldsyntaxis die u kunt uitvoeren in een Access-query:

SELECT * 
FROM [Excel 12.0 Xml;HDR=YES;IMEX=2;ACCDB=YES;DATABASE=C:\Links\Products.xlsx].[Sheet1$];

Over het algemeen is de verbindingsreeks die u in de OpenDatabase . plaatst De 4e parameter is degene waarmee u de "tabel" zou laten voorafgaan. Daarom zou de algemene syntaxis zijn:

FROM [<complete connection string>].[<name of the table>]

U kunt de OpenDatabase . gebruiken methode en herhaal TableDefs om de geldige namen van de tabel te vinden. Die kun je dan gebruiken om het 2e deel van de naam in te vullen.

Waarom openen in plaats van link?

Een voordeel van openen in tegenstelling tot koppelen is dat u de verbindingsreeks tijdens runtime kunt wijzigen. Ook heb je niet te maken met de vereiste opschoning zoals het verwijderen van de niet langer benodigde gekoppelde objecten. Het is puur van voorbijgaande aard, wat perfect zou zijn om gegevens van de ene naar de andere bron te verplaatsen zonder VBA-code te schrijven.

Hier is een mogelijk scenario. Stel dat we tekstbestanden willen maken die een uitvoer zijn van een weergave op onze SQL Server-database. Je zag in eerdere artikelen dat we VBA-code konden schrijven om over de DAO-recordsets te lopen en de inhoud één voor één te schrijven. Als alternatief kunnen we echter gewoon een Access-query maken met deze SQL:

INSERT INTO [Text;DATABASE=C:\Links\].[products.csv;] (Products, Count)
SELECT Products, Count
FROM [ODBC;DRIVER=ODBC Driver 17 for SQL Server;SERVER=myServer;DATABASE=myDatabase;].[vwProducts];

Omdat zowel de bestemming als de bron niet de bron van Access zijn, is dit wat we "heterogene zoekopdracht" noemen. Merk op dat zelfs als de vwProducts een gekoppelde tabel was, zou het nog steeds een "heterogene" zoekopdracht zijn. Dat komt omdat we nog steeds verschillende gegevensbronnen combineren in één enkele zoekopdracht.

Wat nog belangrijker is, door een heterogene query te gebruiken, vermijden we de noodzaak om tijdelijke objecten in onze Access-toepassing te maken. Als u een tijdelijk object maakt, kan de Access-toepassing opzwellen. Dit is zelfs het geval bij importeren of door te koppelen of door recordsets in VBA te gebruiken. Een opgeblazen bestand kan op zijn beurt gecomprimeerd en gerepareerd moeten worden. Wanneer u echter een heterogene query gebruikt om gegevens rechtstreeks van de ene gegevensbron naar de andere over te dragen, vermijdt u al dat opgeblazen gevoel. Daarom is het ideaal voor scenario's waarin uw Access-toepassing meerdere bestanden moet genereren zonder onderhoud aan de toepassing zelf.

Construeren van de ad-hoc verbindingsreeks

Inmiddels kun je zien waarom het waardevol is om de parameters te begrijpen die in de verbindingsreeks worden gebruikt. Het is vooral belangrijk om de bestemming te bepalen (bijvoorbeeld pad voor tekstbestanden of het bereik voor Excel-blad). Met die niet-relationele gegevensbronnen is het misschien niet intuïtief wat een "database" en "tabellen" in een dergelijke gegevensbron is. U kunt de laatste 3 artikelen als referentie gebruiken voor hulp bij het samenstellen van de verbindingsreeks en de schema-informatie om ervoor te zorgen dat de lay-out goed uitkomt. Dat gezegd hebbende, is er ook een snelkoppeling die u kunt gebruiken om de verbindingsreeks te vinden.

U kunt het tabblad Externe gebruiken en "Tekst importeren" of Excel importeren" gebruiken en de koppelingsoptie kiezen. Het is meestal de derde optie in de wizard, zoals weergegeven.

Nadat je de wizard hebt doorlopen en de nieuwe gekoppelde tabel hebt opgeslagen, kun je de verbindingsreeks via het directe VBA-venster inspecteren met deze code:

?CurrentDb.TableDefs("<name of linked table>").Connect

Dit kan u hints geven over het construeren van de verbindingsreeks en u kunt deze vervolgens aanpassen. Meestal zul je merken dat je het pad of de tabelnaam aanpast, zodat het meestal voldoende werkt als een techniek tijdens je ontwikkeling. U kunt dan overeenkomstig een heterogene query maken en de gekoppelde tabel verwijderen.

Conclusies

In de serie heb je het verschil geleerd tussen linken en openen. Vervolgens zag je hoe Excel- en tekstbestanden kunnen worden gebruikt alsof het een DAO.Database is. objecten met "tabellen". Met het 2e artikel leerde u over verbindingsparameters voor een Excel-werkmap. In het derde artikel zag je de noodzaak om schema-informatie te hebben om een ​​tekstbestand te beschrijven. In het 4e artikel wordt beschreven hoe u schema.ini gebruikt . In het 5e artikel zag je hoe de MSysIMEXSpecs en MSysIMEXColumns kan worden gebruikt als alternatief voor de schema.ini methode.

Ten slotte hebben we het allemaal samengebracht in het construeren van een heterogene query als voorbeeld van een low-code-oplossing. We hoeven geen grote hoeveelheid VBA-code te schrijven om gegevens van de ene naar de andere bron te pushen. Ik denk dat u het ermee eens zult zijn dat het veel gemakkelijker is om een ​​Access-query aan te passen door de pad- of tabelnaam aan te passen dan om een ​​grote en complexe VBA-routine te schrijven om gegevens te lezen en te schrijven. Belangrijker nog, door een heterogene query te gebruiken, wordt het veel gemakkelijker om de veranderingen in de structuur aan beide kanten te verwerken. Een nieuwe kolom toegevoegd? Geen probleem, voeg gewoon de nieuwe kolom toe aan de zoekopdracht en we zijn klaar.

Zoals u ziet, vereist dit echter een goed begrip van de constructie van de verbindingsreeks. Om die reden was het noodzakelijk om de fijne kneepjes van de verbindingsreeks grondig te bestuderen, zoals we deden van het 2e tot het 5e artikel. Hoewel we de gekoppelde tabelwizard kunnen gebruiken om ons de hint over de verbindingsreeksen te geven. Maar het zijn slechts hints. Daarom is het goed om te weten hoe je de output precies kunt regelen. Ik hoop dat u het ermee eens bent dat het investeren van enige moeite om te begrijpen hoe verbindingsreeksen werken zichzelf terugbetaalt in bespaarde arbeid.


  1. SQL Client voor Mac OS X die werkt met MS SQL Server

  2. Een gegevensmodel voor kinderfeestjes

  3. KRUIS/BUITEN TOEPASSEN in MySQL

  4. Wat geeft parameters door aan SQL en waarom heb ik deze nodig?