Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Help!!! Error al codificar Delphi a C++ Builder (https://www.clubdelphi.com/foros/showthread.php?t=56044)

man_cj 06-05-2008 09:04:50

Help!!! Error al codificar Delphi a C++ Builder
 
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/inde...rí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)

Código Delphi [-]
 
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:)

Código:


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:

Código:

  // 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:
Código:

  // 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 error de transcripcion pero igual no jala
 
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

Código:

// 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:
Código:

  // 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:
Código:

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

Saludos.


La franja horaria es GMT +2. Ahora son las 14:01:54.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi