Hola jrla.
Para el ejemplo crea dos tablas iguales, menos en el nombre claro
Código SQL
[-]
SET TERM ^;
CREATE TABLE TEST (
ID INTEGER,
CADENA VARCHAR(50)
)^
CREATE TABLE TEST2 (
ID INTEGER,
CADENA VARCHAR(50)
)^
SET TERM ;^
Y cargale algunos datos a la primer tabla (orígen).
En un form pone,
Código:
1 (un ) TIBDatabase (IBDatabase1)
1 (dos) TIBTransaction (IBTransaction1)
2 (dos) TIBDataSet (ibdsSource y ibdsTarget)
2 (dos) TDataSource (dsSource, dsTarget)
2 (dos) TDBGrid. (dbgSource, dbgTarget)
1 (un ) TButton (btnPassData)
Ejemplo:
Código PHP:
void __fastcall TForm1::FormCreate(TObject *Sender)
{
/* tabla origen */
ibdsSource->Close();
ibdsSource->Database = IBDatabase1;
ibdsSource->SelectSQL->Text = "SELECT * FROM TEST";
ibdsSource->Open();
// DataSource origen
dsSource->DataSet = ibdsSource;
// DBGrid origen
dbgSource->DataSource = dsSource;
dbgSource->Options = TDBGridOptions(dbgSource->Options)<< dgMultiSelect;
dbgSource->Options = TDBGridOptions(dbgSource->Options)<< dgRowSelect;
dbgSource->PopupMenu = PopupMenu1;
/* tabla destino */
ibdsTarget->Close();
ibdsTarget->Database = IBDatabase1;
ibdsTarget->SelectSQL->Text = "SELECT * FROM TEST2";
ibdsTarget->Open();
// DataSource destino
dsTarget->DataSet = ibdsTarget;
// DBGrid destino
dbgTarget->DataSource = dsTarget;
}
void __fastcall TForm1::btnPassDataClick(TObject *Sender)
{
if (dbgSource->SelectedRows->Count > 0) {
for(int i = 0; i < dbgSource->SelectedRows->Count; i++) {
ibdsSource->GotoBookmark((void*)dbgSource->SelectedRows->Items[i].c_str());
ibdsTarget->Insert();
for(int j = 0; j < ibdsSource->Fields->Count; j++)
ibdsTarget->Fields->Fields[j]->Value = ibdsSource->Fields->Fields[j]->Value;
ibdsTarget->Post();
}
}
}
El código pasa los registros que hayas seleccionado en
dbgSource (mediante Ctrl+Click) a
dbgTarget (en realidad de
ibdsSource a
ibdsTarget), cuando se presiona el botón
btnPassData.
Está realizado y probado en
C++ Builder 6 y Firebird 2.5.
Saludos
