Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-05-2013
Avatar de darkerbyte
darkerbyte darkerbyte is offline
Miembro
 
Registrado: feb 2005
Posts: 196
Poder: 20
darkerbyte Va por buen camino
Unhappy Tipos incompatibles ???

Hola colegas:

Pues ahora estoy atorado con algo bien simple pero ya no le encuentro, creo que mi cerebro está dando las últimas

Estoy utilizando un TZconnection en Delphi7/Zeos 6.6.4 Stable para conectarme a MySQL y SQlite. La situación es que tengo que implementar
un mecanismo para conectarse a cualquiera de las dos bases de datos en RunTime.

Para cambiarme de Base de Datos (de MySQL a SQlite) hago algo como esto:
Código Delphi [-]
if DM.ZCsistar.Connected then DM.ZCsistar.Disconnect;
 with DM do begin
   ZCsistar.Database:= ExtractFilePath(Application.ExeName) + '\offline.db';
   ZCsistar.Protocol:='sqlite-3';
   ZCsistar.Password:='';
   //Aqui debo cambiar el nivel de aislamiento a:
   //ZCsistar.TransactIsolationLevel := tiNone;
   ZCsistar.connect;

Ya declaré un type en mi Form con la siguiente instrucción:

Código Delphi [-]
 TZTransactIsolationLevel = (tiNone, tiReadUncommitted, tiReadCommitted,
    tiRepeatableRead, tiSerializable);

Pero el compilador me marca que los tipos no son compatibles:
Código:
[Error] Fmain.pas(7043): Incompatible types: 'ZConnection.TZTransactIsolationLevel' and 'Fmain.TZTransactIsolationLevel'
Entonces solo pude decir WTF????

Ayuda please, y gracias de antemano
Responder Con Cita
  #2  
Antiguo 01-05-2013
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is online now
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.065
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿Funcionan por separado?
¿Por qué no pones 2 conectores?, uno para mysql y otro para sqlite.
Responder Con Cita
  #3  
Antiguo 01-05-2013
Avatar de darkerbyte
darkerbyte darkerbyte is offline
Miembro
 
Registrado: feb 2005
Posts: 196
Poder: 20
darkerbyte Va por buen camino
Dos conectores

Cita:
Empezado por Casimiro Notevi Ver Mensaje
¿Funcionan por separado?
¿Por qué no pones 2 conectores?, uno para mysql y otro para sqlite.
Gracias Casimiro por tu sugerencia.

La idea es buena y creo que si no le encuentro como cambiar el nivel de aislamiento lo haré así.

El sistema en el que estoy trabajando es para un cliente que maneja diferentes sucursales por internet y se conectan todas a un servidor en MySQL. El problema es que cuando falla el internet deja a todas las sucursales paradas. Lo que idee fue crear una copia local de la base de datos en SQLite y cuando la conexión se reestablezca con el servidor enviar toda la información en modo batch.

Entonces, ya que tenemos dos bases de datos iguales, una en MySQL y Otra en SQlite, mi idea es solo cambiar los parámetros de conexión para no afectar todo el demás código.
Responder Con Cita
  #4  
Antiguo 01-05-2013
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 30
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Hola darkerbyte.

Cita:
Empezado por darkerbyte Ver Mensaje
Ya declaré un type en mi Form con la siguiente instrucción:

Código Delphi [-]
 TZTransactIsolationLevel = (tiNone, tiReadUncommitted, tiReadCommitted,
    tiRepeatableRead, tiSerializable);

Pero el compilador me marca que los tipos no son compatibles:
Código:
[Error] Fmain.pas(7043): Incompatible types: 'ZConnection.TZTransactIsolationLevel' and 'Fmain.TZTransactIsolationLevel'
Según se ve, el tipo de dato TZTransactIsolationLevel ya existe en la unidad ZConnection. No debes volver a declarar ese tipo de dato en ninguna otra unidad (Fmain), pues estarías creando otro tipo de dato de mismo nombre.

Sólo por curiosidad (y quizá la respuesta sirva a colegas que vengan después), ¿qué razonamiento te indujo a declarar el tipo de dato TZTransactIsolationLevel y sus constantes tiXXX dentro de una unidad de tu proyecto?

Saludos.
Responder Con Cita
  #5  
Antiguo 01-05-2013
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is online now
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.065
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por darkerbyte Ver Mensaje
Entonces, ya que tenemos dos bases de datos iguales, una en MySQL y Otra en SQlite, mi idea es solo cambiar los parámetros de conexión para no afectar todo el demás código.
También podías haber creado la local en mysql y te ahorra de tener 2 distintas.
Aunque haz caso a Al, él sabe más que yo de estas cosas.
Responder Con Cita
  #6  
Antiguo 02-05-2013
Avatar de darkerbyte
darkerbyte darkerbyte is offline
Miembro
 
Registrado: feb 2005
Posts: 196
Poder: 20
darkerbyte Va por buen camino
Question Tipos diferentes

Hola Al.

El porqué necesito cambiar el nivel de aislamiento de la conexión en Zeos es porque cuando ejecutas un script no lo procesa. No se si se deba a un error de las librerías de Zeos, pero si mandas una transacción en MySQL usando Zeos/ZQLprocessor funciona bien con:

Código:
 TZTransactionIsolationLevel:= ReadUncomited;
Pero para que funcione en SQLite es necesario
Código:
 TZTransatcionIsolationLevel:= tiNone;
Lo pongo por si alguien esta sufriendo con las transacciones en SQLite.

Bueno contestando tu pregunta, cuando intenté hacer esto:
Código:
 ZConection.TransactionIsolationLevel := tiNone;
El compilador me manda:
Código:
Undeclared identifier: tiNone
Lo primero que intenté fue poner la unit "Zconection.pas" en el uses del Form, pero no funcionó.
Así que intenté declarar el tipo de datos para poder asignarlo y tampoco.
Y ahí me atoré y ya no supe como hacerle

Gracias a todos por sus valiosas respuestas
Responder Con Cita
  #7  
Antiguo 02-05-2013
Avatar de darkerbyte
darkerbyte darkerbyte is offline
Miembro
 
Registrado: feb 2005
Posts: 196
Poder: 20
darkerbyte Va por buen camino
Unhappy La desesperación....

Pues necesito avanzar con el proyecto y me ganó la desesperación...
Me metí a código del componente Zconnection y declaré estos métodos públicos:
Código Delphi [-]
procedure TZConnection.setTILnone;
begin
 SetTransactIsolationLevel(tiNone);
end;

procedure TZConnection.setTILread;
begin
  SetTransactIsolationLevel(tiReadUncommitted);
end;

Y ya esta funcionando, ahora si, mando un script en un ZSQLproccessor y me guarda los datos en la BD.
Aunque no me siento muy seguro de la solución. Creo que no es lo mas apropiado, pero esta funcionando

Pero necesito aprender, porque no me funcionó como le intenté antes
Responder Con Cita
  #8  
Antiguo 02-05-2013
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 30
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Cita:
Empezado por darkerbyte Ver Mensaje
Pero necesito aprender, porque no me funcionó como le intenté antes
¿Habras querido decir lo siguiente?
Cita:
Empezado por darkerbyte Ver Mensaje
Pero necesito aprender por qué no me funcionó como le intenté antes
¿Dices que no funcionó poner la unidad en el Uses? ¿Cómo la pusiste? ¿Qué error exacto te aparece al compilar?

Saludos desde Impunilandia.
Responder Con Cita
  #9  
Antiguo 03-05-2013
Avatar de darkerbyte
darkerbyte darkerbyte is offline
Miembro
 
Registrado: feb 2005
Posts: 196
Poder: 20
darkerbyte Va por buen camino
Exactamente el mismo error

Hola Al.

Estuve rastreando el código de Zeos y Zconnection.pas usa el type TZTransactionIsolationLevel de otra unidad (que no recuerdo bien el nombre pero es algo así como ZAbstract...pas). Creo entonces que por eso aún cuando importé la unidad Zconnection.pas no me funcionó. Bueno esta es la teoria, necesito hacer una prueba importando el otro archivo. Pero al parecer este era el truco

Ah, No sabía que si tu declaras un type en dos unidades diferentes, aunque se llamen iguales para Delphi son diferentes

Gracias Al, eres muy amable.

Por cierto estuve revisando tu blog. Vi que mencionas sobre una libreria para Delphi que te permite generar CDFI con Facturaxion, te podría
solicitar un poco mas de información por inbox?
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Tipos de Datos Incompatibles? martini002 Varios 3 19-05-2012 08:27:39
Types Incompatibles Paulao Varios 8 21-07-2011 18:19:32
Error de tipos incompatibles jorgegetafe Varios 2 03-10-2007 00:12:08
Tipos Incompatibles? RJNewbyte Conexión con bases de datos 4 28-12-2006 18:56:24
TPanel y bucle incompatibles JoseQ Varios 1 03-03-2005 19:30:02


La franja horaria es GMT +2. Ahora son las 18:47:57.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi