{"id":241,"date":"2017-05-31T14:25:52","date_gmt":"2017-05-31T19:25:52","guid":{"rendered":"http:\/\/delphienmovimiento.mx\/wp\/?p=241"},"modified":"2020-02-05T18:50:48","modified_gmt":"2020-02-05T18:50:48","slug":"acceso-a-base-de-datos-sqlite-desde-delphi-starter","status":"publish","type":"post","link":"https:\/\/www.delphienmovimiento.mx\/wp\/2017\/05\/31\/acceso-a-base-de-datos-sqlite-desde-delphi-starter\/","title":{"rendered":"Acceso a base de datos SQLite desde Delphi Starter"},"content":{"rendered":"<p style=\"text-align: left;\">\n<p style=\"text-align: left;\">Hola amigos,<\/p>\n<p style=\"text-align: justify;\">En \u00e9sta entrada vamos a realizar la conexi\u00f3n con una base de datos <em><strong>SQLite<\/strong><\/em> utilizando\u00a0<em><strong>Delphi Starter Edition, versi\u00f3n 10.2 Tokyo\u00a0<\/strong><\/em>y como ya se habr\u00e1n dado cuenta, \u00e9sta edici\u00f3n de <em><strong>Delphi<\/strong><\/em> no cuenta con los componentes necesarios para la conexi\u00f3n\u00a0a bases de datos, sin embargo, si tenemos\u00a0la posibilidad de instalar componentes de terceros para poder acceder a motores de base de datos y expandir las caracter\u00edsticas\u00a0de nuestra herramienta de desarrollo.<\/p>\n<p style=\"text-align: justify;\">Los\u00a0componentes que utilizaremos en\u00a0\u00e9ste tutorial son los componentes <em><strong>ZEOS<\/strong><\/em> que\u00a0nos permitiran dar continuidad a \u00e9sta serie aprovechando\u00a0las facilidades\u00a0que nos ofrece <em><strong>Delphi Starter Edition<\/strong><\/em>.<\/p>\n<p style=\"text-align: justify;\">Para realizar \u00e9sta entrada utilizaremos la aplicaci\u00f3n que desarrollamos en el art\u00edculo anterior <em><strong>\u00ab<a href=\"http:\/\/delphienmovimiento.mx\/wp\/2017\/04\/22\/consumir-un-servicio-web-con-delphi-10-2-starter-y-curl\/\" target=\"_blank\" rel=\"prev noopener noreferrer\" data-slimstat=\"5\">Consumir un servicio web con Delphi 10.2 Starter y cURL<\/a>\u00ab<\/strong><\/em> donde obtenemos informaci\u00f3n del tipo de cambio del d\u00eda del peso mexicano contra monedas de otros pa\u00edses.<\/p>\n<p style=\"text-align: justify;\">Una vez que obtenemos dicha informaci\u00f3n tendr\u00e9mos la capacidad de almacenarla para efectos de mantener un hist\u00f3rico de \u00abparidades\u00bb\u00a0y poder consultar el valor de una moneda en un\u00a0d\u00eda determinado.<\/p>\n<p style=\"text-align: justify;\">Para poder llevar a cabo \u00e9ste tutorial necesitamos descargar el componente de acceso base de datos ZEOS el cual pueden descargar del siguiente enlace:\u00a0<em><strong><a href=\"https:\/\/sourceforge.net\/projects\/zeoslib\/files\/Zeos%20Database%20Objects\/zeosdbo-7.2.1-rc\/\" target=\"_blank\" rel=\"noopener noreferrer\">ZeosLib versi\u00f3n 7.2.1 Release Candidate<\/a><\/strong><\/em><\/p>\n<p style=\"text-align: justify;\">El motor de base de datos que usar\u00e9mos ser\u00e1\u00a0<strong>SQLite<\/strong>\u00a0donde crearemos dos tablas y una vista para utilizarlas en nuestra aplicaci\u00f3n, dicha base de datos estar\u00e1 incluida\u00a0en los archivos de descarga al final de \u00e9ste tutorial, sin embargo, si\u00a0deseas crearla tu mismo se entregar\u00e1n los DDL para que las generes\u00a0con el\u00a0administrador <em><strong>SQLite<\/strong><\/em>\u00a0de tu preferencia, si no conoces alguno puedes descargar\u00a0<em><strong><a href=\"https:\/\/sqlitestudio.pl\/index.rvt\" target=\"_blank\" rel=\"noopener noreferrer\">SQLite Studio Database\u00a0Manager<\/a><\/strong><\/em>\u00a0que me parece un muy buen administrador.<\/p>\n<p style=\"text-align: justify;\">Comenzaremos por instalar los componentes <em><strong>ZEOS versi\u00f3n 7.2.1 rc<\/strong><\/em>, el paquete que se usar\u00e1 para <em><strong>Delphi Starter<\/strong><\/em> es\u00a0el contenido en el directorio\u00a0<em><strong>DelphiXE10<\/strong><\/em>.<\/p>\n<p style=\"text-align: justify;\">Carga\u00a0el proyecto\u00a0<em><strong>ZeosDbo.bpg<\/strong><\/em> en <em>Delphi<\/em> y compila todos los <strong>bpl&#8217;s<\/strong>\u00a0en el siguiente orden:<\/p>\n<blockquote>\n<p style=\"text-align: justify; padding-left: 60px;\"><em><strong>\u2022 ZCore.bpl<\/strong><\/em><br \/>\n<em><strong> \u2022 ZParseSql.bpl<\/strong><\/em><br \/>\n<em><strong> \u2022 ZPlain.bpl<\/strong><\/em><br \/>\n<em><strong> \u2022 ZDbc.bpl<\/strong><\/em><br \/>\n<em><strong> \u2022 ZComponent.bpl<\/strong><\/em><\/p>\n<\/blockquote>\n<p>Para que puedan compilar los BPL&#8217;s es necesario agregar los siguientes directorios a la ruta de las <strong><em>librerias\/bibliotecas<\/em><\/strong>\u00a0que se localiza en el menu <em><strong>Tools -&gt; Options -&gt; Delphi Options -&gt; Library -&gt; Library Path<\/strong><\/em>.<\/p>\n<blockquote>\n<p style=\"padding-left: 60px;\"><em><strong>C:\\Compartidos\\Starter\\ZEOSDBO-7.2.1-rc\\packages\\DelphiXE10;<\/strong><\/em><br \/>\n<em><strong>C:\\Compartidos\\Starter\\ZEOSDBO-7.2.1-rc\\src\\component;<\/strong><\/em><br \/>\n<em><strong>C:\\Compartidos\\Starter\\ZEOSDBO-7.2.1-rc\\src\\dbc;<\/strong><\/em><br \/>\n<em><strong>C:\\Compartidos\\Starter\\ZEOSDBO-7.2.1-rc\\src\\parsesql;<\/strong><\/em><br \/>\n<em><strong>C:\\Compartidos\\Starter\\ZEOSDBO-7.2.1-rc\\src\\plain;<\/strong><\/em><br \/>\n<em><strong>C:\\Compartidos\\Starter\\ZEOSDBO-7.2.1-rc\\src\\Core<\/strong><\/em><\/p>\n<\/blockquote>\n<p>Una vez que compilamos correctamente el proyecto <em><strong>ZeosDbo<\/strong><\/em>\u00a0aparecer\u00e1 el grupo <strong><em>Zeos Access<\/em><\/strong> en la paleta de herramientas como se muestra\u00a0en la siguiente imagen:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-254 size-full\" src=\"http:\/\/delphienmovimiento.mx\/wp\/wp-content\/uploads\/2017\/05\/Starter-05.png\" alt=\"\" width=\"303\" height=\"543\" \/><\/p>\n<p>El siguiente paso es\u00a0la creaci\u00f3n de la\u00a0base de datos <em><strong>SQLite<\/strong><\/em> que utilizaremos en \u00e9sta secci\u00f3n y como les coment\u00e9 pueden usar la base de datos que\u00a0est\u00e1 incluida en\u00a0las descargas al final de \u00e9ste tutorial o pueden crearla con el <em><strong>Lenguaje de Definici\u00f3n de Datos (DDL)<\/strong><\/em>\u00a0 desde cualquier\u00a0<em><strong>Administrador SQLite<\/strong><\/em>.<\/p>\n<pre class=\"prettyprint lang-sql\" data-start-line=\"1\" data-visibility=\"visible\" data-highlight=\"\" data-caption=\"\">--\n-- File generated with SQLiteStudio v3.1.1 on mar may 30 21:19:36 2017\n--\n-- Text encoding used: System\n--\nPRAGMA foreign_keys = off;\nBEGIN TRANSACTION;\n\n-- Table: TC_CATALOGO\nDROP TABLE IF EXISTS TC_CATALOGO;\n\nCREATE TABLE TC_CATALOGO (\n    ID          INTEGER      NOT NULL\n                             PRIMARY KEY AUTOINCREMENT,\n    CLAVE       STRING (20)  NOT NULL,\n    DESCRIPCION STRING (200) \n);\n\n\n-- Table: TC_HISTORICO\nDROP TABLE IF EXISTS TC_HISTORICO;\n\nCREATE TABLE TC_HISTORICO (\n    ID      INTEGER        NOT NULL,\n    FECHA   DATE           NOT NULL,\n    TIPCAMB DECIMAL (7, 4),\n    PRIMARY KEY (\n        ID,\n        FECHA\n    )\n);\n\n\n-- View: TC_LISTADO\nDROP VIEW IF EXISTS TC_LISTADO;\nCREATE VIEW TC_LISTADO AS\n    SELECT CAT.CLAVE,\n           HIST.FECHA,\n           HIST.TIPCAMB,\n           CAT.DESCRIPCION\n      FROM TC_HISTORICO HIST\n           INNER JOIN\n           TC_CATALOGO CAT ON CAT.ID = HIST.ID;\n\n\nCOMMIT TRANSACTION;\nPRAGMA foreign_keys = on;\n\n<\/pre>\n<p>Despues de crear las tablas vamos a\u00a0inicializar el cat\u00e1logo de\u00a0monedas para que se tenga la informaci\u00f3n necesaria para enlazar la informaci\u00f3n que vamos a recibir del <em><strong>Servicio Web de Banxico<\/strong><\/em>.<\/p>\n<pre class=\"prettyprint lang-sql\" data-start-line=\"1\" data-visibility=\"visible\" data-highlight=\"\" data-caption=\"\">INSERT INTO TC_CATALOGO (DESCRIPCION,CLAVE,ID)\nVALUES\t('Tipo de cambio pesos por d\u00f3lar E.U.A. Fecha de liquidaci\u00f3n.','DLL01',1),\n\t\t('Tipo de cambio Pesos por d\u00f3lar E.U.A. Fecha de determinaci\u00f3n (FIX)','DLL02',2),\n\t\t('Cotizaci\u00f3n de las divisas que conforman la canasta del DEG Respecto al peso mexicano Euro','EURO',3),\n\t\t('Cotizaci\u00f3n de la divisa Respecto al peso mexicano D\u00f3lar Canadiense','DLLCA',4),\n\t\t('Cotizaci\u00f3n de las divisas que conforman la canasta del DEG Respecto al peso mexicano Yen japon\u00e9s','YEN',5),\n\t\t('Cotizaci\u00f3n de las divisas que conforman la canasta del DEG Respecto al peso mexicano Libra esterlina.','LIBRA',6);\n<\/pre>\n<p>En \u00e9ste momento ya tenemos los componentes de acceso a base de datos y la base de datos listos, ahora comenzaremos a dar forma a nuestro proyecto.<\/p>\n<p>Abra el proyecto <em><strong>wsStarter.dproj<\/strong><\/em> que se creo en\u00a0el tutorial anterior (Si no lo has creado, puedes descargarlo siguiendo <em><strong><a href=\"http:\/\/delphienmovimiento.mx\/wp\/2017\/04\/22\/consumir-un-servicio-web-con-delphi-10-2-starter-y-curl\/\" target=\"_blank\" rel=\"noopener noreferrer\">\u00e9ste enlace<\/a><\/strong><\/em>).<\/p>\n<p>Agregue los siguientes componentes a la forma principal.<\/p>\n<blockquote>\n<p style=\"padding-left: 90px;\"><em><strong>\u2022 TButton<\/strong><\/em><br \/>\n<em><strong>\u2022 TDataSource;<\/strong><\/em><br \/>\n<em><strong>\u2022 TDateTimePicker<\/strong><\/em><br \/>\n<em><strong>\u2022 TDBGrid<\/strong><\/em><br \/>\n<em><strong>\u2022 TZConnection;<\/strong><\/em><br \/>\n<em><strong>\u2022 TZQuery;<\/strong><\/em><\/p>\n<\/blockquote>\n<p>Despu\u00e9s de organizar a tu gusto los componentes que se agregaron ya tendremos nuestra forma\u00a0similar a la siguiente imagen:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-268 size-full\" src=\"http:\/\/delphienmovimiento.mx\/wp\/wp-content\/uploads\/2017\/05\/Starter-06.png\" alt=\"\" width=\"862\" height=\"474\" \/><\/p>\n<p>Configuramos la conexi\u00f3n en el componente <em><strong>ZConnection1<\/strong><\/em> \u00a0asignando la <em>ruta de la base de datos y el protocolo<\/em>\u00a0del motor de la base de datos que vamos a usar, en \u00e9ste caso <em><strong>sqlite-3<\/strong><\/em>.<\/p>\n<p>\u00c9sta configuraci\u00f3n de la base de datos est\u00e1 en tiempo de dise\u00f1o pero lo recomendable es hacerlo en tiempo de ejecuci\u00f3n ya que la base de datos puede ser colocada en cualquier lugar\u00a0ya sea en la misma m\u00e1quina o en otra m\u00e1quina de la red. Para configurarla en tiempo de ejecuci\u00f3n pueden hacer lo siguiente:<\/p>\n<pre class=\"prettyprint lang-pascal\" data-start-line=\"1\" data-visibility=\"visible\" data-highlight=\"\" data-caption=\"\">procedure TForm1.FormCreate(Sender: TObject);\nbegin\n  ZConnection1.Database := ExtractFilePath(Application.ExeName) + 'base\\TipoCambio.sqlite3';\nend;\n<\/pre>\n<p><em>(Tambi\u00e9n puede ser a trav\u00e9s de la lectura de un archivo INI, XML o el mismo registro de windows, como mejor les parezca.)<\/em><\/p>\n<p>Ahora vamos a decidir que vamos a hacer con la informaci\u00f3n que se reciba del <em>Servicio Web de Banxico<\/em>. Yo he decidido mostrar la informaci\u00f3n seleccionando la\u00a0fecha deseada en el componente <em><strong>TDateTimePicker1<\/strong><\/em> y mostrar los tipos de cambio de ese d\u00eda (si ya se ha descargado), para ello utilizaremos la vista que previamente se creo en la base de datos llamada <em><strong>TC_LISTADO<\/strong><\/em> ejecutandola desde\u00a0el componente <em><strong>ZQuery1<\/strong><\/em> el cual ya debe estar enlazado al\u00a0<em><strong>DataSource<\/strong><\/em> y a su vez el <em><strong>DataSource<\/strong><\/em>\u00a0enlazado al <em><strong>DBGrid<\/strong><\/em>.<\/p>\n<p>La consulta es muy simple y \u00a0es la siguiente:<\/p>\n<pre class=\"prettyprint lang-sql\" data-start-line=\"1\" data-visibility=\"visible\" data-highlight=\"\" data-caption=\"\">select * from TC_LISTADO list\nwhere list.FECHA = :fecha\n<\/pre>\n<p>Ya estamos listos para modifcar el proyecto y acceder a una base de datos. Comenzamos agregando las siguientes unidades a la secci\u00f3n USES de nuestra\u00a0unidad <em><strong>uXMLclass.pas<\/strong><\/em>.<\/p>\n<blockquote>\n<p style=\"padding-left: 90px;\"><em><strong>\u2022 ZDataset,<\/strong><\/em><br \/>\n<em><strong> \u2022 ZAbstractConnection;<\/strong><\/em><\/p>\n<\/blockquote>\n<p>Posteriormente agregamos una variable y una propiedad a la clase <em><strong>TRequestResponse<\/strong><\/em>\u00a0para\u00a0la conexi\u00f3n con la base de datos.<\/p>\n<blockquote>\n<p style=\"padding-left: 90px;\"><em><strong>\u2022 ZQryTC: TZQuery;<\/strong><\/em><\/p>\n<p style=\"padding-left: 90px;\"><em><strong>\u2022 Fconexion: TZAbstractConnection;<\/strong><\/em><\/p>\n<p style=\"padding-left: 90px;\"><em><strong>\u2022 property conexion: TZAbstractConnection read Fconexion write Fconexion;<\/strong><\/em><\/p>\n<\/blockquote>\n<p>Finalmente har\u00e9mos una\u00a0modificaci\u00f3n al procedimiento <em><strong>TRequestResponse.BuscaTC()<\/strong><\/em> para\u00a0leer el <strong><em>XML de Respuesta<\/em><\/strong> obteniendo <em><strong>la Moneda, la Fecha y el Tipo de Cambio<\/strong><\/em>\u00a0y agregando \u00e9sta informaci\u00f3n a nuestra tabla de hist\u00f3ricos para consultas posteriores.<\/p>\n<pre class=\"prettyprint lang-pascal\" data-start-line=\"1\" data-visibility=\"visible\" data-highlight=\"\" data-caption=\"\">function TRequestResponse.buscaTC(xml: IXMLDocument): TStrings;\nvar\n  I: integer;\n  nodoData: IXMLNode;\n  Linea: string;\n  valor: variant;\n  moneda: integer;\nbegin\n  Result := TStringList.Create;\n  Result.Text := '';\n  nodoData := xml.ChildNodes[1].ChildNodes[1];\n  if nodoData &lt;&gt; nil then\n  begin\n    ZQryTC := TZQuery.Create(nil);\n    ZQryTC.Connection := Fconexion;\n    ZQryTC.SQL.Text := 'INSERT INTO TC_HISTORICO(ID, FECHA, TIPCAMB) ' + #13 +\n                       'VALUES(:id, :periodo, :tc) ';\n    for I := 0 to nodoData.ChildNodes.Count-1 do\n    begin\n      if nodoData.ChildNodes[I].NodeName = 'bm:Series' then\n      begin\n         if pos('FIX',nodoData.ChildNodes[I].Attributes['TITULO']) &gt; 0 then\n            ZQryTC.ParamByName('ID').Value := 2\n         else\n         if pos('Euro',nodoData.ChildNodes[I].Attributes['TITULO']) &gt; 0 then\n            ZQryTC.ParamByName('ID').Value := 3\n         else\n         if pos('Canadiense',nodoData.ChildNodes[I].Attributes['TITULO']) &gt; 0 then\n            ZQryTC.ParamByName('ID').Value := 4\n         else\n         if pos('Yen',nodoData.ChildNodes[I].Attributes['TITULO']) &gt; 0 then\n            ZQryTC.ParamByName('ID').Value := 5\n         else\n         if pos('Libra',nodoData.ChildNodes[I].Attributes['TITULO']) &gt; 0 then\n            ZQryTC.ParamByName('ID').Value := 6\n         else\n            ZQryTC.ParamByName('ID').Value := 1;\n\n         moneda := ZQryTC.ParamByName('ID').Value;\n\n         ZQryTC.ParamByName('PERIODO').AsString :=\n                 nodoData.ChildNodes[I].ChildNodes[0].Attributes['TIME_PERIOD'];\n\n         valor := NULL;\n         if nodoData.ChildNodes[I].ChildNodes[0].Attributes['OBS_VALUE'] &lt;&gt; '' then\n            ZQryTC.ParamByName('TC').AsString :=\n                 nodoData.ChildNodes[I].ChildNodes[0].Attributes['OBS_VALUE']\n         else\n            ZQryTC.ParamByName('TC').Value := valor;\n\n         ZQryTC.ExecSQL;\n\n         Result.Add(Moneda.ToString + #9 +\n                    nodoData.ChildNodes[I].ChildNodes[0].Attributes['TIME_PERIOD'] + #9 +\n                    nodoData.ChildNodes[I].ChildNodes[0].Attributes['OBS_VALUE'] );\n\n      end;\n    end;\n    ZQryTC.Free;\n  end;\nend;\n<\/pre>\n<p>Con el c\u00f3digo anterior recorremos los nodos de XLM para obtener\u00a0la informaci\u00f3n\u00a0que necesitamos, la\u00a0insertamos en la base de datos y finalmente regresamos un informe de lo descargado a la forma principal como se puede observar en las siguientes imagenes:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-283\" src=\"http:\/\/delphienmovimiento.mx\/wp\/wp-content\/uploads\/2017\/05\/Starter-09.png\" alt=\"\" width=\"472\" height=\"615\" \/><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-282 size-full\" src=\"http:\/\/delphienmovimiento.mx\/wp\/wp-content\/uploads\/2017\/05\/Starter-08.png\" alt=\"\" width=\"788\" height=\"433\" \/><\/p>\n<p>Pareciera que la informaci\u00f3n mostrada careciera de sentido, sin embargo, la parte final de \u00e9ste tutorial es mostrar un listado de los tipos de cambio de una fecha dada utilizando la vista que creamos anteriormente la cual es disparada por la siguiente consulta.<\/p>\n<pre class=\"prettyprint lang-sql\" data-start-line=\"1\" data-visibility=\"visible\" data-highlight=\"\" data-caption=\"\">select * from TC_LISTADO\nwhere FECHA = :fecha<\/pre>\n<p>Para ejecutar la consulta utilizamos el evento OnClick del \u00a0bot\u00f3n <em><strong>[Listado]<\/strong><\/em>\u00a0y escribimos el siguiente c\u00f3digo:<\/p>\n<pre class=\"prettyprint lang-pascal\" data-start-line=\"1\" data-visibility=\"visible\" data-highlight=\"\" data-caption=\"\">procedure TForm1.Button3Click(Sender: TObject);\nbegin\n  ZQuery1.Close;\n  ZQuery1.ParamByName('FECHA').Value := DateTimePicker1.Date;\n  ZQuery1.Open;\nend;\n<\/pre>\n<p>Ya tenemos listo todo y solo presionamos el bot\u00f3n <em><strong>[Listado]<\/strong><\/em>\u00a0para que la informaci\u00f3n sea presentada en el Grid de nuestra forma como se observa en la siguiente imagen.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-284\" src=\"http:\/\/delphienmovimiento.mx\/wp\/wp-content\/uploads\/2017\/05\/Starter-10.png\" alt=\"\" width=\"788\" height=\"433\" \/><\/p>\n<p>Como pueden ver, acceder a una base de datos con <em><strong>Delphi Starter<\/strong><\/em>\u00a0no tiene mayor complicaci\u00f3n y las posibilidades que se nos presentan son muchas, solo recuerden, de acuerdo a la licencia de \u00e9sta edici\u00f3n de Delphi Starter se nos indica\u00a0que si logran obtener una ganancia igual o\u00a0mayor a 1,000 d\u00f3lares deben de adquirir una versi\u00f3n de pago, los invito a que hagan el esfuerzo, les aseguro que no se arrepentiran.<\/p>\n<p>Y bueno hemos llegado al final de \u00e9ste tutorial, espero que sea de su agrado y sobre todo que sea de utilidad.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-38 alignleft\" src=\"http:\/\/delphienmovimiento.mx\/wp\/wp-content\/uploads\/2017\/03\/gone.png\" alt=\"\" width=\"137\" height=\"240\" \/><\/p>\n<p>Hasta la pr\u00f3xima<\/p>\n<hr \/>\n<blockquote>\n<p style=\"text-align: justify;\">Todo el c\u00f3digo escrito aqu\u00ed es de libre descarga y utilizaci\u00f3n\u00a0solo te pido, si te parece correcto, que menciones su origen y claro cualquier mejora que le hagas publicala que se agradecer\u00e1 enormemente.<\/p>\n<p style=\"text-align: justify;\">Muchas gracias.<\/p>\n<\/blockquote>\n\n\n","protected":false},"excerpt":{"rendered":"<p>Hola amigos, En \u00e9sta entrada vamos a realizar la conexi\u00f3n con una base de datos SQLite utilizando\u00a0Delphi Starter Edition, versi\u00f3n 10.2 Tokyo\u00a0y como ya se habr\u00e1n dado cuenta, \u00e9sta edici\u00f3n de Delphi no cuenta con los componentes necesarios para la conexi\u00f3n\u00a0a bases de datos, sin embargo, si tenemos\u00a0la posibilidad de instalar componentes de terceros para [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":2341,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[177,178],"tags":[183,61,67,190,191],"class_list":["post-241","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dslaserie","category-tutos","tag-delphi-10-2-tokio","tag-delphiaccess","tag-embarcadero","tag-sqlite","tag-starter"],"wppr_data":{"cwp_meta_box_check":"No"},"_links":{"self":[{"href":"https:\/\/www.delphienmovimiento.mx\/wp\/wp-json\/wp\/v2\/posts\/241","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.delphienmovimiento.mx\/wp\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.delphienmovimiento.mx\/wp\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.delphienmovimiento.mx\/wp\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.delphienmovimiento.mx\/wp\/wp-json\/wp\/v2\/comments?post=241"}],"version-history":[{"count":2,"href":"https:\/\/www.delphienmovimiento.mx\/wp\/wp-json\/wp\/v2\/posts\/241\/revisions"}],"predecessor-version":[{"id":2343,"href":"https:\/\/www.delphienmovimiento.mx\/wp\/wp-json\/wp\/v2\/posts\/241\/revisions\/2343"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.delphienmovimiento.mx\/wp\/wp-json\/wp\/v2\/media\/2341"}],"wp:attachment":[{"href":"https:\/\/www.delphienmovimiento.mx\/wp\/wp-json\/wp\/v2\/media?parent=241"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.delphienmovimiento.mx\/wp\/wp-json\/wp\/v2\/categories?post=241"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.delphienmovimiento.mx\/wp\/wp-json\/wp\/v2\/tags?post=241"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}