Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   migracion de base de datos dbExpress a ADO (https://www.clubdelphi.com/foros/showthread.php?t=13876)

scooterjgm 02-09-2004 12:50:27

migracion de base de datos dbExpress a ADO
 
hola a todos!!

kiero migrar mi base de datos de dbExpress a ADO. alguien me puede decir si estas ekivalencias son correctas?? las q no se si me las podeis decir...

dbExpress ADO

SQLConnection------------------------------ADOConnection
SQLClientDataSet----------------------------- ¿?
SQLQuery-----------------------------------ADOQuery


StarrTransaction-----------------------------BeginTrans
DBConnection--------------------------------Connection

TransactionDesc.IsolationLevel---------------- ¿?
TransactionDesc.TransactionID---------------- ¿?
SQLConnection.InTransaction----------------- ¿?
SQLConnection.Commit(TransactionDesc)------ ¿?

Si alguien me puede ayudar o decirme alguna pagina donde se explike como hacer esto q me ayude. ya tengo la nueva base de datos creada.

guillotmarc 02-09-2004 14:50:53

Hola.

SQLClientDataset ---------------------------------- ADOQuery + DatasetProvider + ClientDataset
TransactionDesc.IsolationLevel --------------------- ADOConnection.IsolationLevel TransactionDesc.TransactionID ---------------------- no existe
SQLConnection.InTransaction ----------------------- ADOConnection.InTransaction
SQLConnection.Commit(TransactionDesc) ------------ ADOConnection.Commit

Saludos.

guillotmarc 02-09-2004 14:57:39

Por cierto, para obtener un equivalente al SQLClientDataset necesitas utilizar 3 componentes (ADOQuery + DatasetProvider + ClientDataset), aunque dado que el ADOQuery genera un Dataset bidireccional y modificable, seguramente en muchos casos no te hará falta conectarlo a un ClientDataset, podrás resolver el problema desde el mismo ADOQuery.

Saludos.

scooterjgm 02-09-2004 16:23:43

muchas gracias por la informacion...

pensaba q el componente TADODataSet era el ekivalente al TSQLClientDataSet. ME puedes decir para que sirve ese componente??

De nuevo muchas gracias por tu ayuda :)

scooterjgm 02-09-2004 16:40:27

es decir, conecto el SQLQuery directamente al dataSetProvider y si no funciona lo paso por un ClientDataSet, no?? o directamente el SQLQuery al DataSource??

guillotmarc 02-09-2004 18:59:46

Hola.

Cita:

Empezado por scooterjgm
pensaba q el componente TADODataSet era el ekivalente al TSQLClientDataSet. ME puedes decir para que sirve ese componente??

En muchos casos le puede suplir perfectamente. Un SQLClientDataset internamente són en realidad 3 componentes (SQLQuery + DatasetProvider + ClientDataset), por lo que su equivalente con ADO también tendrían que ser esos 3 componentes.

Aunque a diferencia del SQLQuery (que es unidireccional y de solo lectura), el ADOQuery es bidireccional y modificable, por lo que se puede utilizar para conectarlo directamente a una grid, o para modificar un registro. Cosa que no se podia hacer con el SQLQuery, lo que nos obligaba a conectarlo a un ClientDataset.

NOTA: Entre el ADODataset y el ADOQuery practicamente no hay ninguna diferencia. Internamente uno se basa en el otro (aunque no recuerdo el orden). Las diferencias que se ven, es que uno solo sirve para acceder a datos resultados de una consulta SQL (el ADOQuery), mientras que el otro también se puede usar para recuperar una tabla entera, ...

Cita:

Empezado por scooterjgm
es decir, conecto el SQLQuery directamente al dataSetProvider y si no funciona lo paso por un ClientDataSet, no?? o directamente el SQLQuery al DataSource??

:confused: :confused: Supongo que te refieres al ADOQuery.

Primero prueba utilizando solo un ADOQuery conectado directamente al Datasource. Unicamente en el caso de que necesites alguna de las características avanzadas del ClientDataset, vale la pena que lo utilizes (conectando el ADOQuery a un DatasetProvider y este al ClientDataset y este ultimo al Datasource).

Las características únicas del ClientDataset (por lo tanto presentes en el SQLClientDataset) y que no estan en el ADOQuery, son cosas como los campos de agregado, nesteds datasets, modificaciones en cache, ... (aunque los componentes ADO tienen su propio enfoque para estos problemas).

Saludos.

scooterjgm 03-09-2004 10:06:59

Muchas gracias, me ha kedado mas claro. ANtes me ekivoke como bien te has dado cuenta. me referia al ADOQuery.

Muchas gracias por todo. Espero q con esto me baste, pero una ultima pregunta...

para q sirve el transactionDesc en el dbExpress?? veo q en ADO no se usa, puedo prescindir de ello??

guillotmarc 03-09-2004 10:29:28

Hola.

Sirve para poder tener varias transacciones simultaneamente, y poder acceder a cada una de ellas de forma independiente.

En cambio en ADO (no existe ningún tipo de TransactionDesc), si no recuerdo mal, al abrir más de una transacción, quedan anidadas, y solo podrás confirmarlas/cancelarlas en orden inverso al de su creación.

Saludos.

scooterjgm 09-09-2004 10:10:37

tengo estas instrucciones para saber si hay una transaccion activa o no en FireBird... como seria en ADO??

if not SQLConnection.InTransaction then
begin
TransactionDesc.TransactionID := 1;
TransactionDesc.IsolationLevel := xilReadCommitted;
TransactionDesc.TransactionID :=TransactionDesc.TransactionID;
SQLConnection.StartTransaction(TransactionDesc);
end;

el equivalente en ado seria el siguiente??


if not SQLConnection.InTransaction then
begin
ADOConnection.IsolationLevel := xilReadCommitted;
ADOConnection.BeginTrans;
end;


prescinsiendo del TransactionDesc........¿?¿?¿?

una cosa mas... es lo mismo esto??

SQLClientDataSet.ApplyUpdates(1);---->ADODataSet.UpdateRecord;

SQLClientDataSet.ExecuteDirect(sql);--->ADODataSet.Execute(sql);

Integer(ADOConnection.ExecuteDirect(string) = 0);----->?????????????

Muchas gracias :)

scooterjgm 10-09-2004 15:59:52

nadie puede ayudarme??:confused:

guillotmarc 10-09-2004 20:56:23

¿ Ayudarte en que ?. En este momento tienes que hacer pruebas, y utilizar un poco la ayuda de Delphi.

Estas buscando equivalencias de código que no existen.

Cita:

Empezado por scooterjgm
if not SQLConnection.InTransaction then
begin
TransactionDesc.TransactionID := 1;
TransactionDesc.IsolationLevel := xilReadCommitted;
TransactionDesc.TransactionID :=TransactionDesc.TransactionID;
SQLConnection.StartTransaction(TransactionDesc);
end;

el equivalente en ado seria el siguiente??


if not SQLConnection.InTransaction then
begin
ADOConnection.IsolationLevel := xilReadCommitted;
ADOConnection.BeginTrans;
end;

No. Se parece pero no es lo mismo. Simplemente no puedes obtener lo mismo. En el primer caso obtienes una transacción a la que puedes acceder posteriermente mediante su correspondiente TransactionDesc. En cambio en ADO no existe ningún TransactionDesc por lo que posteriormente solo podrás acceder a las transacciones (para anularlas o finalizarlas), de forma anidada.

Por lo tanto no es lo mismo, ni hay forma de obtener lo mismo. Aunque esto ya te lo dije hace unos dias :( :(

Cita:

Empezado por scooterjgm
SQLClientDataSet.ApplyUpdates(1);---->ADODataSet.UpdateRecord;

No, una simple consulta a la ayuda de Delphi te lo confirmaría. Lo que más se parece al ApplyUpdates, es el UpdateBatch. Aunque para eso tienes que trabajar en ADO en modo de BatchUpdates (modificaciones en Caché), lo cual no es habitual. En ADO, usualmente los cambios se pasan a la base de datos, directamente en el Post, sin esperar a ningún ApplyUpdates, o por el estilo.

De nuevo la forma de trabajar en ADO y dbExpress es muy distinta, y no vas a encontrar equivalentes.

Cita:

Empezado por scooterjgm
SQLClientDataSet.ExecuteDirect(sql);--->ADODataSet.Execute(sql);

Consultando la ayuda de Delphi o con una sencilla prueba (en 2 minutos la tienes hecha) verias que no. Lo que mas se parece es el Execute sobre el ADOConnection.

Cita:

Empezado por scooterjgm
Integer(ADOConnection.ExecuteDirect(string) = 0);

¿ Esto funciona ?. ¿ Para que quieres pasar de booleano a entero ?. En todo caso esta pregunta no me parece que valga la pena ni responderla. Ya está respondida en la pregunta anterior. Los códigos de retorno para saber si la ejecución ha tenido éxito, deberias mirarlos en la ayuda de Delphi, no te va a morder.

Saludos.

scooterjgm 13-09-2004 10:56:09

Perdona mi ignorancia.


La franja horaria es GMT +2. Ahora son las 16:38:53.

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