Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-05-2004
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
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.
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela

Última edición por eduarcol fecha: 14-05-2004 a las 23:10:16.
Responder Con Cita
  #2  
Antiguo 14-05-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¿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
Responder Con Cita
  #3  
Antiguo 14-05-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Algo más: ¿no podrías editar tu mensaje original para cortar la línea larga? Mi monitor tiene 17 pulgadas chiquititas.

// Saludos
Responder Con Cita
  #4  
Antiguo 14-05-2004
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
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
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #5  
Antiguo 14-05-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita
  #6  
Antiguo 14-05-2004
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
Ok gracias por tu tiempo lo probare...
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #7  
Antiguo 15-05-2004
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
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
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
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


La franja horaria es GMT +2. Ahora son las 00:47:24.


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