[Lazarus-es] Error al compilar ZEOSDBO-6.6.6-stable
Maxi
maximiliano.duarte en gmail.com
Lun Mayo 6 21:20:31 CEST 2013
Ismael no puede vavegar por internet. reposteo el contenido
Instalando los componentes
Esta es una parte complicada por lo que debes tener un poco de paciencia y
leer este apartado cuidadosamente.
- Comprueba que tienes al menos la versión 1.0.4 de Lazarus (diciembre
2012) y al menos la versión 7.0.3 estable de ZeosLib.
- Comenzar una instancia de Lazarus.
1. Pulsar en *Paquete/Abrir archivo de paquete (.lpk)* desde el menú
principal.
2. Ve a *.\ZEOSDBO-7.0.3-stable\packages\lazarus* y abre *zcomponent.lpk*
3. Presiona *[Compilar]* solamente si no necesitas instalar los
componentes en el IDE.
4. Presiona *[Usar >>]* para ver las opciones que ofrece.
5. Selecciona *Agregar al Proyecto* si no quieres añadirlo al IDE o bien
*Instalar* para que se añada a la solapa del IDE de Lazaus
6. Pregunta si necesitas recompilar Lazarus, en concreto con el mensaje
emergente *El paquete "zcomponent 7.0" se marcó para instalar.
Actualmente lazarus solo soporta paquetes enlazados estáticamente. La
instalación completa necesita reconstruir y reiniciar lazarus ¿Desea
reconstruir ahora Lazarus?*
- Responde *[Si]* esta vez.
- Espera a que la compilación termine, la ventana emergente de mensajes
nos va mostrando la evolución del proceso, Lazarus debería reiniciarse
después de esto.
- Si todo está bien se debería ver la solapa *[Zeos Access]* en la
paleta de componentes.
[image: Zeos Components.png]<http://wiki.freepascal.org/File:Zeos_Components.png>
Si se presenta el error "Cannot find unit ZClasses" o algo similar,
entonces hay que chequear cuidadósamente como están escritos los nombres de
fichero (en cuanto a mayúsculas/minúsculas) en sus ficheros de código
fuente.
- Incluso si cuadran exactamente, el paquete autogenerado del fichero
fuente puede dar lugar a un tipificado incorrecto (mayúsculas/minúsculas)
en la claúsula "uses" (Lazarus 0.9.18), i.e.:
Si lo anterior falla, tal como se explica en el foro de ZeosLib es
conveniente ir compilando cada uno de los paquetes siguiendo el siguiente
orden:
- 1º. zcore.lpk
- 2º. zparsesql.lpk
- 3º. zplain.lpk
- 4º. zdbc.lpk
- 5º. zcomponent.lpk
Si el resultado de la compilación individual de todos es correcto, entonces
ya estaríamos en condiciones de escoger el paquete Zcomponent y con la
opción de *Usar >>>* y a continuación *Instalar* tenerlo en nuestro IDE
como una solapa más de componentes visuales.
{ Este fichero ha sido generado automáticamente por Lazarus. ¡No se
debe editar!
Esta fuente solo se utiliza para compilar e instalar el paquete.
}
unit Zcore;
interface
uses
Zclasses, Zcollections, Zcompatibility, Zexprparser, Zexprtoken,
Zexpression,
Zfunctions, Zmatchpattern, Zmessages, Zsysutils, Ztokenizer, Zvariables,
Zvariant;
implementation
end.
- Fíjate que Lazarus ha renombrado la unit ZClasses como Zclasses, dando
lugar a un conflicto de nombres. Presumiblemente este es un error en
Lazarus, no de los paquetes Zeos. Un camino a seguir para solucionarlo es
renombrar todos los ficheros fuente de Zeos a minúsculas. Accede a cada
subdirectorio bajo src/ y ejecuta este mandato en una ventana de bash
(shell) de windows:
rename -v 'y/A-Z/a-z/' *
- Entonces, en Lazarus, reabre el paquete (.lpk) y corrige el nombre de
fichero (mayúsculas/minúsculas) seleccionando en "More..."/"Fix Files Case"
- El paquete debería poderse compilar entonces.
Comentarios
En el momento actual Zeos CVS para Lazarus tiene paquetes rotos. Algunos
comentarios de IgD:
Utilizando una instalación limpia de Lazarus 0.9.12 (última versión
estable) fuí capaz de instalar ZeosLib (13 Octubre 2005). Primero corrige
los siguientes errores en ZeosLib:
- 1. Cambia ZplainPostgreSql81.pas a ZPlainPostgresSql8x.pas en
zplain.lpk
<Item22>
<Filename Value="../../src/plain/ZPlainPostgreSql81.pas"/>
<UnitName Value="ZPlainPostgreSql8x"/>
</Item22>
- 2. Fix the following typos in zdbc.lpk:
a. Remove extra "/" from "build/" (remove the one that is inside the quotes)
<SearchPaths>
<OtherUnitFiles Value="../../src/dbc/"/>
<UnitOutputDirectory Value="build/"/>
</SearchPaths>
b. Add missing quote to unitname value
<Item43>
<Filename Value="../../src/dbc/ZDbcASA.pas"/>
<UnitName Value="ZDbcASA/>
</Item43>
Ahora, aquí están las instrucciones de instalación:
Antes de la versión 0.9.13 de Lazarus era necesario abrir cada uno de los
paquetes de Zeos a través de Paquetes/Abrir Paquete en el siguiente orden:
1. zcore.lpk
2. zparsesql.lpk
3. zplain.lpk
4. zdbc.lpk
Entonces finalmente abre zcomponent.lpk para compilarlo e instalarlo. En
Lazarus 0.9.13 > solamente puede abrir zcomponent.lpk. El IDE abrirá el
resto automáticamente.
Nota: los cuatro primeros paquetes solamente necesitan ser compilados y no
pueden ser instalados.
--Forest<http://wiki.freepascal.org/index.php?title=User:Forest&action=edit&redlink=1>
17:41,
2 Nov 2005 (CET)
- 3. Si compilas e instalas Lazarus con éxito, pero después de
compilarse, comienza con:
[image: Zeoserror.gif] <http://wiki.freepascal.org/File:Zeoserror.gif>
Entonces se puede hacer:
Dentro del fichero Zeos.Inc reemplazar, en la sección "// Settings for
Debug mode": {$R-} a {$R+}
--Junior <http://wiki.freepascal.org/User:Junior> 19:48, 15 Apr 2006 (GMT)
Si aún así después de mostrar un error no recuperable que permita arrancar
Lazarus, nos queda la alternativa de buscar el fichero ejecutable tal como
estaba antes de compilar todo y que figura como lazarus.old.exe
Hacer la primera aplicación Zeos
- Sitúa un componente *ZConnection* en el formulario.
- Establecer las propiedades de User, Password, Host, Port y Protocol
(y cualquier otro parámetro que se necesite).
- Establecer la propiedad "Set Connected" con el valor True.
- Sitúa un componente *ZQuery* en el formulario (cuidado con confundirlo
con ZReadOnlyQuery).
- Establecer la propiedad "Connection" al valor de ZConnection activo.
- Establecer la propiedad Sql a algo similar a *SELECT * FROM
MyTable* (selecciona
todo el contenido de la tabla especificada de la base de datos
que se haya
abierto previamente, es una sentencia SQL).
- Establecer la propiedad "ACTIVE" al valor True.
- Sitúa un componente *DataSource* de la solapa *[Data Access]*.
- Establecer la propiedad "DataSet" con valor igual a la ZQuery
activa.
- Sitúa un componente *DBGrid* de la solapa *[Data Controls]*.
- Establece el parámetro Datasource con el valor DataSource.
- Si todo está bien se deberían ver los registros rellenos con datos
en la tabla.
Más información sobre como trabajar con Zeos
En los siguientes enlaces se pueden encontrar artículos realmente útiles
explicando el uso de Zeos y su uso interno, alguno de los cuales además
tratan además sobre materias específicas de Delphi pero que pueden ser
utilizadas con Lazarus también.
- Tutorial en español de
Zeos+Lazarus+Sqlite:<http://lazaruszeos.blogspot.com/2010/07/uso-de-componentes-zeos-en-lzarus-y.html>
- ZeosLib DBOs 6.1.5 - con Delphi 7 y Firebird
1.5<http://zeos.firmos.at/kb.php?mode=article&k=12>
- Descripción de la arquitectura de los objetos de
ZeosDB<http://zeos.firmos.at/kb.php?mode=article&k=8>
- Una introducción a la API de
ZDBC<http://zeos.firmos.at/kb.php?mode=article&k=7>
- También chequea la sección
Downloads<http://zeos.firmos.at/downloads.php> para
encontrar ejemplos reales que pueden ser fácilmente portados a Lazarus.
*Por favor completar esto :)*
Posibles fallos e incidencias
- He notado que en algunas ocasiones cuando se construye Lazarus no es
capaz de encontrar algunos ficheros de Zeos, como un método rápido puedes
probar esto:
- Use *Components/Package Graph* from the main menu.
- Abre el paquete *ZComponent*.
- Right Click on the *Files* item in the list.
- Selecciona *[Recompile all required]*.
- Cuando pregunte "Re-Compile this and all required packages?"
responder *[Yes]*.
- Recompila Lazarus normalmente (con paquetes).
- Hay un error en FPC's <http://wiki.freepascal.org/Glossary#Freepascal>
AnsiStrComp<http://lazarus-ccr.sourceforge.net/docs/rtl/sysutils/ansistrcomp.html>
que
causa comparación no fiable PChar, esto es obvio cuando se utiliza DBGrid
para editar datos, *AnsiStrComp('abc', 'abcd')* no puede detectarlo ya
que son diferentes pero detecta*AnsiStrComp('abd', 'abcd')* ignorando
múltiples caracteres de la segunda cadena. Este error fue encontrado por
Jesusrmx <http://wiki.freepascal.org/User:Jesusrmx>. Este error
probablemente será subsanado pronto, ver Bug
Report<http://www.freepascal.org/bugs/showrec.php3?ID=4325>
.
- [Ya arreglado en trunk 1013] Tratando de compilar la revisión 903 de
ZeosDBO trunk (20110806) sobre GNU/Linux amd64 x86_64 da errores en el
archivo ZClasses.pas como los siguientes:
- Error: No matching Implementation for interface method
"IUnknown.QueryInterface (constref TGuid, out <Formal type>) LongInt;
Cdecl;"
- El problema se debe a cambios en FPC relacionados con la
compatibilidad entre plataformas (
http://wiki.freepascal.org/User_Changes_2.6.0#IInterface.QueryInterface.2C_._AddRef_and_._Release_definitions_have_been_changed
)
- y la solución es editar el archivo ZClasses.pas como en el
siguiente parche:
- function QueryInterface({$IFDEF
FPC_HAS_CONSTREF}constref{$ELSE}const{$ENDIF} IID: TGUID; out Obj):
HResult; {$IFNDEF WINDOWS}cdecl{$ELSE}stdcall{$ENDIF}; virtual;
- function _AddRef: Integer; {$IFNDEF
WINDOWS}cdecl{$ELSE}stdcall{$ENDIF};
- function _Release: Integer; {$IFNDEF
WINDOWS}cdecl{$ELSE}stdcall{$ENDIF};
+ function QueryInterface({$IFDEF
FPC_HAS_CONSTREF}constref{$ELSE}const{$ENDIF} IID: TGUID; out Obj):
HResult; {$IF (not defined(WINDOWS)) AND
(FPC_FULLVERSION>=20501)}cdecl{$ELSE}stdcall{$IFEND}; virtual;
+ function _AddRef: Integer; {$IF (not defined(WINDOWS)) AND
(FPC_FULLVERSION>=20501)}cdecl{$ELSE}stdcall{$IFEND};
+ function _Release: Integer; {$IF (not defined(WINDOWS)) AND
(FPC_FULLVERSION>=20501)}cdecl{$ELSE}stdcall{$IFEND};
public
constructor Create(const Controller: IInterface);
property Controller: IInterface read GetController;
@@ -89,7 +93,8 @@
TContainedObject = class(TAggregatedObject, IInterface)
protected
- function QueryInterface({$IFDEF
FPC_HAS_CONSTREF}constref{$ELSE}const{$ENDIF} IID: TGUID; out Obj):
HResult; {$IFNDEF WINDOWS}cdecl{$ELSE}stdcall{$ENDIF}; override;
+ function QueryInterface({$IFDEF
FPC_HAS_CONSTREF}constref{$ELSE}const{$ENDIF} IID: TGUID; out Obj):
HResult; {$IF (not defined(WINDOWS)) AND
(FPC_FULLVERSION>=20501)}cdecl{$ELSE}stdcall{$IFEND}; override;
end;
{$ENDIF}
@@ -221,7 +226,8 @@
Result := IInterface(FController)._AddRef;
end;
-function TAggregatedObject._Release: Integer; {$IFNDEF
WINDOWS}cdecl{$ELSE}stdcall{$ENDIF};
+function TAggregatedObject._Release: Integer; {$IF (not
defined(WINDOWS)) AND
(FPC_FULLVERSION>=20501)}cdecl{$ELSE}stdcall{$IFEND};
- [Ya arreglado en trunk 1013] Tratando de compilar la revisión 903 of
ZeosDBO trunk en GNU/Linux con FPC 2.6.0 o superior, da el siguiente error
en ZAbstractRODataset.pas: "Error: Expected another 2 array elements". El
problema es que FPC2_1UP no está definido porque el archivo src/Zeos.inc no
verifica las versiones nuevas. Si estamos usando solo versiones nuevas de
FPC (2.6, 2.7 o superiores) podemos modificar src/Zeos.inc agregando las
lineas siguientes justo antes de {$IFDEF VER2_5}, y el error no aparece mas.
+ {$DEFINE FPC2_5UP}
+ {$DEFINE FPC2_4UP}
+ {$DEFINE FPC2_3UP}
+ {$DEFINE FPC2_2UP}
+ {$DEFINE FPC2_1UP}
+ {$DEFINE FPC2_UP}
+
{$IFDEF VER2_5}
{$DEFINE FPC2_5UP}
2013/5/6 José Mejuto <joshyfun en gmail.com>
> El 06/05/2013 20:14, Ismael L. Donis Garcia escribió:
>
> Error: No matching implementation for interface method
>> "IUnknown.QueryInterface(**constref TGuid,out <Formal type>):LongInt;
>> StdCall;" f
>>
>
> Hola,
>
> http://wiki.freepascal.org/**Zeos_tutorial/es#Posibles_**
> fallos_e_incidencias<http://wiki.freepascal.org/Zeos_tutorial/es#Posibles_fallos_e_incidencias>
>
> --
>
>
> ______________________________**_________________
> Lazarus-es mailing list
> Lazarus-es en lists.lazarus.**freepascal.org<Lazarus-es en lists.lazarus.freepascal.org>
> http://lists.lazarus.**freepascal.org/mailman/**listinfo/lazarus-es<http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es>
>
--
El que pregunta aprende, y el que contesta aprende a responder.
No a la obsolecencia programada:
http://dimensionargentina.blogspot.com/2011/01/todo-esta-disenado-para-romperse.html
Linux User #495070
http://domonetic.com/blog
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus.freepascal.org/pipermail/lazarus-es/attachments/20130506/47854487/attachment-0001.html>
More information about the Lazarus-es
mailing list