Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MySQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-07-2011
Perenquen Perenquen is offline
Miembro
 
Registrado: jul 2003
Posts: 27
Poder: 0
Perenquen Va por buen camino
Recorrer ADOQUery y update.

Buenos a todos. Hace un par de días que empecé a trabajar con MySQL en Delphi y se me plantean un par de dudas.

Estoy intentando recorrer una tabla y modificar otra dependiendo del valor encontrado.

El problema es que el el primer bucle se ejecuta el UPDATE de forma correcta, pero después me da un error: 'Cannot perform this operation on a closed dataset' refiriéndose al ADOQ_Destinos. Está claro que el EXEQSQL desactiva el ADO, pero entonces no se como trabajar con este tipo de procedimiento.

- ¿Debería primero preparar toda la consulta y hacer un único EXECSQL? Pero claro pueden ser muchos registros.
- ¿Debería en vez de cargar toda la tabla, hacer un SELECT a la tabla destinos en cada instancia del bucle?. ¿No sería demasiado lento?

Si alguien tiene alguna idea de como encaminar esta consulta estaría muy agradecido. Recuerdo que esto es nuevo para mi e igual estoy un poco viciado con las tablas planas y tengo que cambiar un poco el chip.

Dejo el código por si sirve de algo,

Código Delphi [-]

var
  ADOQ_DIALPLAN,ADOQ_Prefijos, ADOQ_Destinos : TAdoQuery;
  conexion : string;
  comienzo : TTime;
  filtro : string;
begin
  RELog.Clear;
  conexion := 'DRIVER={MySQL ODBC 5.1 Driver};SERVER=localhost;DATABASE=;USER=Admin;PASSWORD=admin;OPTION=3';
  Informar2(false,RElog,0,0,'Actualizando el Dial Plan','',0);

  ADOQ_DIALPLAN := TADOQuery.Create(nil);
  ADOQ_DIALPLAN.ConnectionString := conexion;
  ADOQ_DIALPLAN.SQL.Text := 'SELECT * FROM V.dialingplan';

  ADOQ_Prefijos := TADOQuery.Create(nil);
  ADOQ_Prefijos.ConnectionString := conexion;
  ADOQ_Prefijos.SQL.Text := 'SELECT * FROM V.prefijos';

  ADOQ_Destinos := TADOQuery.Create(nil);
  ADOQ_Destinos.ConnectionString := conexion;
  ADOQ_Destinos.SQL.Text := 'SELECT * FROM V.destinos';

  ADOQ_DIALPLAN.Open;
  ADOQ_Prefijos.Open;
  ADOQ_Destinos.open;

  ADOQ_DIALPLAN.First;
  filtro := char(39) + 'zz' + char(39);
  while not ADOQ_DIALPLAN.Eof do
    begin
      if not ADOQ_Prefijos.Locate('Prefijo',ADOQ_DIALPLAN.FieldByName('telephone_number').asstring,[]) then
        begin
          filtro := filtro + ',' + char(39) + ADOQ_DIALPLAN.FieldByName('telephone_number').asstring + char(39);
        end
      else
        begin
          if ADOQuery_Destinos.Locate('ID',ADOQ_Prefijos.FieldByName('id_destino').value,[]) then
            begin
              if ADOQ_Destinos.FieldByName('nombre').asstring <> ADOQ_DIALPLAN.FieldByName('nombre').asstring then
                begin
                  ////****////// El problema creo que está en que ExecSQL desactiva la tabla.
                  ADOQ_Destinos.SQL.Text := 'UPDATE voipswitch.dialingplan ' +
                                            'SET nombre = ' +
                                            char(39) + ADOQuery_Destinos.FieldByName('nombre').asstring + char(39) +
                                            ' WHERE telephone_number = ' +
                                            ADOQ_DIALPLAN.FieldByName('telephone_number').asstring;
                  ADOQ_Destinos.ExecSQL;
                  ////****//////
                end;
            end;
        end;
      ADOQ_DIALPLAN.Next;
    end;
  ADOQ_DIALPLAN.SQL.Text := 'DELETE FROM voipswitch.dialingplan WHERE telephone_number IN (' + filtro + ')';
  ADOQ_DIALPLAN.ExecSQL;
end;

Un saludo y gracias de antemano.
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
Update en ADOQuery miquellg SQL 1 21-04-2006 04:51:54
Update índice secundario con ADOQuery miquellg SQL 1 09-04-2006 18:30:15
Problema con Insert y Update en ADOQuery Moises22 SQL 15 11-01-2006 07:57:13
Update AdoQuery Datashape Carlos Hurtado Conexión con bases de datos 0 04-12-2004 12:26:07
update de un AdoQuery fmonte Varios 9 02-09-2004 06:51:04


La franja horaria es GMT +2. Ahora son las 09:03:43.


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