PDA

Ver la Versión Completa : Problemas con TTable.BatchMove


eduarcol
14-05-2004, 21:41:38
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:


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:


Invalid Parameter



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

Por cierto la ayuda de Delphi dice:


TTable.BatchMove

Moves records from a dataset into this table.

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



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
¿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

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.

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


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>>


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: