{"id":55000945,"date":"2014-08-01T00:00:00","date_gmt":"2020-05-22T21:11:57","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=945"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"SQLite_und_Access","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/SQLite_und_Access\/","title":{"rendered":"SQLite und Access"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg07.met.vgwort.de\/na\/a06064443fdd4f25b1d96f5d4f214a38\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Ist Ihnen der Begriff SQLite schon einmal untergekommen Wenn nicht, so ist das nicht weiter verwunderlich, handelt es sich dabei doch um ein Datenbanksystem, das Sie als Access-Benutzer wahrscheinlich nicht brauchen und viele &auml;hnlichkeiten mit Access aufweist. Wenn doch, so k&ouml;nnte das der Verbreitung von Android-Smartphones und -Tablets geschuldet sein, denn unter Android ist SQLite das Standarddatenbankformat mit Systemunterst&uuml;tzung &#8211; die allermeisten Apps verwenden es, wenn gr&ouml;&szlig;ere Datenmengen zu speichern sind. Grund genug, dieses Format einmal genauer unter die Lupe zu nehmen.<\/b><\/p>\n<p><b>Was ist SQLite<\/b><\/p>\n<p>SQLite gibt es bereits seit dem Jahr 2000. Es wird im Kern von drei Programmierern weiterentwickelt, jedoch von einer gro&szlig;en Schar von Unterst&uuml;tzern mitbetreut, da der Quellcode unter Public Domain steht. Einst war es als Datenbanksystem f&uuml;r einige wenige Aufgaben gedacht gewesen. Statt etwa Programmeinstellungen in INI-Dateien unterzubringen, sollte die M&ouml;glichkeit bestehen, diese komfortabler in einer Datenbank zu verwalten, ohne daf&uuml;r extra eine umfangreiche Datenbank-Engine installieren zu m&uuml;ssen. Dieser Grundgedanke &#8211; das Lite im Namen &#8211; steht auch heute noch an erster Stelle. Wenn Sie sich auf der Website von <b>sqlite.org <\/b> die Precompiled Binaries f&uuml;r Windows herunterladen, sind Sie vielleicht erstaunt, dass sich lediglich zwei Dateien im ZIP-Paket befinden. Die eine davon, die Kommandozeilenanwendung <b>sqlite3.exe<\/b>, reicht dabei schon v&ouml;llig f&uuml;r die Verwaltung der Datenbankdateien aus.<\/p>\n<p>Inzwischen hat sich SQLite gemausert und steht den M&ouml;glichkeiten der Access Database Engine (vormals Jet-Engine) kaum nach. Die Gr&ouml;&szlig;e der Datenbanken kann in die Gigabytes gehen, alle analogen Datentypen sind vorhanden, der SQL-Dialekt ist umfangreicher als der von Access und &auml;hnelt eher dem gr&ouml;&szlig;erer DBMS, Fremdschl&uuml;ssel werden unterst&uuml;tzt und Mehrbenutzerzugriffe sind kein Problem. Auch Transaktionen, Views und Trigger fehlen nicht. Inzwischen sind zahlreiche Schnittstellen zu allerlei Programmierumgebungen entstanden. Viele namhafte Software-Firmen haben das Format inzwischen adaptiert und verwenden es auch jenseits Android. Um einige Programme zu nennen, die einen gro&szlig;en Teil ihrer Daten &uuml;ber SQLite verwalten: Firefox, Chrome, Skype, Dropbox, XNView.<\/p>\n<p>Um Missverst&auml;ndnisse zu vermeiden: SQLite ist ein Pendant zur Access Database Engine, nicht jedoch zu Access. Es gibt keine grafische Oberfl&auml;che wie f&uuml;r den Tabellenentwurf oder die Datenblatt-ansicht unter Access, sondern mit der <b>sqlite3.exe <\/b>lediglich ein Kommandozeilen-Tool zur Anlage und Abfrage der Datenbanken, oder mit der <b>sqlite3.dll <\/b>eine Programmierschnittstelle, die per API angesprochen werden muss. Wer eine grafische Verwaltung haben will, der ben&ouml;tigt separate Editoren, von denen allerdings zahlreiche vorhanden sind. Dazu sp&auml;ter mehr.<\/p>\n<p>Eine SQLite-Datenbank besteht aus nur einer Datei, die &uuml;blicherweise die Endung <b>.sqlite <\/b>oder <b>.db <\/b>aufweist, so, wie bei Access auch nur eine <b>.mdb<\/b>&#8211; oder <b>.accdb<\/b>-Datei n&ouml;tig ist. Intern kann die Datei allerdings mehrere Datenbanken enthalten, wovon die eigentlich genutzte meist den Namen <b>main <\/b>tr&auml;gt, w&auml;hrend die anderen Systemdatenbanken sind. Darunter befinden sich die Tabellen, die relational miteinander verkn&uuml;pft sein k&ouml;nnen. Dabei k&ouml;nnen Fremdschl&uuml;sselbeziehungen angelegt oder Beschr&auml;nkungen (Constraints) definiert werden. Beziehungen zwischen mehreren Datenbankdateien, so wie gelinkte Tabellen unter Access, sind jedoch nicht direkt m&ouml;glich. Views schlie&szlig;lich dienen der gefilterten Ausgabe der Tabellendaten. SQLite-Views sind im Unterschied zu den meisten DBMS aber nicht aktualisierbar.<\/p>\n<p>Eine umfassende Darstellung des Formats und seiner Features kann an dieser Stelle nicht gegeben werden. Schauen Sie sich bei Interesse die durchaus gelungene Dokumentation auf der Seite der Herausgeber  an. Betrachten wir eher, was wir unter Access mit SQLite anfangen k&ouml;nnen.<\/p>\n<p><b>SQLite und Access<\/b><\/p>\n<p>Wie kommen die Daten einer SQLite-Datenbank in oder zu Access Eine direkte Verkn&uuml;pfung ist zun&auml;chst nicht m&ouml;glich, da hierf&uuml;r der entsprechende ISAM-Treiber fehlt. Per Code k&ouml;nnten Sie die <b>sqlite3.dll <\/b>ansprechen, ben&ouml;tigten daf&uuml;r aber API-Deklarationen, die Sie f&uuml;r VB(A) vergeblich suchen werden. Zum Gl&uuml;ck ist das aber &uuml;berfl&uuml;ssig, da Olaf Schmidt mit dem <b>vbRichClient <\/b>eine kostenlose Schnittstelle zur Verf&uuml;gung stellt, deren Programmierung fast identisch zu der von DAO oder ADO ist.<\/p>\n<p><b>ODBC<\/b><\/p>\n<p>Um eine Datenbank eines fremden DBMS direkt in Access zu bekommen, braucht es einen ODBC-Treiber, wie ihn etwa der MS SQL-Server oder MYSQL mitbringen. Auch f&uuml;r SQLite existieren ODBC-Treiber, wobei sich jener von Christian Werner  quasi zum Standard entwickelt hat. Andere Treiber sind meist Modifikationen seines Treibers, der im Quellcode ver&ouml;ffentlicht ist. Laden Sie sich also das Installationspaket von dessen Seite herunter und starten das Setup.<\/p>\n<p>Danach finden Sie im ODBC-Datenquellen-Administrator von Windows einen neuen Eintrag <b>SQLite3 ODBC Driver <\/b>auf der Treiberseite, wie in Bild 1. Den Datenquellen-Administrator finden Sie in den neueren Windows-Versionen &uuml;ber <b>Startmen&uuml;|Verwaltung|Daten-quellen (ODBC)<\/b>.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2014_04\/01_ODBCAdmin.png\" alt=\"Der ODBC-Datenquellen-Administrator von Windows mit der Liste installierter Treiber\" width=\"400\" height=\"332,5302\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Der ODBC-Datenquellen-Administrator von Windows mit der Liste installierter Treiber<\/span><\/b><\/p>\n<p>Um anschlie&szlig;end eine neue Datenquelle (DSN) zu einer SQLite-Datenbank im Administrator anzulegen, &ouml;ffnen Sie die Seite <b>Benutzer-DSN<\/b>, klicken <b>Hinzuf&uuml;gen <\/b>an und w&auml;hlen dann den neuen Treibereintrag aus. Ein Klick auf <b>Fertig stellen <\/b>f&uuml;hrt zum Konfigurationsdialog des Treibers (s. Bild 2). Die Voreinstellungen des Dialogs k&ouml;nnen Sie zun&auml;chst getrost &uuml;bernehmen. Essentiell sind jedoch zwei Eintr&auml;ge: Unter <b>Database Name <\/b>geben Sie den Pfad zur SQLite-Datei an, den Sie auch &uuml;ber die Schaltfl&auml;che <b>Browse <\/b>ermitteln k&ouml;nnen. Was dann passiert, h&auml;ngt aber vom Kontrollk&auml;stchen <b>Don&#8220;t create Database <\/b>ab. Ist hier kein H&auml;kchen gesetzt, so wird nach dem Klick auf <b>OK <\/b>automatisch eine leere SQLite-Datei erstellt, falls die angegebene Datei noch nicht existiert. Ansonsten wird eine Verbindung zur bestehenden Datei hergestellt. Ist das H&auml;kchen gesetzt, so wird keine leere Datei angelegt. Existiert die angegebene dann Datei nicht, so erfolgt beim Verbinden eine Fehlermeldung des Treibers. Lassen Sie f&uuml;r unseren Test, abweichend zur Abbildung, das H&auml;kchen weg. Die wichtigsten weiteren Parameter des Dialogs:<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2014_04\/02_ODBCDialog.png\" alt=\"Konfiguration einer SQLite-ODBC-Verbindung (DSN)\" width=\"400\" height=\"319,4445\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Konfiguration einer SQLite-ODBC-Verbindung (DSN)<\/span><\/b><\/p>\n<ul>\n<li><b>No TXN <\/b>bedeutet keine Transaktionen. Alle SQL-Anweisungen werden sofort ausgef&uuml;hrt, wenn hier ein H&auml;kchen gesetzt ist. Andernfalls k&ouml;nnen Sie SQL-Anweisungen in <b>BEGIN TRANSACTION .. COMMIT &#8230; ROLLBACK &#8230; END TRANSACTION<\/b>-Bl&ouml;cke einschlie&szlig;en.<\/li>\n<li><b>Foreigns Keys<\/b>: Fremdschl&uuml;sselunterst&uuml;tzung eingeschaltet\/ausgeschaltet. Standardm&auml;&szlig;ig ist dies deaktiviert.<\/li>\n<li><b>Lock Timeout<\/b>: Hier k&ouml;nnen Sie einen Wert im Millisekunden angeben, die Zeitspanne, die eine Sperre zur SQLite-Datei maximal andauern darf, bevor der Treiber einen Schreibversuch abbricht. F&uuml;r lokale Systeme hat dies normal keine Bedeutung.<\/li>\n<\/ul>\n<p>Nachdem Sie den Dialog mit <b>OK<\/b> best&auml;tigt haben, finden Sie in der Liste der Benutzerdatenquellen den Eintrag, den Sie im Dialog unter <b>Data Source Name <\/b>vergeben hatten.<\/p>\n<p><b>Import\/Export<\/b><\/p>\n<p>Schreiten Sie nun zur Tat und &ouml;ffnen eine beliebige Access-Datenbank, etwa die Demodatenbank <b>sqlite_demo.mdb <\/b>zu diesem Beitrag. Markieren Sie eine Tabelle, in unserem Test die Tabelle <b>tblTest<\/b>, und gehen Sie dann unter Access 2003 und fr&uuml;her auf <b>Datei|Exportieren<\/b>, w&auml;hlen als Dateityp <b>ODBC-Datenbanken()  <\/b>und geben einen neuen Namen f&uuml;r die zu exportierende Tabelle an.<\/p>\n<p>Verwenden Sie hier <b>tblTest2<\/b>. Unter Access 2007 und neuer &ouml;ffnen Sie stattdessen das Kontextmen&uuml; der Tabelle, gehen auf <b>Exportieren|ODBC-Datenbank<\/b>.<\/p>\n<p>Anschlie&szlig;end &ouml;ffnet sich der Datenquellendialog, in dem Sie unter <b>Computerdatenquellen <\/b>die zuvor angelegte SQLite-Verbindung ausw&auml;hlen. Im Normalfall sollte die Aktion nun erfolgreich quittiert werden &#8211; schon haben Sie eine Access-Tabelle nach SQLite transferiert.<\/p>\n<p>Interessant ist, dass dies selbst bei Tabellen mit Anlagefeldern fehlerfrei funktioniert &#8211; versuchen Sie es etwa mit der versteckten Systemtabelle <b>MsysResources <\/b>unter Access 2010. Allerdings werden Sie anschlie&szlig;end mit dem Anlagefeld, welches als Memofeld in die SQLite-Datei exportiert wurde, nicht viel anfangen k&ouml;nnen. Dort steht dann nur der Name der Anlage, nicht aber deren Bin&auml;rdaten.<\/p>\n<p>Nachdem die Tabelle exportiert wurde, kommt jetzt der umgekehrte Vorgang. Wir m&ouml;chten die Tabelle f&uuml;rs Erste aber nicht reimportieren, sondern eine Verkn&uuml;pfung zu ihr anlegen. Dazu gehen Sie unter Access 2003 auf <b>Datei|Externe Daten|Tabellen verkn&uuml;pfen <\/b>und w&auml;hlen wieder <b>ODBC-Datenbanken()<\/b>.<\/p>\n<p>Unter Access 2007 und neuer w&auml;hlen Sie den Ribbon-Eintrag <b>Externe Daten|ODBC-Datenbank|Verkn&uuml;pfen<\/b>. Nach Auswahl der SQLite-Verbindung sollten Sie mit einem Dialog konfrontiert werden, der die enthaltenen Tabellen anzeigt.<\/p>\n<p>Lief im vorherigen Schritt alles glatt, dann sollte hier die Tabelle <b>tblTest2 <\/b>aufgef&uuml;hrt sein. Markieren Sie diese und klicken Sie auf <b>OK <\/b>&#8211; schon finden Sie die per ODBC verkn&uuml;pfte Tabelle im Datenbankfenster oder Navigationsbereich vor.<\/p>\n<p>Nun wird es spannend: was ist beim Export und Import aus den Feldern der urspr&uuml;nglichen Tabelle geworden Die <b>tblTest <\/b>enth&auml;lt alle Feldtypen, die bis Access 2007 m&ouml;glich waren. &ouml;ffnen Sie die Tabellen <b>tblTest <\/b>und <b>tblTest2 <\/b>parallel im Entwurf, sodass Sie das Schema vergleichen k&ouml;nnen &#8211; siehe Bild 3. <\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2014_04\/03_tblTest_orig_linked1.png\" alt=\"Originale Testtabelle unter Access und das ODBC-verkn&uuml;pfte Pendant aus SQLite rechts im Entwurf\" width=\"648,6925\" height=\"422,8646\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Originale Testtabelle unter Access und das ODBC-verkn&uuml;pfte Pendant aus SQLite rechts im Entwurf<\/span><\/b><\/p>\n<p><!--30percent--><\/p>\n<p>Tats&auml;chlich sind die Felddefinitionen bis auf einige Ausnahmen identisch. Das ID-Feld wurde mit <b>Long<\/b>-Wert korrekt als Prim&auml;rschl&uuml;ssel &uuml;bernommen. Der Autowert funktioniert ebenfalls, auch wenn er im Entwurf so nicht angezeigt wird. Abweichungen gibt es bei der GUID, die unter Access als Zahl\/Replikations-ID definiert ist. In SQLite wurde diese als Bin&auml;rfeld angelegt, was im Entwurf durch den Feldtyp <b>OLE-Objekt<\/b> ersichtlich wird.<\/p>\n<p>Das ist sicherlich tragbar, wird dieser Feldtyp doch sehr selten verwendet.  Bei Dezimalfeld kam es zur Konvertierung in ein Memo-Feld, also ein Textfeld mit mehr als 255 Zeichen.<\/p>\n<p>Auch das ist zu verschmerzen, da der Dezimaltyp ohnehin weitere Angaben zur Genauigkeit und zur Kommaposition braucht. Der Single-Type kommt als Double zur&uuml;ck, was ebenfalls akzeptiert wird. Weniger Toleranz sollte dagegen die Wandlung von W&auml;hrung in Memo erfahren. Zwar ist der Sachverhalt hier &auml;hnlich, wie beim Dezimalfeld, jedoch l&auml;sst sich mit einem Memofeld schlecht rechnen. Zur Erl&auml;uterung finden Sie im Absatz zu den SQLite-Datentypen weitere Informationen.<\/p>\n<p>Dass schlie&szlig;lich der propriet&auml;re Typ <b>Hyperlink <\/b>nach <b>Memo <\/b>umgewandelt wird, ist nicht erstaunlich. Was au&szlig;erdem fehlt, sind Standardwerte, die f&uuml;r Felder unter Access vergeben wurden. <\/p>\n<p>Zusammenfassend l&auml;sst sich feststellen, dass der Export\/Import-Vorgang zwar brauchbar ist, jedoch verbesserungsw&uuml;rdig. Dazu kommen zwei L&ouml;sungen infrage: entweder Sie modifizieren die SQLite-Felder nach Export mit einem SQLite-Editor Ihrer Wahl, oder Sie legen die Tabellen gleich per VBA-Code als DDL-SQL-Anweisungen selbst an. Dazu finden sie in der Demodatenbank einige Routinen, die sp&auml;ter gesondert besprochen werden.<\/p>\n<p>Machen wir als N&auml;chstes den Test, was aus den Feldinhalten geworden ist. &ouml;ffnen Sie dazu die beiden Tabellen &uuml;bereinander, wie in Bild 4.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2014_04\/04_tblTest_orig_linked2.png\" alt=\"Anzeige der Daten aus originaler und verkn&uuml;pfter Tabelle\" width=\"700\" height=\"419,7048\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Anzeige der Daten aus originaler und verkn&uuml;pfter Tabelle<\/span><\/b><\/p>\n<p>Mit dem Ergebnis kann man zufrieden sein. Allerdings schleichen sich beim Single-Feld offenbar Rundungsfehler ein. Dasselbe gilt &uuml;brigens f&uuml;r alle Flie&szlig;kommazahlentypen, auch wenn das aus der Abbildung nicht hervorgeht.<\/p>\n<p>Es betrifft also alle Felder vom Type <b>Single<\/b>, <b>Double <\/b>und <b>Currency<\/b>. Erfreulich ist, dass offenbar auch das OLE-Objekt korrekt &uuml;bernommen wurde: ein Doppelklick auf die Zelle &ouml;ffnet das Icon, das in ihm verborgen ist. Wenn Sie mit den Datens&auml;tzen der verkn&uuml;pften SQLite-Tabelle spielen, werden Sie bald feststellen, dass es zu seltsamen Fehlermeldungen kommt, ohne dass diese so einfach nachzuvollziehen w&auml;ren.<\/p>\n<p>Einmal funktioniert das Editieren nicht, dann doch, und das L&ouml;schen der Datens&auml;tze scheint ebenfalls dem Zufallsprinzip zu unterliegen. Meist erscheint die Fehlermeldung aus Bild 5.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2014_04\/05_error_dlg_deletion.png\" alt=\"Fehlermeldung beim L&ouml;schen von Datens&auml;tzen in der ODBC-verkn&uuml;pften Tabelle\" width=\"700\" height=\"93,27628\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Fehlermeldung beim L&ouml;schen von Datens&auml;tzen in der ODBC-verkn&uuml;pften Tabelle<\/span><\/b><\/p>\n<p>Wer ist der andere Benutzer, der dieselben Daten ver&auml;ndern will, und das gar beim L&ouml;schen Die Begr&uuml;ndung f&uuml;r diese missverst&auml;ndliche Fehlermeldung liegt in den Untiefen der Access Database Engine verborgen.<\/p>\n<p>Ich lie&szlig; einen ODBC-Trace w&auml;hrend des L&ouml;schvorgangs loggen. Ein ODBC-Trace ist ein genaues Protokoll der Vorg&auml;nge zwischen Client und Server, hier also Access und dem SQLite-Treiber.<\/p>\n<p>Es l&auml;sst sich im ODBC-Administrator &uuml;ber Aktivierung der Ablaufverfolgung anlegen. Eine Analyse der Logs ergab, dass Access beim L&ouml;schen und Editieren den entsprechenden Datensatz &uuml;ber eine Kombination fast aller Felder zu ermitteln versucht, statt den Prim&auml;rschl&uuml;ssel heranzuziehen, warum auch immer.<\/p>\n<p>Die entscheidende Zeile im Protokoll sieht so aus:<\/p>\n<pre>DELETE FROM \"tblTest2\" WHERE \"ID\" =  AND \"TextFeld\" = ''Sascha Trowitzsch'' AND \"LongFeld\" = 1 \r\nAND \"IntFeld\" = 1 AND \"DoubleFeld\" = 1.2 AND \"SingleFeld\" = 1.29999995231628 AND \"ByteFeld\" = 5 \r\nAND \"BoolFeld\" =  AND \"DateFeld\" = {ts ''2015-02-01 08:44:00''}<\/pre>\n<p>Da aber die Rundungsfehler beim Double- und Singlefeld dazu f&uuml;hren, dass Abweichungen zu den Werten entstehen, die Access in der Tabellenansicht gespeichert hat, geht Access davon aus, dass die entsprechenden Daten mittlerweile von anderer Seite ge&auml;ndert wurden, und h&auml;lt den L&ouml;schvorgang an.<\/p>\n<p>Wir kommen deshalb nicht umhin, uns mit den SQLite-Datentypen zu besch&auml;ftigen.<\/p>\n<p><b>SQLite Datentypen<\/b><\/p>\n<p>Zwar k&ouml;nnen unter SQLite zahlreiche Feldtypen definiert und f&uuml;r diese wiederum diverse Parameter eingestellt werden, doch intern gibt es lediglich vier sogenannte <b>Storage<\/b>-Klassen. Das sind <b>Integer<\/b>, <b>Real<\/b>, <b>Text <\/b>und <b>Blob<\/b>.  <b>Real <\/b>ist dabei ein Flie&szlig;kommawert mit 8 Bytes.<\/p>\n<p>Das bedeutet, dass jeglicher Datentyp auf einen dieser Grundtypen gecastet werden muss.<\/p>\n<p>SQLite nimmt diese Konvertierung selbst vor, wobei die eigentliche Felddefinition herangezogen wird. Genaueres dazu erfahren Sie auf der Seite zu <b>Data Types <\/b>auf <b>sqlite.org<\/b>. Dort finden Sie eine Zuordnungsmatrix der Feldtypen zu den Grundklassen.<\/p>\n<p>Diesen Umstand zu kennen, ist zweifellos wichtig, wenn es um die Interaktion von Access mit SQLite geht.<\/p>\n<p>Es leiten sich daraus einige Regeln ab, die zu beherzigen sind.<\/p>\n<ul>\n<li>Vermeiden Sie die Typen <b>Single <\/b>und <b>W&auml;hrung<\/b>. Verwenden Sie stattdessen <b>Double<\/b>. Wenn die Genauigkeit von <b>Double <\/b>f&uuml;r W&auml;hrungsberechnungen nicht ausreichen sollte, so benutzen Sie <b>Text (varchar)<\/b>! Unter Access werden Sie dann allerdings zus&auml;tzliche Routinen zur Konvertierung von Text in <b>Currency <\/b>unterbringen oder Abfragen umgestalten m&uuml;ssen.<\/li>\n<li>Nehmen Sie f&uuml;r die numerischen Typen <b>Decimal <\/b>und <b>Numeric <\/b>ebenfalls <b>Text<\/b>.<\/li>\n<li><b>Boolean<\/b>, also <b>Ja\/Nein<\/b>-Feld, kann bleiben, wie es ist.<\/li>\n<li>Datumstypen definieren Sie unter SQLite entweder als <b>DateTime <\/b>oder <b>Timestamp<\/b>.<\/li>\n<li>Versehen Sie jede Tabelle mit einem Prim&auml;rschl&uuml;ssel. Au&szlig;erdem ist es, wie bei anderen DBMS n&uuml;tzlich, ihr ein zus&auml;tzliches indiziertes <b>Timestamp<\/b>-Feld zu spendieren, wie einige Programmierer berichten. Das <b>Timestamp<\/b>-Feld muss mit dem Default-Wert <b>CURRENT_TIMESTAMP <\/b>versehen sein.<\/li>\n<li>Gr&ouml;&szlig;enangaben f&uuml;r Textfelder interessieren SQLite intern nicht. In einem Textfeld k&ouml;nnen beliebig viele Zeichen abgespeichert werden. Die Definition ist aber f&uuml;r Access wichtig, denn als <b>varchar(255) <\/b>definierte Felder werden von Access als Text verstanden, gr&ouml;&szlig;ere als Memo. Letzteres gilt auch f&uuml;r nur als <b>varchar <\/b>angelegte Felder.<\/li>\n<\/ul>\n<p>Alles in allem ist die Verbindung Access-SQLite nicht ganz so trivial, wie die zu anderen DBMS. Die Tabellen einer SQLite-Datenbank einfach verkn&uuml;pfen und die Daten unter Access in Datenbl&auml;ttern und Formularen verwalten, reicht nicht aus. Der ODBC-Treiber ist nicht ganz konform mit der Access Database Engine. Um zus&auml;tzliche Programmierung und Workarounds kommen  Sie nicht herum, wenn Sie die Datenintegrit&auml;t sicherstellen wollen. Beispiel: Das L&ouml;schen eines Datensatzes, was in der Datenblattansicht schiefgeht, l&auml;sst sich problemlos mit folgender Code-Zeile bewerkstelligen:<\/p>\n<pre>CurrentDb.Execute \"DELETE FROM  tblTest WHERE ID=2\"<\/pre>\n<p><b>Programmierung<\/b><\/p>\n<p>Im Vorhergehenden hatten Sie die SQLite-Tabellen manuell mit Access verkn&uuml;pft. Das geht jedoch auch per Code, und zwar mit der Anweisung <b>DoCmd.TransferDatabase<\/b>. Dieser k&ouml;nnen Sie als Parameter den ODBC-Connection-String &uuml;bergeben, statt eine angelegte DSN zu verwenden. Alle Versuche dieser Art schlagen aber fehl. Access quittiert die Anweisung mit der Fehlermeldung <b>-7778<\/b>, &#8222;Es gibt keine Meldung f&uuml;r diesen Fehler&#8220;, obwohl der Treiber geladen wird. Sie k&ouml;nnen das im Modul <b>mdlSQLiteODBC<\/b>, Prozedur <b>LinkSQLiteTable <\/b>der Demo-Datenbank nachstellen.<\/p>\n<p>Die L&ouml;sung ist, zun&auml;chst eine manuelle Verkn&uuml;pfung anzulegen und sp&auml;ter beim Aktualisieren der Verkn&uuml;pfung &uuml;ber das <b>TableDef<\/b>-Objekt nur den <b>Connect<\/b>-String zu &auml;ndern:<\/p>\n<pre>sConx = \"ODBC;Driver={SQLite3 ODBC Driver}; Database=c:\\irgendwas\\test_sqlite.db;\"\r\nCurrentDb.TableDefs(\"tblTest2\").Connect = sConx\r\nCurrentDb.TableDefs.Refresh<\/pre>\n<p><b>ADO<\/b><\/p>\n<p>Aus der Sicht des Access-Programmierers sind die M&ouml;glichkeiten beschr&auml;nkt, wenn es um ODBC-Datenbanken unter DAO geht. Konnte man unter Access 2003 noch &uuml;ber das Connection-Objekt von DAO aus direkten Zugriff auf ODBC-Objekte erhalten, so wie das PassThrough-Abfragen erm&ouml;glichen, scheidet diese Methode seit Access 2007 aus.<\/p>\n<p>In der Access Database Engine wurde das <b>Connection<\/b>-Objekt gestrichen. Daher ist nun ADODB das Mittel der Wahl<\/p>\n<p>F&uuml;r eine Verbindung per ADODB ist ein entsprechender ADO-Provider n&ouml;tig. Es existieren zwar native SQLite-Provider, doch sind diese entweder nicht kompatibel mit SQLite 3 oder sie arbeiten wenig vertrauensw&uuml;rdig. Deshalb verwenden Sie besser den ODBC-Provider, der wiederum auf unseren ODBC-Treiber von C. Werner aufsetzt.<\/p>\n<p>Ein rudiment&auml;rer ConnectionString f&uuml;r ein ADO-Connection-Objekt sieht so aus:<\/p>\n<pre>\"Provider=MSDASQL.1;Driver={SQLite3 ODBC Driver};Version=3;Database= c:\\irgendwas\\test_sqlite.db;\"<\/pre>\n<p>Die Angaben sind der ADO-Provider f&uuml;r ODBC, der SQLite-ODBC-Treiber, die SQLite-Version und der Pfad zur SQLite-Datei. Nachdem die Verbindung &uuml;ber <b>Connection.Open <\/b>zustande kam, k&ouml;nnen Sie &uuml;ber <b>Connection.Execute <\/b>beliebige SQL-Anweisungen absetzen:<\/p>\n<pre>oConnection.Execute \"CREATE TABLE tblTest2 (...)\"\r\noConnection.Execute \"VACUUM;\"<\/pre>\n<p>&uuml;ber die erste Anweisung wird eine SQLite-Tabelle erzeugt. Mit der zweiten wird die SQLite-Datei komprimiert. Das ist &uuml;brigens exakt der gleiche Vorgang, den Sie von Access und dem &#8222;Komprimieren und Reparieren&#8220;-Befehl her kennen. Auch SQLite-Dateien k&ouml;nnen sich nach umfangreichen Datenoperationen aufbl&auml;hen.<\/p>\n<p><b>vbRichClient<\/b><\/p>\n<p>Der r&uuml;hrige Olaf Schmidt stellt mit seiner Bibliothek <b>vbRichClient5 <\/b>eine Freeware-L&ouml;sung  f&uuml;r den Umgang mit SQLite-Dateien zur Verf&uuml;gung. Die Bibliothek enth&auml;lt weitaus mehr als nur Datenbankobjekte. Wir verwenden sie jedoch nur daf&uuml;r. Es handelt sich um eine ActiveX-DLL, die registriert und in die Verweise der Access-Datenbank gelinkt werden muss, um Objekte wie <b>cConnection<\/b>, <b>cRecordset<\/b>, <b>cCommand <\/b>verwenden zu k&ouml;nnen, die allesamt &auml;hnlich angesprochen werden, wie die ADO-Pendants. Im gleichen Verzeichnis der DLL sollte sich zudem die neueste Version der <b>sqlite3.dll <\/b>befinden.<\/p>\n<p>Der Vorteil dieser L&ouml;sung ist, dass sich &uuml;ber die Methoden und Properties dieser Library vieles ansprechen und einstellen l&auml;sst, was &uuml;ber ADO nur &uuml;ber umst&auml;ndliche SQL-Anweisungen m&ouml;glich ist.<\/p>\n<p>Schauen Sie sich etwa die Liste der Funktionen des <b>CConnection<\/b>-Objekts im Objektkatalog von VBA an.<\/p>\n<p>Sie k&ouml;nnen da etwa die Grundeinstellungen einer neu erzeugten SQLite-Datenbank vorgeben, Transaktionen steuern, Datentypen umwandeln oder den zuletzt vergebenen Autowert ermitteln lassen.<\/p>\n<p>Sollten Sie in ihrer Systemumgebung nicht die M&ouml;glichkeit haben, ActiveX-Bibliotheken registrieren zu lassen, so bietet Olaf Schmidt mit seiner DirectCom-Schnittstelle eine L&ouml;sung an, um an die Bibliothek auch &uuml;ber eine Handvoll API-Deklarationen heranzukommen. Die Darstellung dieser L&ouml;sung kann im Rahmen dieses Beitrags leider nicht erfolgen.<\/p>\n<p><b>SQLite-Editoren<\/b><\/p>\n<p>Man kann &uuml;ber die Oberfl&auml;che von Access keine &auml;nderungen an SQLite-Datenbanken vornehmen. &uuml;ber SQL-Anweisungen und den Zugriff &uuml;ber ADO oder den <b>vbRichClient <\/b>geht es zwar, es ist jedoch alles andere als komfortabel.<\/p>\n<p>Deshalb sollten Sie sich einen der Freeware-Editoren zulegen, die &uuml;ber die Links  bis  zu finden sind. Viele dieser Editoren sind in ihrem Umfang mit den Verwaltungsoberfl&auml;chen anderer DBMS zu vergleichen.<\/p>\n<p>Mein Favorit ist derzeit der SQLite Expert  wegen seiner aufger&auml;umten Oberfl&auml;che und der M&ouml;glichkeit, mehrere Datenbanken parallel zu bearbeiten. Aber auch das Firefox Addon (!) SQLite Manager   macht eine gute Figur. Mit diesem k&ouml;nnen Sie zudem direkten Einblick in die Systemtabellen des Firefox erhalten.<\/p>\n<p>Im Download zum Beitrag befindet sich au&szlig;erdem ein einfacher SQLite-Editor, der von der Demo-Datenbank direkt aufgerufen wird, der <b>sqlite3explorer<\/b>. Es handelt sich bei ihm um lediglich eine Exe-Datei, die keine Installation erfordert.<\/p>\n<p><b>SQLite und Android<\/b><\/p>\n<p>Dass SQLite unter Android das Standarddatenbankformat ist, wurde bereits erw&auml;hnt. Insofern bekommt der Austausch von Daten zwischen Access und Android-Smartphones zus&auml;tzliche Bedeutung. Da es bisher keine wirklich gute App f&uuml;r die Anzeige von Access-Datenbanken gibt, ist der Weg &uuml;ber einen SQLite-Export ein geeignetes Mittel.<\/p>\n<p>Umgekehrt werden Sie &uuml;berrascht sein, wie viele SQLite-Datenbanken sich auf Ihrem Ger&auml;t befinden. Machen Sie etwa ein Komplett-Backup des Ger&auml;ts auf Ihren Rechner &uuml;ber Software wie das <b>Samsung-Kies <\/b>oder den <b>MyPhoneExplorer <\/b>und lassen Sie die Routine <b>FindSQLite<\/b>-Files aus der Demo-Datenbank dar&uuml;ber laufen, auf die wir noch zu sprechen kommen.<\/p>\n<p>Ob Bildverwaltungen, Music Player, GPS-Anwendungen: fast alle speichern ihre Daten in SQLite-Datenbanken.<\/p>\n<p>Um Inhalte von SQLite-Datenbanken auf Android-Ger&auml;ten anzuzeigen oder gar zu verwalten, bedienen Sie sich einer der Apps, die beispielhaft unter &#8211; aufgef&uuml;hrt sind. Mein Favorit hier ist der <b>aSQLiteManager Lite<\/b>, sowohl von der Bedienung her, wie von den Features.<\/p>\n<p><b>Die Beispieldatenbank<\/b><\/p>\n<p>Sie finden in der Demo-Datenbank <b>sqlite_demo.mdb <\/b>einige Module, die den Zugriff auf SQLite-Datenbanken verdeutlichen. An dieser Stelle k&ouml;nnen sie nur kurz umrissen werden. Vertiefen Sie sich bei Interesse in den Code.<\/p>\n<p>Im Modul <b>mdlSQLiteODBC <\/b>finden Sie eine Routine, die &uuml;ber ADO und ODBC unsere Tabelle <b>tblTest2 <\/b>korrekt erstellt (<b>TestCreateSQLiteODBC<\/b>). Au&szlig;erdem eine, die den richtigen <b>Connection<\/b>-String f&uuml;r die ODBC-Verbindung produziert (<b>ConnectionStringSQLite<\/b>). Und weiter eine Prozedur, die den Link zu einer SQLite-Datei aktualisiert, und eine, die den Aufbau der Datenbank &uuml;ber die ADO-Methode <b>OpenSchema <\/b>ausgibt (<b>TestSQLiteSchema<\/b>).<\/p>\n<p>Im Modul <b>mdlSQLiteRichClient <\/b>finden sich &auml;hnliche Prozeduren, nur dass diese &uuml;ber die Bibliothek <b>vbRichClient <\/b>abgewickelt werden.<\/p>\n<p>Eine bereits angesprochene L&ouml;sung enth&auml;lt das Modul <b>mdlTest<\/b>. Rufen Sie hier die Prozedur <b>FindSQLiteFiles <\/b>&uuml;ber das VBA-Direktfenster auf. Sie durchl&auml;uft alle Dateien im Verzeichnis der Wahl inklusive der Unterverzeichnisse und findet heraus, bei welchen davon es sich um SQLite-Datenbanken handelt.<\/p>\n<p>Vor allem im Benutzerprofilverzeichnis AppData werden Sie f&uuml;ndig werden. SQLite-Dateien sind sehr einfach zu identifizieren: Am Anfang der Datei steht bin&auml;r einfach der String &#8222;SQLite format 3&#8220;.<\/p>\n<p>Beim Durchlaufen der Dateien werden alle Fundstellen in der Tabelle <b>tblSampleFiles <\/b>abgespeichert, die am Schluss &uuml;ber das Formular <b>frmSampleFiles <\/b>zur Ansicht gelangen, wie in Bild 6.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2014_04\/06_frmSamplefiles.png\" alt=\"Demo-Datenbank: Formular mit der Liste aller gefundenen SQLite-Datenbanken unter AppData\" width=\"650\" height=\"425,3846\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 6: Demo-Datenbank: Formular mit der Liste aller gefundenen SQLite-Datenbanken unter AppData<\/span><\/b><\/p>\n<p>Der Clou am Formular: Doppelklicken Sie einfach auf einen Pfadeintrag, und schon &ouml;ffnet sich der SQLite3Explorer mit den Infos zur SQLite-Datei &#8211; s. Bild 7.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2014_04\/07_SQLiteExplorer.png\" alt=\"Aufruf des SQLite3Explorers durch Doppelklick auf Eintrag im Formular\" width=\"650\" height=\"467,9678\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 7: Aufruf des SQLite3Explorers durch Doppelklick auf Eintrag im Formular<\/span><\/b><\/p>\n<p>Die zweite Anwendung der Beispieldatenbank finden Sie &uuml;ber den Aufruf des Formulars <b>frmBookmarks<\/b>.<\/p>\n<p>Hier werden Sie zun&auml;chst mit einer leeren Oberfl&auml;che konfrontiert. Sollten Sie Firefox nicht installiert haben, dann k&ouml;nnen Sie das Formular nun wieder schlie&szlig;en, denn es geht in ihm darum, die Lesezeichen des Browsers zu ermitteln.<\/p>\n<p>Nach Klick auf den Button oben &ouml;ffnet sich erst ein zus&auml;tzliches Formular, das die im Benutzersystem gefundenen Firefox-Profile zur Auswahl anbietet (s. Bild 8).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2014_04\/08_FirefoxBookmarksDialog.png\" alt=\"Auswahl des Firefox-Profils vor dem Import im Formular frmFirefoxBookmarks\" width=\"500\" height=\"319,9301\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 8: Auswahl des Firefox-Profils vor dem Import im Formular frmFirefoxBookmarks<\/span><\/b><\/p>\n<p>Diese Profile ergeben sich aus der Verzeichnisstruktur unter <b>(AppData)\\Mozilla\\Firefox\\Profiles<\/b>. Der eigentliche Vorgang l&auml;uft dann nach Best&auml;tigen des Dialogs mit <b>OK <\/b>ab. Die SQLite-Datei <b>places.sqlite <\/b>im Profilverzeichnis wird ge&ouml;ffnet und die drei Tabellen <b>moz_bookmarks<\/b>, <b>moz_places <\/b>und <b>moz_favicons <\/b>zum Aufbau des Lesezeichenbaums herangezogen, um anschlie&szlig;end das Treeview des Formulars zu bef&uuml;llen. Dabei kommt die <b>vbRichClient<\/b>-Bibliothek im Modul <b>mdlFirefox <\/b>zum Einsatz. Selbst die Icons der Lesezeichen werden generiert, wobei dies ohne Umweg &uuml;ber das Dateisystem &uuml;ber unser viel genutztes Modul <b>mdlGDIPlus <\/b>und dessen Funktion <b>ArrayToPicture <\/b>geschieht. Sie k&ouml;nnen nach Abschluss den Root-Node des Treeviews ausklappen und auf einen Eintrag des Lesezeichenbaums klicken, um die Website im rechts daneben befindlichen Webbrowser-Control aufzurufen (s. Bild 9). <\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2014_04\/09_FirefoxBookmarks.png\" alt=\"Darstellung der Bookmarks im Treeview nach Import aus Firefox und Aufruf einer Website per Mausklick\" width=\"700\" height=\"473,2128\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 9: Darstellung der Bookmarks im Treeview nach Import aus Firefox und Aufruf einer Website per Mausklick<\/span><\/b><\/p>\n<p><b>Links<\/b><\/p>\n<p> SQLite Home: http:\/\/www.sqlite.org\/<\/p>\n<p> SQLite ODBC Treiber: http:\/\/www.ch-werner.de\/sqliteodbc\/<\/p>\n<p> Nativer Zugriff &uuml;ber vbRichClient 5:  http:\/\/vbrichclient.com\/#\/de\/Downloads.htm<\/p>\n<p>Editoren:<\/p>\n<p> Sqlite3Explorer: http:\/\/www.singular.gr\/sqlite\/<\/p>\n<p> SQLiteSpy: http:\/\/www.yunqa.de\/delphi\/doku.php\/products\/sqlitespy\/index<\/p>\n<p> SQLite2009 Pro Manager: Nicht mehr vom Autor verf&uuml;gbar > Googlen!<\/p>\n<p> SQLite Administrator: http:\/\/sqliteadmin.orbmu2k.de\/<\/p>\n<p> SQLite Database Browser: https:\/\/github.com\/sqlitebrowser\/sqlitebrowser\/releases<\/p>\n<p> SQLite Expert Personal Edition: http:\/\/www.sqliteexpert.com<\/p>\n<p> SQLite Manager, Firefox Addon: https:\/\/addons.mozilla.org\/en-US\/firefox\/addon\/sqlitemanager\/<\/p>\n<p>Android \/ Google Play Store: https:\/\/play.google.com\/store\/apps<\/p>\n<p> aSQLiteManager<\/p>\n<p> SQLiteMagic<\/p>\n<p> SQLiteViewer<\/p>\n<p> DB Browser<\/p>\n<pre>  <\/pre>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>sqlite_demo.mdb<\/p>\n<p>sqlite3.dll<\/p>\n<p>sqlite3Explorer.exe<\/p>\n<p>vbRichClient5.dll<\/p>\n<p>folder16.png<\/p>\n<p>nofavicon.png<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/{0B67530D-58B6-4BB5-A167-7909D536A04F}\/aiu_945.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ist Ihnen der Begriff SQLite schon einmal untergekommen Wenn nicht, so ist das nicht weiter verwunderlich, handelt es sich dabei doch um ein Datenbanksystem, das Sie als Access-Benutzer wahrscheinlich nicht brauchen und viele &Auml;hnlichkeiten mit Access aufweist. Wenn doch, so k&ouml;nnte das der Verbreitung von Android-Smartphones und -Tablets geschuldet sein, denn unter Android ist SQLite das Standarddatenbankformat mit Systemunterst&uuml;tzung &#8211; die allermeisten Apps verwenden es, wenn gr&ouml;&szlig;ere Datenmengen zu speichern sind. Grund genug, dieses Format einmal genauer unter die Lupe zu nehmen.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[662014,66042014,44000022],"tags":[],"class_list":["post-55000945","post","type-post","status-publish","format-standard","hentry","category-662014","category-66042014","category-SQL_Server_und_Co"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.4) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>SQLite und Access - Access im Unternehmen<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-im-unternehmen.de\/SQLite_und_Access\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"SQLite und Access\" \/>\n<meta property=\"og:description\" content=\"Ist Ihnen der Begriff SQLite schon einmal untergekommen Wenn nicht, so ist das nicht weiter verwunderlich, handelt es sich dabei doch um ein Datenbanksystem, das Sie als Access-Benutzer wahrscheinlich nicht brauchen und viele &Auml;hnlichkeiten mit Access aufweist. Wenn doch, so k&ouml;nnte das der Verbreitung von Android-Smartphones und -Tablets geschuldet sein, denn unter Android ist SQLite das Standarddatenbankformat mit Systemunterst&uuml;tzung - die allermeisten Apps verwenden es, wenn gr&ouml;&szlig;ere Datenmengen zu speichern sind. Grund genug, dieses Format einmal genauer unter die Lupe zu nehmen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/SQLite_und_Access\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-22T21:11:57+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg07.met.vgwort.de\/na\/a06064443fdd4f25b1d96f5d4f214a38\" \/>\n<meta name=\"author\" content=\"Andr\u00e9 Minhorst\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Andr\u00e9 Minhorst\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"21\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/SQLite_und_Access\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/SQLite_und_Access\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"SQLite und Access\",\"datePublished\":\"2020-05-22T21:11:57+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/SQLite_und_Access\\\/\"},\"wordCount\":4082,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/SQLite_und_Access\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/a06064443fdd4f25b1d96f5d4f214a38\",\"articleSection\":[\"2014\",\"4\\\/2014\",\"SQL Server und Co.\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/SQLite_und_Access\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/SQLite_und_Access\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/SQLite_und_Access\\\/\",\"name\":\"SQLite und Access - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/SQLite_und_Access\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/SQLite_und_Access\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/a06064443fdd4f25b1d96f5d4f214a38\",\"datePublished\":\"2020-05-22T21:11:57+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/SQLite_und_Access\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/SQLite_und_Access\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/SQLite_und_Access\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/a06064443fdd4f25b1d96f5d4f214a38\",\"contentUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/a06064443fdd4f25b1d96f5d4f214a38\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/SQLite_und_Access\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"SQLite und Access\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"name\":\"Access im Unternehmen\",\"description\":\"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access\",\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/access-im-unternehmen.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\",\"name\":\"Andr\u00e9 Minhorst Verlag\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"contentUrl\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"width\":370,\"height\":111,\"caption\":\"Andr\u00e9 Minhorst Verlag\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\",\"name\":\"Andr\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"caption\":\"Andr\u00e9 Minhorst\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"SQLite und Access - Access im Unternehmen","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/access-im-unternehmen.de\/SQLite_und_Access\/","og_locale":"de_DE","og_type":"article","og_title":"SQLite und Access","og_description":"Ist Ihnen der Begriff SQLite schon einmal untergekommen Wenn nicht, so ist das nicht weiter verwunderlich, handelt es sich dabei doch um ein Datenbanksystem, das Sie als Access-Benutzer wahrscheinlich nicht brauchen und viele &Auml;hnlichkeiten mit Access aufweist. Wenn doch, so k&ouml;nnte das der Verbreitung von Android-Smartphones und -Tablets geschuldet sein, denn unter Android ist SQLite das Standarddatenbankformat mit Systemunterst&uuml;tzung - die allermeisten Apps verwenden es, wenn gr&ouml;&szlig;ere Datenmengen zu speichern sind. Grund genug, dieses Format einmal genauer unter die Lupe zu nehmen.","og_url":"https:\/\/access-im-unternehmen.de\/SQLite_und_Access\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-22T21:11:57+00:00","og_image":[{"url":"http:\/\/vg07.met.vgwort.de\/na\/a06064443fdd4f25b1d96f5d4f214a38","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"21\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/SQLite_und_Access\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/SQLite_und_Access\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"SQLite und Access","datePublished":"2020-05-22T21:11:57+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/SQLite_und_Access\/"},"wordCount":4082,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/SQLite_und_Access\/#primaryimage"},"thumbnailUrl":"http:\/\/vg07.met.vgwort.de\/na\/a06064443fdd4f25b1d96f5d4f214a38","articleSection":["2014","4\/2014","SQL Server und Co."],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/SQLite_und_Access\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/SQLite_und_Access\/","url":"https:\/\/access-im-unternehmen.de\/SQLite_und_Access\/","name":"SQLite und Access - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/SQLite_und_Access\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/SQLite_und_Access\/#primaryimage"},"thumbnailUrl":"http:\/\/vg07.met.vgwort.de\/na\/a06064443fdd4f25b1d96f5d4f214a38","datePublished":"2020-05-22T21:11:57+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/SQLite_und_Access\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/SQLite_und_Access\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/SQLite_und_Access\/#primaryimage","url":"http:\/\/vg07.met.vgwort.de\/na\/a06064443fdd4f25b1d96f5d4f214a38","contentUrl":"http:\/\/vg07.met.vgwort.de\/na\/a06064443fdd4f25b1d96f5d4f214a38"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/SQLite_und_Access\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"SQLite und Access"}]},{"@type":"WebSite","@id":"https:\/\/access-im-unternehmen.de\/#website","url":"https:\/\/access-im-unternehmen.de\/","name":"Access im Unternehmen","description":"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access","publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/access-im-unternehmen.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/access-im-unternehmen.de\/#organization","name":"Andr\u00e9 Minhorst Verlag","url":"https:\/\/access-im-unternehmen.de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/","url":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","contentUrl":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","width":370,"height":111,"caption":"Andr\u00e9 Minhorst Verlag"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f","name":"Andr\u00e9 Minhorst","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","caption":"Andr\u00e9 Minhorst"}}]}},"_links":{"self":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000945","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/comments?post=55000945"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000945\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000945"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000945"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000945"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}