 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Sab 14 Ago, 2004 8:31 pm Asunto: Registro Como TVarRec |
|
|
bien, el objetivo, es pasar el contenido de una tabla, a otra, pero desconociendo, la estructura de la primera..
bien, el primer paso es copiar la estructura de la primera que no se conce de la siguiente manera, (problema resuelto),
| Código: | this->IBQuery1->Close(); // query con la estructura de la tabla
this->IBQuery1->Open(); //
this->kbmMemTable1->FieldDefs->Clear();// limpiamos la tabla
for(int a=0;a<this->IBQuery1->FieldCount;a++){ //checamos lo campos
this->kbmMemTable1->FieldDefs->Add( //SE AGREGAN a la base tmp
this->IBQuery1->Fields->Fields[a]->FieldName,
this->IBQuery1->Fields->Fields[a]->DataType,
this->IBQuery1->Fields->Fields[a]->Size,
false
);
}
this->kbmMemTable1->Open();// y se habre la base |
Bien el problema se encuentra, cuando quiero agregar el contenido de la tabla.
| Código: | this->IBQuery1->First();
while(!this->IBQuery1->Eof){
//<EL ERROR, SE ENCUENTRA AQUI>
this->kbmMemTable1->AppendRecord(//<como pasar un registro> dela
//Query1, pero utilizando
// AppendRecord
);
this->IBQuery1->Next();
} |
bien he intentado con BatchMove, pero como la tabla (kbmMemTable1), es un componente, y no trae esta propiedad... no puedo utilizarlo _________________
 |
|
| Volver arriba |
|
 |
cecito Capt

Registrado: 25 Nov 2003Mensajes: 164Ubicación: Arequipa - Perú
|
Publicado: Sab 14 Ago, 2004 10:05 pm Asunto: |
|
|
Hola César, ¿Exactamente para que quieres copiar el contenido en otra tabla?
Si más no recuerdo el componente que mencionas es para tener en una tabla temporal una copia de los datos de tu IBQuery. Permiteme recomendarte usar mejor el componente TIBClientDataSet este combina en un solo paquete un TIBQuery, un TDataSetProvider y un TClientDataSet, su uso es simple:
1) Creas un objeto TIBTransaction llamado "TransCDS" con su propiedad AutoStopAction = saCommit, y en DefaultDataBase = <Tu TIBDataBase>
2) Creas un objeto TIBClientDataSet( el últomo componente de la Pestaña Interbase en el Builder ) y lo llamas "cdsXXX" y en su propiedad DBTransaction = transCDS, luego en su propiedad CommandText escribes tu sentencia SQL de consulta por ejemplo
| Código: | Select * from tabla where Campo1 = :Parametro1 order by campo1
o
Select * from ProcedimientoAlmacenado( :Parametro1, :Parametro2, ...) order by campo1 |
Luego solo harias :
y automaticamente el componente consigue los datos, gestiona automáticamente la apertura y cierre de la trasacción y ya puedes usarlo como si fuese tu tabla temporal, puedes recorrerlo, guardarlo a un fichero:
| Código: | cdsXXX->SaveToFile("c:\\Datos.cds); |
o recuperarlos | Código: | cdsXXX->LoadFromFile("c:\\Datos.cds); |
Puedes aplicar filtros mucho mas efectivos que en un DataSet Normal | Código: | cdsXXX->Filter = "Campo1 is null";
ó
cdsXXX->Filter = "Campo2 in ( 123, 34, 13 )";
ó
cdsXXX->Filter = "year(campoFecha) = 2003";
|
Tienes los campos calculados y los campos calculados internos( los cuales nos permiten crear indices sobre ellos ), tienes ademas los campos Agregados los cuales no trabajan en un registro como los otros sino en el integro de la tabla permitien crear un campo que puede por ejemplo totalizar una columna o hallar el promedio de otra. En la propiedad expreesion de un campo Agregado podrias poner cosas como: | Código: | Expresion = "sum(Campo1)";
ó
Expresion = "sum(Campo1)*max(Campo2)";
ó
Expresion = "avg(Campo1*Campo2-100)";
| Ahora con los TIBClientDataSet puedes manipular sus datos, modificarlos, insertar nuevos, borrar otros y no se reflejara nada en el servidor ya que estas trabajando con una copia local, y si al final deseas enviarlos al servidor deberas incluir la siguiente línea: | Código: | cdsXXX->ApplyUpdates(0); |
Deberas incluir la librería midas.dll en el directorio de tu Ejecutable cuando vayas a distribuir tu programa.
Me olvidaba, si no tuvieses el componente TIBClientDataSet o el Objeto TIBTransaction no tuviese la propiedad AutoStopAction debes busca una actualización del paquete IBX el cual se hallará en la pagina de Borland. tambien busca en este foro sobre IBX , Interbase o coloca TSQL (es una clase que hice para encapsular el manejo del sql del interbase dentro del builder ) .
Espero haberte ayudado  |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Sab 14 Ago, 2004 10:28 pm Asunto: |
|
|
nada es cuestionable, lo unico que deseo es devolver todo un Registro Como TVarRec, Independientemente si lo asigno a una tabla o se manipula en un TStringGrid,
Es todo, solo quiero saber si se puede o no. para intentar otras opciones.. _________________
 |
|
| Volver arriba |
|
 |
cecito Capt

Registrado: 25 Nov 2003Mensajes: 164Ubicación: Arequipa - Perú
|
Publicado: Dom 15 Ago, 2004 2:47 am Asunto: |
|
|
No se manejar el TVarRec, pero tengo una función que devolvia el registro en un array de Variants tal vez puedas cambiarla para tu propósito:
| Código: | void __fastcall CopiarRegistro(TDataSet * Tabla, Variant * Lista)
{
int NroCampos;
NroCampos = Tabla->Fields->Count;
if( Lista )
delete Lista;
Lista = new Variant[NroCampos];
// Recordamos los campos
for(int x = 0; x < NroCampos; x++)
Lista[x] = Tabla->Fields->Fields[x]->AsVariant;
}
|
uso | Código: | {
Variant * Registro;
CopiarRegistro(tbClientes,Registro);
// tu proceso
int x = Registro[0]->AsInteger;//Primer campo
delete Registro;
} |
|
|
| Volver arriba |
|
 |
|
|
No puedes publicar temas nuevos en este foro No puedes responder a temas en este foro No puedes editar tus mensajes en este foro No puedes borrar tus mensajes en este foro No puedes votar en las encuestas de este foro
|
© 2002–2026 Club Builder · Funciona con phpBB.
|