{"id":55001409,"date":"2023-02-01T00:00:00","date_gmt":"2023-06-17T09:32:08","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=1409"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Access_und_Notion_synchronisieren","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Access_und_Notion_synchronisieren\/","title":{"rendered":"Access und Notion synchronisieren"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg08.met.vgwort.de\/na\/1171bf44f9634b5ab8186332361c3241\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_01\/pic_1409_001.png\" alt=\"Tabelle in Notion\" width=\"599,559\" height=\"351,7299\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Tabelle in Notion<\/span><\/b><\/p>\n<p><b>In weiteren Beitr&auml;gen haben wir uns angesehen, wie wir Daten aus Notion abfragen und neu anlegen k&ouml;nnen. Spannend wird es, wenn wir diese Techniken nutzen, um Daten aus anderen Anwendungen mit Notion zu synchronisieren. Im vorliegenden Beitrag wollen wir uns daher zuerst einmal ansehen, wie wir die Daten aus einer Access-Tabelle in eine Notion-Tabelle &uuml;bertragen k&ouml;nnen. Dabei wollen wir die ID, unter welcher die Tabelle in Notion angelegt wurde, auslesen und in der Access-Tabelle speichern, damit wir wissen, welche Datens&auml;tze bereits nach Notion &uuml;bertragen wurden. Gleichzeitig k&ouml;nnen wir &Auml;nderungen an diesen Datens&auml;tzen in der Access-Datenbank dann in die Notion-Tabelle &uuml;bertragen.<\/b><\/p>\n<p>Als Beispiel verwenden wir die Tabelle <b>Artikeldatenbank<\/b>, die wir wie in Bild 1 angelegt haben. Wie Sie diese Tabelle anlegen, erfahren Sie im Beitrag <b>Produktivit&auml;t mit Notion steigern <\/b>(<b>www.access-im-unternehmen.de\/1402<\/b>). Hier finden Sie auch wichtige Informationen, auf denen der vorliegende Beitrag aufbaut.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_01\/pic_1409_001.png\" alt=\"Tabelle in Notion\" width=\"599,559\" height=\"351,7299\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Tabelle in Notion<\/span><\/b><\/p>\n<h2>Datenquelle in der Access-Datenbank<\/h2>\n<p>In der Access-Datenbank legen wir zwei Tabellen an. Die erste Tabelle hat den Namen <b>tblArtikel<\/b> und enth&auml;lt die Felder aus Bild 2. Das Prim&auml;rschl&uuml;sselfeld <b>ArtikelID<\/b> dient der eindeutigen Identifizierung der Datens&auml;tze in der Access-Tabelle.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_01\/pic_1409_002.png\" alt=\"Tabelle mit Artikeldaten in Access\" width=\"474,5589\" height=\"375,4927\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Tabelle mit Artikeldaten in Access<\/span><\/b><\/p>\n<p>Die Felder <b>Artikelname <\/b>und <b>Veroeffentlichungsdatum <\/b>sollen so in die Notion-Datenbank &uuml;bernommen werden. Das Feld <b>StatusID <\/b>ist ein Nachschlagefeld zur Auswahl von Datens&auml;tzen aus einer weiteren Tabelle namens <b>tblStatus<\/b>. <\/p>\n<p>Diese stellt die Daten aus Bild 3 zur Auswahl im Nachschlagefeld bereit.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_01\/pic_1409_003.png\" alt=\"Tabelle mit den verschiedenen Status-Werten\" width=\"424,5589\" height=\"294,7715\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Tabelle mit den verschiedenen Status-Werten<\/span><\/b><\/p>\n<p>Damit wir direkt auf die Daten der Felder <b>Artikelname<\/b>, <b>Veroeffentlichungsdatum <\/b>und <b>Status <\/b>der beiden Tabellen zugreifen k&ouml;nnen, erstellen wir noch eine Abfrage namens <b>qryArtikelMitStatus<\/b>. Diese enth&auml;lt die beiden Tabellen <b>tblArtikel <\/b>und <b>tblStatus <\/b>als Datenquelle und zeigt die Felder <b>ArtikelID<\/b>, <b>Artikelname<\/b>, <b>Veroeffentlichungsdatum<\/b>, <b>Status <\/b>und <b>NotionID <\/b>an (siehe Bild 4).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_01\/pic_1409_005.png\" alt=\"Abfrage mit den Feldern aus den Tabellen tblArtikel und tblStatus\" width=\"649,559\" height=\"399,3655\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Abfrage mit den Feldern aus den Tabellen tblArtikel und tblStatus<\/span><\/b><\/p>\n<p>Die Daten dieser Abfrage, die wir in der nachfolgend beschriebenen Prozedur nach Notion exportieren wollen, sehen in der Datenblattansicht der Abfrage wie in Bild 5 aus.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_01\/pic_1409_004.png\" alt=\"Ergebnis der Abfrage mit den Feldern aus den Tabellen tblArtikel und tblStatus\" width=\"700\" height=\"167,6168\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Ergebnis der Abfrage mit den Feldern aus den Tabellen tblArtikel und tblStatus<\/span><\/b><\/p>\n<h2>Prozedur zum &Uuml;bertragen der Daten nach Notion<\/h2>\n<p>Damit steigen wir gleich in die Prozedur ein, welche die Daten aus den Tabellen unserer Access-Datenbank in die Notion-Datenbank exportieren soll.<\/p>\n<p>Zur Erinnerung nochmal die Strukturierung in Notion, wo ein Benutzer &uuml;blicherweise einen eigenen Workspace verwendet, der eine oder mehrere Datenbanken enth&auml;lt. Eine Datenbank ist dabei aber eher mit einer Access-Tabelle gleichzusetzen &#8211; sie enth&auml;lt verschiedene Eigenschaften, sogenannte Properties, mit denen die enthaltenen Elemente beschrieben werden. Diese nennen wir Pages. Eine Page in einer Notion-Datenbank entspricht also in etwa einem Datensatz in einer Access-Tabelle.<\/p>\n<p>Bevor wir uns die Prozedur im Detail ansehen, wollen wir noch kurz skizzieren, was darin passieren soll: Wir wollen dort zun&auml;chst alle Datens&auml;tze der Access-Abfrage <b>qryArtikelMitStatus <\/b>ermitteln, die im Feld <b>NotionID <\/b>den Wert <b>NULL <\/b>enthalten. Der Sinn dahinter ist, dass wir nach dem Hinzuf&uuml;gen der Daten eines Datensatzes der Access-Tabelle in die Notion-Datenbank die ID des in Notion angelegten <b>Page<\/b>-Elements ermitteln und diese f&uuml;r den zugrundeliegenden Datensatz der Tabelle <b>tblArtikel <\/b>in das Feld <b>NotionID <\/b>einf&uuml;gen wollen. So k&ouml;nnen wir sp&auml;ter immer erkennen, ob dieser Datensatz bereits nach Notion exportiert wurde. Und wenn wir die Daten gegebenenfalls einmal in der Access-Datenbank aktualisieren, k&ouml;nnen wir diese aktualisierten Datens&auml;tze in einer weiteren Prozedur im entsprechenden Datensatz der Notion-Datenbank aktualisieren.<\/p>\n<h2>Die Prozedur ArtikelInNotionAnlegen<\/h2>\n<p>Diese Prozedur beginnt in Listing 1. Hier deklarieren wir zun&auml;chst die ben&ouml;tigten Variablen, zum Beispiel eine namens <b>db <\/b>zum Speichern eines Verweises auf das aktuelle <b>Database<\/b>-Objekt und eine namens <b>rst <\/b>f&uuml;r das Recordset, in dem wir die zu &uuml;bertragenden Datens&auml;tze durchlaufen wollen. Au&szlig;erdem ben&ouml;tigen wir ein Dictionary, in das wir die Antwort der Notion-API einlesen k&ouml;nnen, um das Ergebnis auszuwerten. Au&szlig;erdem ben&ouml;tigen wir diverse <b>String<\/b>-Variablen.<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>ArtikelInNotionAnlegen()\r\n     <span style=\"color:blue;\">Dim <\/span>db<span style=\"color:blue;\"> As <\/span>DAO.Database\r\n     <span style=\"color:blue;\">Dim <\/span>rst<span style=\"color:blue;\"> As <\/span>DAO.Recordset\r\n     <span style=\"color:blue;\">Dim <\/span>objJSON<span style=\"color:blue;\"> As <\/span>Dictionary\r\n     <span style=\"color:blue;\">Dim <\/span>strResponse<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strDatabaseID<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strBody<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strPageID<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     <span style=\"color:blue;\">Set<\/span> rst = db.OpenRecordset(\"SELECT * FROM qryArtikelMitStatus WHERE NotionID IS NULL\", dbOpenDynaset)\r\n     strDatabaseID = DLookup(\"DatabaseID\", \"tblDatabases\", \"DatabaseTitle = ''Artikeldatenbank''\")\r\n     <span style=\"color:blue;\">Do While<\/span> <span style=\"color:blue;\">Not<\/span> rst.EOF\r\n         strBody = \"{\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n         strBody = strBody & \"  \"\"object\"\": \"\"page\"\",\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n         strBody = strBody & \"  \"\"parent\"\": {\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n         strBody = strBody & \"    \"\"type\"\": \"\"database_id\"\",\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n         strBody = strBody & \"    \"\"database_id\"\": \"\"\" & strDatabaseID & \"\"\"\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n         strBody = strBody & \"  },\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n         strBody = strBody & \"  \"\"properties\"\": {\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n         strBody = strBody & \"    \"\"Artikelname\"\": {\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n         strBody = strBody & \"      \"\"title\"\": [\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n         strBody = strBody & \"        {\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n         strBody = strBody & \"          \"\"type\"\": \"\"text\"\",\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n         strBody = strBody & \"          \"\"text\"\": { \"\"content\"\": \"\"\" & rst!Artikelname & \"\"\" }\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n         strBody = strBody & \"        }\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n         strBody = strBody & \"      ]\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n         strBody = strBody & \"    },\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n         strBody = strBody & \"    \"\"Status\"\": {\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n         strBody = strBody & \"      \"\"id\"\": \"\"adPI\"\",\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n         strBody = strBody & \"      \"\"type\"\": \"\"select\"\",\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n         strBody = strBody & \"      \"\"select\"\": {\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n         strBody = strBody & \"        \"\"name\"\": \"\"\" & rst!status & \"\"\"\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n         strBody = strBody & \"        }\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n         ...<\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 1: Artikel nach Notion &uuml;bertragen, Teil 1<\/span><\/b><\/p>\n<p>[<\/p>\n<p>Nach dem Initialisieren der Variablen <b>db <\/b>mit einem Verweis auf das aktuelle <b>Database<\/b>-Objekt referenzieren wir mit der Variablen <b>rst <\/b>alle Datens&auml;tze der Abfrage <b>qryArtikelMitStatus<\/b>, bei denen das Feld <b>NotionID <\/b>noch den Wert <b>Null <\/b>enth&auml;lt. Das zeigt uns, dass die entsprechenden Datens&auml;tze noch nicht nach Notion exportiert wurden.<\/p>\n<p>Nachdem wir die ID der Notion-Datenbank, der wir die Artikeldatens&auml;tze hinzuf&uuml;gen wollen, aus der Tabelle <b>tblDatabases<\/b> ermittelt haben, kann es losgehen &#8211; wie wir diese ermitteln, lesen Sie im Beitrag <b>Mit Access auf Notion zugreifen <\/b>(<b>www.access-im-unternehmen.de\/1401<\/b>). Also beginnen wir mit dem Durchlaufen der Datens&auml;tze des Recordsets.<\/p>\n<p>Innerhalb der dazu definierten <b>Do While<\/b>-Schleife stellen wir ein JSON-Dokument zusammen, das alle Informationen &uuml;ber das anzulegende <b>Page<\/b>-Element enth&auml;lt und das wir anschlie&szlig;end als Parameter der <b>GetJSON<\/b>-Funktion an die Notion-API &uuml;bergeben (siehe Listing 2). Die <b>GetJSON<\/b>-Funktion beschreiben wir im Beitrag <b>JSON-Daten auslesen <\/b>(<b>www.access-im-unternehmen.de\/1403<\/b>).<\/p>\n<pre>...\r\n         <span style=\"color:blue;\">If <\/span>IsNull(rst!Veroeffentlichungsdatum)<span style=\"color:blue;\"> Then<\/span>\r\n             strBody = strBody & \"      }\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n         <span style=\"color:blue;\">Else<\/span>\r\n             strBody = strBody & \"      },\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n             strBody = strBody & \"    \"\"Ver&ouml;ffentlichungsdatum\"\": {\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n             strBody = strBody & \"      \"\"id\"\": \"\"Eqsc\"\",\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n             strBody = strBody & \"      \"\"type\"\": \"\"date\"\",\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n             strBody = strBody & \"      \"\"date\"\": {\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n             strBody = strBody & \"        \"\"start\"\": \"\"\" & Format(rst!Veroeffentlichungsdatum, \"yyyy-mm-dd\") & \"\"\",\" _\r\n                 & <span style=\"color:blue;\">vbCrLf<\/span>\r\n             strBody = strBody & \"        \"\"end\"\": null,\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n             strBody = strBody & \"        \"\"time_zone\"\": null\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n             strBody = strBody & \"      }\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n             strBody = strBody & \"    }\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n         <span style=\"color:blue;\">End If<\/span>\r\n         strBody = strBody & \"  }\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n         strBody = strBody & \"}\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n         Inzwischenablage strBody\r\n         <span style=\"color:blue;\">If <\/span>GetJSON(cStrCreatePage, \"POST\", strResponse, strBody) = <span style=\"color:blue;\">True<\/span><span style=\"color:blue;\"> Then<\/span>\r\n             <span style=\"color:blue;\">Set<\/span> objJSON = ParseJson(strResponse)\r\n             strPageID = objJSON.Item(\"id\")\r\n             rst.Edit\r\n             rst!NotionID = strPageID\r\n             rst.Update\r\n         <span style=\"color:blue;\">Else<\/span>\r\n             <span style=\"color:blue;\">Debug.Print<\/span> strResponse\r\n         <span style=\"color:blue;\">End If<\/span>\r\n         rst.Move<span style=\"color:blue;\">Next<\/span>\r\n     <span style=\"color:blue;\">Loop<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 2: Artikel nach Notion &uuml;bertragen, Teil 2<\/span><\/b><\/p>\n<p>Sie verwendet diesmal die in der Konstanten <b>cStrCreatePage <\/b>enthaltene URL f&uuml;r den Aufruf:<\/p>\n<pre>Const cStrCreatePage<span style=\"color:blue;\"> As String<\/span> = \"https:\/\/api.notion.com\/v1\/pages\"<\/pre>\n<p>Der beispielhafte Code f&uuml;r einen JSON-Datensatz, den wir hier zusammenstellen, ist in Listing 3 zu finden.<\/p>\n<pre>{\r\n   \"object\": \"page\",\r\n   \"parent\": {\r\n     \"type\": \"database_id\",\r\n     \"database_id\": \"d303bedf-ca40-42ad-8474-86f41e1b5bc6\"\r\n   },\r\n   \"properties\": {\r\n     \"Artikelname\": {\r\n       \"title\": [\r\n         {\r\n           \"type\": \"text\",\r\n           \"text\": { \"content\": \"Pr&uuml;fen, ob Datenbank ge&ouml;ffnet ist\" }\r\n         }\r\n       ]\r\n     },\r\n     \"Status\": {\r\n       \"id\": \"adPI\",\r\n       \"type\": \"select\",\r\n       \"select\": {\r\n         \"name\": \"Ver&ouml;ffentlicht\"\r\n         }\r\n       },\r\n     \"Ver&ouml;ffentlichungsdatum\": {\r\n       \"id\": \"Eqsc\",\r\n       \"type\": \"date\",\r\n       \"date\": {\r\n         \"start\": \"2022-09-01\",\r\n         \"end\": null,\r\n         \"time_zone\": null\r\n       }\r\n     }\r\n   }\r\n}<\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 3: JSON-Code, den wir zum Anlegen eines Datensatzes an Notion schicken<\/span><\/b><\/p>\n<p>Nachdem wir diesen zusammengestellt und per <b>GetJSON<\/b>-Aufruf an Notion gesendet haben, ermitteln wir noch die ID der neuen Page.<\/p>\n<p>Dazu lesen wir das in der Variablen <b>strResponse <\/b>gespeicherte Ergebnis der Anfrage per API in die <b>Dictionary<\/b>-Variable <b>objJSON <\/b>ein. Dazu nutzen wir die Funktion <b>ParseJson<\/b>, die wir ebenfalls im oben genannten Beitrag beschreiben.<\/p>\n<p>Die als JSON-Dokument gelieferte Antwort sieht stark gek&uuml;rzt wie folgt aus:<\/p>\n<pre>{\r\n   \"object\": \"page\",\r\n   \"id\": \"cc2f3bdd-3322-4713-9d7b-d573431f1ab6\",\r\n   ...\r\n}<\/pre>\n<p>Hier lesen wir den Wert des Feldes <b>id <\/b>aus und speichern das Ergebnis in der Variablen <b>strPageID<\/b>. Die so gewonnene Notion-ID des Datensatzes schreiben wir anschlie&szlig;end in das Feld <b>NotionID <\/b>des entsprechenden Datensatzes der Access-Tabelle <b>tblArtikel<\/b>.<\/p>\n<p>Auf die gleiche Art durchlaufen wir alle Elemente der zu &uuml;bertragenden Datens&auml;tze und legen so den Inhalt der Access-Tabelle in der Notion-Datenbank an. Das Ergebnis sieht schlie&szlig;lich wie in Bild 6 aus.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_01\/pic_1409_006.png\" alt=\"Die neuen Artikel in der Notion-Datenbank\" width=\"649,559\" height=\"430,5788\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 6: Die neuen Artikel in der Notion-Datenbank<\/span><\/b><\/p>\n<h2>JSON-Code zum Anlegen von Elementen ermitteln<\/h2>\n<p>Hier stellt sich die entscheidende Frage: Wie komme ich &uuml;berhaupt an die Struktur des JSON-Codes, der f&uuml;r das Anlegen eines Elements ben&ouml;tigt wird? Dazu fragen wir die Elemente der Notion-Datenbank beziehungsweise, wie wir unter Access sagen w&uuml;rden, Tabelle ab.<\/p>\n<p>Die dazu notwendige Prozedur hei&szlig;t <b>PagesAbfragen <\/b>und sie schreibt schlicht den JSON-Inhalt der Seiten der mit dem Parameter &uuml;bergebenen Datenbank in die Zwischenablage (siehe Listing 4 ). Der Aufruf lautet f&uuml;r die in diesem Beitrag verwendete Beispieldatenbank wie folgt:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>PagesAbfragen(strDatabaseTitle<span style=\"color:blue;\"> As String<\/span>)\r\n     <span style=\"color:blue;\">Dim <\/span>strResponse<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strDatabaseID<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>db<span style=\"color:blue;\"> As <\/span>DAO.Database\r\n     <span style=\"color:blue;\">Dim <\/span>strQuerydatabase<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     strDatabaseID = DLookup(\"DatabaseID\", \"tblDatabases\", \"DatabaseTitle = ''\" & strDatabaseTitle & \"''\")\r\n     strQuerydatabase = <span style=\"color:blue;\">Replace<\/span>(cStrQueryDatabase, \"{database_id}\", strDatabaseID)\r\n     <span style=\"color:blue;\">If <\/span>GetJSON(strQuerydatabase, \"POST\", strResponse) = <span style=\"color:blue;\">True<\/span><span style=\"color:blue;\"> Then<\/span>\r\n         Inzwischenablage strResponse\r\n     <span style=\"color:blue;\">Else<\/span>\r\n         <span style=\"color:blue;\">Debug.Print<\/span> strResponse\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 4: Prozedur, welche den Inhalt einer Datenbank beziehungsweise Tabelle abfragt und als JSON-Code in die Zwischenablage schreibt.<\/span><\/b><\/p>\n<pre>PagesAbfragen \"Artikeldatenbank\"<\/pre>\n<p>Die Prozedur verwendet die API-Funktion <b>https:\/\/api.notion.com\/v1\/databases\/{database_id}\/query<\/b>, f&uuml;r die wir <b>{database_id} <\/b>durch die aus der Tabelle <b>tblDatabases <\/b>ermittelte ID ersetzen. Diese <b>ID <\/b>holt die Prozedur zuvor per <b>DLookup <\/b>f&uuml;r den als Parameter angegebenen Datenbanknamen.<\/p>\n<p>Die URL ist in der Konstanten <b>cStrQueryDatabase <\/b>gespeichert:<\/p>\n<pre>Const cStrQueryDatabase<span style=\"color:blue;\"> As String<\/span> = \"https:\/\/api.notion.com\/v1\/databases\/{database_id}\/query\"<\/pre>\n<p>Der folgende Aufruf der Prozedur <b>GetJSON <\/b>spricht die API von Notion an und liefert die Elemente der angegebenen Datenbank-ID mit dem Parameter <b>strResponse <\/b>zur&uuml;ck.<\/p>\n<p>Das Ergebnis k&ouml;nnen wir aus der Zwischenablage in einen Editor kopieren, der JSON-Dokumente korrekt formatiert. In Visual Studio sieht das beispielsweise wie in Bild 7 aus. Hier sehen wir eine Liste von Elementen unterhalb des Elements <b>results<\/b>. W&auml;hrend dieses Element alle Attribute des in der Datenbank gespeicherten Datensatzes enth&auml;lt, brauchen wir diese zum Anlegen eines neuen Elements nicht vollst&auml;ndig anzugeben. So &uuml;bergeben wir beispielsweise nicht die <b>id <\/b>des neuen Elements, da diese von Notion vergeben wird. Wie oben beschreiben, lesen wir diese allerdings anschlie&szlig;end aus. Wie Sie den JSON-Code zum Anlegen eines neuen Elements zusammenstellen, h&auml;ngt also davon ab, welche Informationen Sie &uuml;bergeben wollen. Wir haben nur so wenige Informationen wie n&ouml;tig &uuml;bergeben. Wichtig ist noch, dass zum Beispiel f&uuml;r den Status genau einer der bereits vorhandenen Statuswerte &uuml;bergeben wird.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_01\/pic_1409_007.png\" alt=\"Inhalt einer Datenbank im JSON-Format\" width=\"549,559\" height=\"502,1675\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 7: Inhalt einer Datenbank im JSON-Format<\/span><\/b><\/p>\n<h2>Aktualisieren vorhandener Eintr&auml;ge<\/h2>\n<p>Wenn wir davon ausgehen, dass die Daten immer nur von einer Richtung in die andere aktualisiert werden sollen, also in diesem Fall von der Access-Datenbank nach Notion, dann k&ouml;nnen wir f&uuml;r solche Datens&auml;tze, die bereits &uuml;bertragen wurden und mit der entsprechenden Notion-ID gekennzeichnet sind, eine &auml;hnliche Prozedur erstellen. Diese w&uuml;rde alle Eintr&auml;ge durchlaufen, die einen Wert im Feld <b>NotionID <\/b>enthalten. Alternativ k&ouml;nnte man in der bereits vorhandenen Prozedur <b>ArtikelInNotionAnlegen <\/b>eine Pr&uuml;fung einbauen, die abh&auml;ngig davon, ob das Feld <b>NotionID <\/b>einen Wert enth&auml;lt, entweder einen neuen Datensatz in Notion anlegt oder den vorhandenen anpasst.<\/p>\n<p>Da aber der komplette Ablauf anders ist und auch eine andere API-Funktion aufgerufen werden muss, behandeln wir das Aktualisieren in einer eigenen Prozedur namens <b>ArtikelInNotionAktualisieren<\/b> (siehe Listing 5).<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>ArtikelInNotionAktualisieren()\r\n     <span style=\"color:blue;\">Dim <\/span>db<span style=\"color:blue;\"> As <\/span>DAO.Database\r\n     <span style=\"color:blue;\">Dim <\/span>rst<span style=\"color:blue;\"> As <\/span>DAO.Recordset\r\n     <span style=\"color:blue;\">Dim <\/span>objJSON<span style=\"color:blue;\"> As <\/span>Dictionary\r\n     <span style=\"color:blue;\">Dim <\/span>strResponse<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strDatabaseID<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strBody<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strUpdatePage<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     <span style=\"color:blue;\">Set<\/span> rst = db.OpenRecordset(\"SELECT * FROM qryArtikelMitStatus WHERE NOT NotionID IS NULL\", dbOpenDynaset)\r\n     strDatabaseID = DLookup(\"DatabaseID\", \"tblDatabases\", \"DatabaseTitle = ''Artikeldatenbank''\")\r\n     <span style=\"color:blue;\">Do While<\/span> <span style=\"color:blue;\">Not<\/span> rst.EOF\r\n         strBody = \"{\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n         strBody = strBody & \"  \"\"properties\"\": {\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n         strBody = strBody & \"    \"\"Artikelname\"\": {\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n         strBody = strBody & \"      \"\"title\"\": [\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n         strBody = strBody & \"        {\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n         strBody = strBody & \"          \"\"type\"\": \"\"text\"\",\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n         strBody = strBody & \"          \"\"text\"\": { \"\"content\"\": \"\"\" & rst!Artikelname & \"\"\" }\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n         strBody = strBody & \"        }\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n         strBody = strBody & \"      ]\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n         strBody = strBody & \"    },\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n         ...\r\n         strUpdatePage = <span style=\"color:blue;\">Replace<\/span>(cStrUpdatePage, \"{page_id}\", rst!NotionID)\r\n         <span style=\"color:blue;\">If <\/span>GetJSON(strUpdatePage, \"PATCH\", strResponse, strBody) = <span style=\"color:blue;\">True<\/span><span style=\"color:blue;\"> Then<\/span>\r\n             <span style=\"color:blue;\">MsgBox<\/span> \"Artikel ''\" & rst!Artikelname & \"'' erfolgreich aktualisiert.\"\r\n         <span style=\"color:blue;\">Else<\/span>\r\n             <span style=\"color:blue;\">MsgBox<\/span> \"Artikel ''\" & rst!Artikelname & \"'' konnte nicht aktualisiert werden.\"\r\n         <span style=\"color:blue;\">End If<\/span>\r\n         rst.Move<span style=\"color:blue;\">Next<\/span>\r\n     <span style=\"color:blue;\">Loop<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 5: Prozedur, welche Eigenschaften aller schon in Notion gespeicherten Datens&auml;tze aktualisiert<\/span><\/b><\/p>\n<p>Diese ist grunds&auml;tzlich wie die zuvor beschriebene Prozedur <b>ArtikelInNotionAnlegen <\/b>aufgebaut. Allerdings durchlaufen wir hier alle Datens&auml;tze der Abfrage <b>qryArtikelMitStatus<\/b>, deren Feld <b>NotionID <\/b>bereits gef&uuml;llt ist. Dabei stellen wir eine &auml;hnliche JSON-Datei wie beim Anlegen zusammen, jedoch ben&ouml;tigen wir nicht mehr die Angabe der &uuml;bergeordneten Datenbank &#8211; wir identifizieren den zu &auml;ndernden Datensatz allein &uuml;ber seine Notion-ID.<\/p>\n<p>Das hei&szlig;t, die JSON-Datei enth&auml;lt lediglich die zu &auml;ndernden Properties. Da wir nicht pr&uuml;fen, ob sich &uuml;berhaupt ein Feld des aktuellen Datensatzes ge&auml;ndert hat und wenn ja, welches, &uuml;bergeben wir einfach alle Properties erneut.<\/p>\n<p>Als API-Befehl verwenden wir diesmal den in der folgenden Konstanten gespeicherten:<\/p>\n<pre>Const cStrUpdatePage<span style=\"color:blue;\"> As String<\/span> = \"https:\/\/api.notion.com\/ v1\/pages\/{page_id}\"<\/pre>\n<p>Hier ersetzen wir <b>{page_id} <\/b>durch den Wert aus dem Feld <b>NotionID<\/b> des Datensatzes der Tabelle. Dann rufen wir die Funktion <b>GetJSON <\/b>mit der resultierenden URL auf und verwenden diesmal nicht den Parameter <b>POST<\/b>, sondern <b>PATCH<\/b>.<\/p>\n<p>Im Gegensatz zur Prozedur zum Eintragen neuer Datens&auml;tze brauchen wir hier nicht die Notion-ID der bearbeiteten Elemente abzufragen, daher geben wir einfach per <b>MsgBox <\/b>das jeweilige Ergebnis aus &#8211; das allerdings auch nur noch zu Debugging-Zwecken.<\/p>\n<h2>Herausfinden, wie der JSON-Ausdruck aussehen muss<\/h2>\n<p>Die Herausforderung ist, herauszufinden, wie der zu &uuml;bergebene JSON-Ausdruck aussehen muss. Dazu nutzen wir die oben vorgestellte Prozedur <b>PagesAbfragen<\/b>, mit der wir die bereits in der Notion-Datenbank enthaltenen Eintr&auml;ge abfragen.<\/p>\n<p>Hier sucht man sich eines der zu untersuchenden Elemente aus und verwendet dann nur den Teil von der geschweiften Klammer und dem Element <b>Properties <\/b>an, also:<\/p>\n<pre>{\r\n     Properties {\r\n         ...\r\n     }\r\n}<\/pre>\n<p>Und in dem Bereich, wo sich die P&uuml;nktchen befinden, tragen wir die zu &auml;ndernden Eigenschaften samt den gew&uuml;nschten Werten ein.<\/p>\n<p>Das machen wir in der Prozedur <b>ArtikelInNotionAktualisieren <\/b>f&uuml;r die Properties <b>Artikelname<\/b>, <b>Status <\/b>und <b>Ver&ouml;ffentlichungsdatum<\/b>.<\/p>\n<p>Wenn es um das Neuanlegen eines kompletten Elements geht, &uuml;bernimmt man einfach den JSON-Ausdruck f&uuml;r ein solches komplettes Element und stellt den Inhalt so zusammen, dass dieser entsprechend aus der Datenbank gef&uuml;llt wird.<\/p>\n<h2>Zusammenfassung und Ausblick<\/h2>\n<p>Notion ist ein prima Tool zum Verwalten von Aufgaben, Projekten, Terminen et cetera, vor allem, wenn man diese nicht nur auf dem Desktop oder Notebook, sondern auch noch auf dem Smartphone oder dem Tablet verwenden will.<\/p>\n<p>Mit diesem Beitrag erhalten Sie &#8211; neben den weiteren zu diesem Thema ver&ouml;ffentlichten Themen in <b>Access im Unternehmen<\/b> &#8211; das Werkzeug, um eine Notion-Datenbank aus den Daten einer Access-Tabelle zu f&uuml;llen, diese zu aktualisieren und auch zum Auslesen von Notion-Daten aus der Notion-Datenbank zum Zwecke der &Uuml;bertragung in eine Access-Tabelle.<\/p>\n<h2>Downloads zu diesem Beitrag<\/h2>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>AccessUndNotionSynchronisieren.accdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/B7397637-7765-4BED-8E2D-79B070342A2F\/aiu_1409.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In weiteren Beitr&auml;gen haben wir uns angesehen, wie wir Daten aus Notion abfragen und neu anlegen k&ouml;nnen. Spannend wird es, wenn wir diese Techniken nutzen, um Daten aus anderen Anwendungen mit Notion zu synchronisieren. Im vorliegenden Beitrag wollen wir uns daher zuerst einmal ansehen, wie wir die Daten aus einer Access-Tabelle in eine Notion-Tabelle &uuml;bertragen k&ouml;nnen. Dabei wollen wir die ID, unter welcher die Tabelle in Notion angelegt wurde, auslesen und in der Access-Tabelle speichern, damit wir wissen, welche Datens&auml;tze bereits nach Notion &uuml;bertragen wurden. Gleichzeitig k&ouml;nnen wir &Auml;nderungen an diesen Datens&auml;tzen in der Access-Datenbank dann in die Notion-Tabelle &uuml;bertragen.<\/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":[66012023,662023,44000026],"tags":[],"class_list":["post-55001409","post","type-post","status-publish","format-standard","hentry","category-66012023","category-662023","category-Interaktiv"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Access und Notion synchronisieren - 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\/Access_und_Notion_synchronisieren\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Access und Notion synchronisieren\" \/>\n<meta property=\"og:description\" content=\"In weiteren Beitr&auml;gen haben wir uns angesehen, wie wir Daten aus Notion abfragen und neu anlegen k&ouml;nnen. Spannend wird es, wenn wir diese Techniken nutzen, um Daten aus anderen Anwendungen mit Notion zu synchronisieren. Im vorliegenden Beitrag wollen wir uns daher zuerst einmal ansehen, wie wir die Daten aus einer Access-Tabelle in eine Notion-Tabelle &uuml;bertragen k&ouml;nnen. Dabei wollen wir die ID, unter welcher die Tabelle in Notion angelegt wurde, auslesen und in der Access-Tabelle speichern, damit wir wissen, welche Datens&auml;tze bereits nach Notion &uuml;bertragen wurden. Gleichzeitig k&ouml;nnen wir &Auml;nderungen an diesen Datens&auml;tzen in der Access-Datenbank dann in die Notion-Tabelle &uuml;bertragen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Access_und_Notion_synchronisieren\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2023-06-17T09:32:08+00:00\" \/>\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=\"13\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Access_und_Notion_synchronisieren\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Access_und_Notion_synchronisieren\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Access und Notion synchronisieren\",\"datePublished\":\"2023-06-17T09:32:08+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Access_und_Notion_synchronisieren\\\/\"},\"wordCount\":1999,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Access_und_Notion_synchronisieren\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg08.met.vgwort.de\\\/na\\\/1171bf44f9634b5ab8186332361c3241\",\"articleSection\":[\"1\\\/2023\",\"2023\",\"Interaktiv\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Access_und_Notion_synchronisieren\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Access_und_Notion_synchronisieren\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Access_und_Notion_synchronisieren\\\/\",\"name\":\"Access und Notion synchronisieren - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Access_und_Notion_synchronisieren\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Access_und_Notion_synchronisieren\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg08.met.vgwort.de\\\/na\\\/1171bf44f9634b5ab8186332361c3241\",\"datePublished\":\"2023-06-17T09:32:08+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Access_und_Notion_synchronisieren\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Access_und_Notion_synchronisieren\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Access_und_Notion_synchronisieren\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg08.met.vgwort.de\\\/na\\\/1171bf44f9634b5ab8186332361c3241\",\"contentUrl\":\"http:\\\/\\\/vg08.met.vgwort.de\\\/na\\\/1171bf44f9634b5ab8186332361c3241\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Access_und_Notion_synchronisieren\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Access und Notion synchronisieren\"}]},{\"@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":"Access und Notion synchronisieren - 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\/Access_und_Notion_synchronisieren\/","og_locale":"de_DE","og_type":"article","og_title":"Access und Notion synchronisieren","og_description":"In weiteren Beitr&auml;gen haben wir uns angesehen, wie wir Daten aus Notion abfragen und neu anlegen k&ouml;nnen. Spannend wird es, wenn wir diese Techniken nutzen, um Daten aus anderen Anwendungen mit Notion zu synchronisieren. Im vorliegenden Beitrag wollen wir uns daher zuerst einmal ansehen, wie wir die Daten aus einer Access-Tabelle in eine Notion-Tabelle &uuml;bertragen k&ouml;nnen. Dabei wollen wir die ID, unter welcher die Tabelle in Notion angelegt wurde, auslesen und in der Access-Tabelle speichern, damit wir wissen, welche Datens&auml;tze bereits nach Notion &uuml;bertragen wurden. Gleichzeitig k&ouml;nnen wir &Auml;nderungen an diesen Datens&auml;tzen in der Access-Datenbank dann in die Notion-Tabelle &uuml;bertragen.","og_url":"https:\/\/access-im-unternehmen.de\/Access_und_Notion_synchronisieren\/","og_site_name":"Access im Unternehmen","article_published_time":"2023-06-17T09:32:08+00:00","author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"13\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Access_und_Notion_synchronisieren\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Access_und_Notion_synchronisieren\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Access und Notion synchronisieren","datePublished":"2023-06-17T09:32:08+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Access_und_Notion_synchronisieren\/"},"wordCount":1999,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Access_und_Notion_synchronisieren\/#primaryimage"},"thumbnailUrl":"http:\/\/vg08.met.vgwort.de\/na\/1171bf44f9634b5ab8186332361c3241","articleSection":["1\/2023","2023","Interaktiv"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Access_und_Notion_synchronisieren\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Access_und_Notion_synchronisieren\/","url":"https:\/\/access-im-unternehmen.de\/Access_und_Notion_synchronisieren\/","name":"Access und Notion synchronisieren - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Access_und_Notion_synchronisieren\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Access_und_Notion_synchronisieren\/#primaryimage"},"thumbnailUrl":"http:\/\/vg08.met.vgwort.de\/na\/1171bf44f9634b5ab8186332361c3241","datePublished":"2023-06-17T09:32:08+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Access_und_Notion_synchronisieren\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Access_und_Notion_synchronisieren\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Access_und_Notion_synchronisieren\/#primaryimage","url":"http:\/\/vg08.met.vgwort.de\/na\/1171bf44f9634b5ab8186332361c3241","contentUrl":"http:\/\/vg08.met.vgwort.de\/na\/1171bf44f9634b5ab8186332361c3241"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Access_und_Notion_synchronisieren\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Access und Notion synchronisieren"}]},{"@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\/55001409","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=55001409"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001409\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55001409"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55001409"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55001409"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}