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)
-   -   Problemas con TTable.BatchMove (https://www.clubdelphi.com/foros/showthread.php?t=10294)

eduarcol 14-05-2004 21:41:38

Problemas con TTable.BatchMove
 
Hola amigos, Estoy diseñando un procedimiento para crear un campo existente y colocarlo como requerido, trabajo con Delphi 5 y Paradox por medio del BDE

El procedimiento es el siguiente:

Código Delphi [-]
   ORIGINAL := tTable.Create(Application);
   try
      Original.DatabaseName := cRutaDatos;
      Original.TableName := cLinDes;
      Original.Active := True;
      //Crea el query
      sqSQL := TQuery.Create(Application);
      //Determina si esta el indice
      if Original.IndexFieldCount <= 2 then
      begin
        //Cierra las tablas
        Original.Active := False;
        //Crea la tabla temporal y la llena
        Temporal := TTable.Create(Application);
        try
           Temporal.TableType := ttParadox;
           Temporal.Name := 'Temporal';
           Temporal.BatchMove(TBDEDataSet(Original), batCopy); //Aqui da el error
           //Cambiala estructura de la tabla
           Original.FieldDefs[Original.FieldDefs.IndexOf(cLinDes_Fecha)].Required := True;
           Original.IndexDefs[Original.IndexDefs.IndexOf(cLinDes_I1)].Fields :=
cLinDes_CodigoDescarga + ';' + cLinDes_CodigoEmbarcacion + ';' +
cLinDes_Fecha;
           Original.CreateTable;
           //Actualiza de nuevo las tablas
           Original.BatchMove(Temporal, batAppend);
        finally
           FreeandNil(Temporal);
        end;
      end; //Determina si esta el indice

El error que me genera es una excepcion de tipo EDBEngine Error y dice:

Código:

Invalid Parameter

Disculpen si esta largo pero solo coloque el bloque de codigo donde da el error

Por cierto la ayuda de Delphi dice:

Cita:

TTable.BatchMove

Moves records from a dataset into this table.

function BatchMove(ASource: TBDEDataSet; AMode: TBatchMode): Longint;
Cita:

batCopy Copy the structure and records from the source table into the destination table. If the destination table already exists,delete it, and replace it with the new copy of the source.

roman 14-05-2004 22:26:56

¿No tendría que definirse primero la estructura de Temporal para hacer el BatchMove?

Otra cosa: si entiendo bien estás usando la tabla Temporal para poder cambiar la estructura de la tabla Original pero pienso que dos procesos de copia: Original->Temporal, Temporal->Original están de más. En todo caso haces la primera copia, borras la tabla Original y renombras Temporal a Original.

Pero por otro lado yo creo que puedes alterar la estructura sin necesidad de estos copiados temporales, por ejemplo con una consulta ALTER TABLE.

// Saludos

roman 14-05-2004 22:29:17

Algo más: ¿no podrías editar tu mensaje original para cortar la línea larga? Mi monitor tiene 17 pulgadas chiquititas.

// Saludos

eduarcol 14-05-2004 23:19:28

Cita:

Empezado por roman
¿No tendría que definirse primero la estructura de Temporal para hacer el BatchMove?

Eso mismo pense pero segun entendi en la ayuda de delphi al indicarle que el batch mode es bat copy el se encarga de copiar la estructura y los registros

Cita:

batCopy Copy the structure and records from the source table into the destination table. If the destination table already exists,delete it, and replace it with the new copy of the source.
Cita:

Empezado por roman
Otra cosa: si entiendo bien estás usando la tabla Temporal para poder cambiar la estructura de la tabla Original pero pienso que dos procesos de copia: Original->Temporal, Temporal->Original están de más. En todo caso haces la primera copia, borras la tabla Original y renombras Temporal a Original.

Ok fijate esto Original: Tbla con informacion, Temporal: Tabla Vacia - luego del proceso de TTable.createtable Temporal: Tabla con Informacion - Original: Tabla Vacia pero corregida, con la ultima copia utilizo la estructura corregida

Cita:

Empezado por roman
Pero por otro lado yo creo que puedes alterar la estructura sin necesidad de estos copiados temporales, por ejemplo con una consulta ALTER TABLE.

Lo intente pero necesito es que un campo el valor requerido cambie a True, y al colocar el campo nuevo como NOT NULL me da el error:

<<Cappabilty no Supported>>

Cita:

Empezado por roman
Algo más: ¿no podrías editar tu mensaje original para cortar la línea larga? Mi monitor tiene 17 pulgadas chiquititas.

Complacido :D :D

roman 14-05-2004 23:34:43

Busca en la ayuda del BDE acerca de DbiDoRestructure. Es una función de la API del BDE con parámetros horribles y algo complicada que sirve para reestructurar una tabla. La buena noticia es: el ejemplo que trae hace precisamente lo que quieres: alterar restricciones de un campo, entre ellos Required.

// Saludos

eduarcol 14-05-2004 23:43:13

Ok gracias por tu tiempo lo probare...

eduarcol 15-05-2004 23:12:58

Lo solucione pero de otra manera, cree una tablanueva. lallene borrela vieja y la renombre

Pero aunme queda la duda delbathmove, sialguien sabe que parametro esta mal :mad:


La franja horaria es GMT +2. Ahora son las 04:35:05.

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