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)
-   -   Conexión ADO (https://www.clubdelphi.com/foros/showthread.php?t=37929)

mpedrero 27-11-2006 12:08:43

Conexión ADO
 
Estoy conectando a una base de datos de SQL Server 2005 a traves de componentes ADO de Delphi, necesito saber de que forma puedo hacer que las transacciones (Inserción, Modificación, Eliminación...) sean lo mas rápidas posible...

Me surge un problema con esto, al realizar dichas transacciones, estas me parecen excesivamente lentas:
Con 10000 registros --> Inserción: 1 min. 54 seg., Modificación: 1 min. 52 seg., Eliminación: 1 min 52 seg.

No uso sentencias SQL, de momento prefiero evitarlas...

¿Como puedo hacerlas mas rapidas?, quiero reducirlo a segundos, por ejemplo con en BDE de paradox en insertar la misma cantidad de registros no llega ni a los 5 segundos... yo quiero con ADO conseguir el mismo tiempo...

¿Alguien puede ayudarme, aconsejarme?, Gracias a todos...

mensana 27-11-2006 12:56:45

Cita:

Empezado por mpedrero
... No uso sentencias SQL, de momento prefiero evitarlas...
...¿Como puedo hacerlas mas rapidas?

Usa sentencias SQL (insert into tabla ...) en lugar de Insert+Post

Prepara las sentencias con parámetros.

Utiliza transacciones de n-registros (valor de n, según pruebas, 1.000, 10.000, ...)

mpedrero 27-11-2006 19:37:48

Aun usando sentencias SQL, y aplicando cambios, segun un número de registros --> (if i MOD 1000 = 0 then...), sigo obteniendo resultados ridículos, has hablado de preparar las transacciones, ¿como las preparo para un resultado optimo?...

casacham 27-11-2006 23:00:39

Hacete amigo del SQL
 
Hola, vas a tener que vencer ese miedo e iniciarte en SQL, ya que a los de Microsfot les encanta y eso te haceleraria tus procedimientos.
Bien por el amigo que te dio ese codigo, usalo, realmente es muy rapido

mensana 28-11-2006 08:57:13

Cita:

Empezado por mpedrero
... has hablado de preparar las transacciones

Se preparan las sentencias, no las transacciones.

Ejemplo

// Pseudocodigo

// Los parámetros se marcan con el símbolo ":"
SQL.Text := 'insert into tabla (campo1, campo2, ...) values (:Valor1, :Valor2)';
SQL.Prepare;
for i := to 1000 do begin
SQL.Param('Valor1').AsInteger := i;
SQL.Param('Valor2').AsInteger := Random(i);
SQL.Execute()
end;

mpedrero 28-11-2006 12:28:13

Buenas de nuevo, no tengo miedo al SQL, de hecho me gusta SQL, pero soy un mandao... y no ha sido idea mia usarlo como primer recurso, jeje, es una opción que ya tenia contemplada, mi problema a esto viene a que quiero migrar de una base de datos a otra, usando el código existente y realizando el mínimo de cambios posible (se que habr´1 que cambiar muuucho código, pero quiero que sea lo menos...), me he decantado por SQL server, pero se que puede ser muy veloz, y mi intención es que asi sea, quiero que me ayudeis con esto, porque, ademas, la velocidad de SQL Server no se contempla en nigun otro foro o página web, y es un tema interesante, acelerar las transacciones, y creo que el futuro es ADO (o al menos eso se pretende con ADO .NET)...

Gracias por el pequeño trozo de código que me has enviado, me ha ayudado, pero aun no es suficiente, necesito mas información, admito todo tipo de sugerencias, gracias... ;) Más ayuda por favor...

mpedrero 28-11-2006 13:40:05

Cita:

Empezado por mensana
Se preparan las sentencias, no las transacciones.

Ejemplo

// Pseudocodigo

// Los parámetros se marcan con el símbolo ":"
SQL.Text := 'insert into tabla (campo1, campo2, ...) values (:Valor1, :Valor2)';
SQL.Prepare;
for i := to 1000 do begin
SQL.Param('Valor1').AsInteger := i;
SQL.Param('Valor2').AsInteger := Random(i);
SQL.Execute()
end;

¿Que componente has usado para realizar esta sentencia?. yo utilice un ADOQuery, y las propiedades/metodos, no se asemejan a las del ejemplo, siguen siendo tiempos ridículos, para 10000 registros me tarda 1 minnuto y 28 segundos aproximadamente, quiero que sea en segundos...
gracias... ;)

mensana 28-11-2006 13:43:34

[quote=mpedrero]
...¿Que componente has usado para realizar esta sentencia?
... para 10000 registros me tarda 1 minnuto y 28 segundos aproximadamente, quiero que sea en segundos...
/quote]

Es pseudocódigo.

Nunca conseguirás que SQL-Server sea tan rápido como Paradox.
Nunca conseguirás que Paradox sea tan fiable como SQL-Server

mpedrero 28-11-2006 13:56:47

[quote=mensana]
Cita:

Empezado por mpedrero
...¿Que componente has usado para realizar esta sentencia?
... para 10000 registros me tarda 1 minnuto y 28 segundos aproximadamente, quiero que sea en segundos...
/quote]

Es pseudocódigo.

Nunca conseguirás que SQL-Server sea tan rápido como Paradox.
Nunca conseguirás que Paradox sea tan fiable como SQL-Server

Ya, eso ya lo se, pero en estos momentos necesito velocidad, a costa de fiabliidad...

Entonces... siendo asi, ¿que base de datos cliente/servidor, es muy rapida, y que pueda utilizar con ADO?...

Como siempre... gracias... ;)


La franja horaria es GMT +2. Ahora son las 14:29:38.

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