PDA

Ver la Versión Completa : Help!!! Error al codificar Delphi a C++ Builder


man_cj
06-05-2008, 09:04:50
Buenas primero que nada este es mi primer post y pues un saludo al "Club Delphi"

Para empezar tego un serio problema en la transformacion de Delphi a C ++ Builder 6 pues... con eso de que no hay mucha informacion de cbuilder en cuanto al manejo de bases de datos uno se llega a complicar bastante :(... ahora que en delphi pues hay de todo :D... bueno pues navegando en el club delphi encontre el "Tutorial Programa Ejemplo Ado, MsAccess (Novatos)" http://wiki.clubdelphi.com/wiki/index.php/Categoría:Tutoriales echo en Delphi y pues 10 puntos.. y al pasarlo a C++ Builder 6 sorpresa :eek: el codigo tenia errores en builder (pruebenlo y veran que si da error al compilar)cambie todo de arriba a abajo, lei y re-lei el tutorial (ojo esta bien explicado :p) cambie los := por :, el . por ->, respete mayusculas, etc., etc., etc, y pues nada me perdi... :confused: Delphi es versatil ¿porque C++ Builder no pudiera serlo?

//---Código en Delphi (este es el primer codigo a arreglar que no jala en builder)


procedure TBanco.FormCreate(Sender: TObject);
begin
DTP1.DateTime:= now; // inicio la fecha al dia de hoy
Banco.Active := True; // activo la tabla
Banco.Last; // le indico que lea el ultimo registro
SumRet.Active := True; // activo el query
SumDep.Active := True; // activo el query
// coloco el resultado de (SumDep - SumRet) en el edit
ESalTot.Text := FloatToStr((SumDep.Fields[0].AsFloat) - SumRet.Fields[0].AsFloat);
// establecemos los dbedits como desactivados
DBNTransac.Enabled := False;
DBDescrip.Enabled := False;
DBRetiros.Enabled := False;
DBDeposit.Enabled := False;
DBSalAnt.Enabled := False;
// Deshabilitamos el combobox
CBTipo.Enabled:= False;
// Deshabilitamos el navegador
DBNavigator1.Enabled := False;
// escondemos los botones, con esto evitamos cometer errores
BRetiros.Visible := False;
BDeposito.Visible := False;
end;






//--- Y ésta la codificación en C++ Builder 6 (lo que esta en rojo es donde da el error, porque :confused:)


void __fastcall TForm1::FormCreate(TObject *Sender)
{
DTP1->DateTime = Now(); // inicio la fecha al dia de hoy
Banco->Active = true; // activo la tabla
Banco->Last(); // le indico que lea el ultimo registro
SumRet->Active = true; // activo el query
SumDep->Active = true; // activo el query
// coloco el resultado de (SumDep - SumRet) en el edit
ESalTot->Text = FloatToStr(SumDep->Fields[0]->AsFloat - SumRet->Fields[]->AsFloat);
// establecemos los dbedits como desactivados
DBNTransac->Enabled = false;
DBDescrip->Enabled = false;
DBRetiros->Enabled = false;
DBDeposit->Enabled = false;
DBSalAnt->Enabled = false;
// Deshabilitamos el combobox
CBTipo->Enabled = false;
// Deshabilitamos el navegador
DBNavigator1->Enabled = false;
// escondemos los botones, con esto evitamos cometer errores
DBRetiros->Visible = false;
DBDeposit->Visible = false;
}



El mensaje de error:

[C++ Error] UBanco.cpp(33): E2288 Pointer to structure required on left side of -> or ->*

Cual mi error... o interprete mal las lineas echas en Delphi ?
Sera el único error que encontre o habra más?
Alguien hizo el tutorial y lo pudo solucionar?

De antemano Gracias y suerte a todos los integrantes del "Club Delphi"
Saludos amigos...

escafandra
06-05-2008, 17:57:20
No lo he analizado con mucho detalle, pero a primer golpe de vista encuentro un error. No se si será un error de mera transcripción:

// coloco el resultado de (SumDep - SumRet) en el edit
ESalTot->Text = FloatToStr(SumDep->Fields[0]->AsFloat - SumRet->Fields[]->AsFloat);

El operador [] debe contener un indice:
// coloco el resultado de (SumDep - SumRet) en el edit
ESalTot->Text = FloatToStr(SumDep->Fields[0]->AsFloat - SumRet->Fields[0]->AsFloat);

En ocasiones el operador [] no tiene la misma sintaxis en delphi que en Builder. Para Builder, que es C++ ese operador referencia elementos de un array definido por un puntero. Esto es así mientras no esté sobrecargado. Como los objetos basados en VCL son todos punteros, ese operados no puede estar sobrecargado, para este tipo de objetos.

En ocasiones se debe utilizar sobre una variable llamada Items... que no aparece en delphi.

Para C++ el operador -> se utiliza cuando se llama desde un puntero a un objeto (como lo son los derivados de VCL) y el operador punto "." se utiliza cuando el objeto no es un puntero. Esta forma tan estricta está diseñada para evitar errores con punteros, de forma que obliga al programador a conocer, en todo momento, si está trabajando con punteros o con objetos propiamente dichos.

No se si me paso explicando obiedades, pero al preguntar por la "versatilidad" del delphi ma ha parecido oportuno.

Saludos.

man_cj
07-05-2008, 02:07:40
Cierto escafandra me comi el indice que por fuerza si o si debe tener :D, no me di cuenta en la codificacion :p pero aun asi como explico anteriromente el error sale en la parte marcada en rojo

// coloco el resultado de (SumDep - SumRet) en el edit
ESalTot->Text = FloatToStr(SumDep->Fields[0]->AsFloat - SumRet->Fields[]->AsFloat);

al compilar exactamente me pide un punteroo indice pero aun estando el mismo, sale el error, por el momento siguo revizando cual el error talvez sea en la conexion a la base de datos pero bueno seguire provando

Gracias por la correccion

escafandra
07-05-2008, 14:36:40
Prueba esto:
// coloco el resultado de (SumDep - SumRet) en el edit
ESalTot->Text = FloatToStr(SumDep->Fields->Items[0]->AsFloat - SumRet->Fields->Items[0]->AsFloat);

Sólo por si suena la flauta.

Investiga el tipo Fields ¿Aque apunta? Apunta a un objeto o a puntero.
Si apunta a un objeto quizas funcione esto:
// coloco el resultado de (SumDep - SumRet) en el edit
ESalTot->Text = FloatToStr(SumDep->Fields[0].AsFloat - SumRet->Fields[0].AsFloat);


Saludos.