Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: joaco97 en 4 Julio 2013, 19:28 pm



Título: Borland C++ Builder 6 Conversion
Publicado por: joaco97 en 4 Julio 2013, 19:28 pm
Quiero convertir AnsiString a TString * porque quiero modificar el ciodigo SQL de una consulta desde c++ alguien me puede pasar el codigo por favor. Gracias


Título: Re: Borland C++ Builder 6 Conversion
Publicado por: ecfisa en 4 Julio 2013, 20:17 pm
Hola.

Si entendí bién tu consulta se puede asignar de forma directa.

Ejemplo:
Código
  1. ...
  2. {
  3.  AnsiString s = "SELECT NOMBRE, APELLIDO FROM PERSONAS";
  4.  TStrings  *TS = new TStringList;
  5.  
  6.  __try {
  7.    TS->Text = s;
  8.    ShowMessage(TS->Text);
  9.  }
  10.  __finally {
  11.   TS->Free();
  12.  }
  13. }
  14.  

Saludos :)


Título: Re: Borland C++ Builder 6 Conversion
Publicado por: joaco97 en 4 Julio 2013, 23:48 pm
Si muchas gracias por tu respuesta.


Título: Re: Borland C++ Builder 6 Conversion
Publicado por: joaco97 en 4 Julio 2013, 23:58 pm
Mira yo escribo este codigo:

AnsiString SQL = "SELECT * FROM LIBROS";
TStrings *TS = new TStringList;

TS->Text = SQL;
dtaBiblioteca2->ConsultaLibrosSQL->SQL->Assign(TS->Text);

Me tira dos errores:

 cannot convert 'AnsiString' to 'TPersistent *'
type mismatch in parameter 'source' (wanted 'TPersistent *', got 'AnsiString')

Que podria ser?


Título: Re: Borland C++ Builder 6 Conversion
Publicado por: ecfisa en 5 Julio 2013, 00:31 am
Hola.


Supongo que dtaBiblioteca2 es un TDataModule y aunque desconozco que componente es ConsultaLibrosSQL, te diría que estás asignando mal el texto de la consulta. Debería ser:

Código
  1. {
  2.  AnsiString SQLStr = "SELECT * FROM COUNTRY";
  3.  TStrings *TS = new TStringList;
  4.  
  5.  TS->Text = SQLStr;
  6.  Query->Close();
  7.  Query->SQL->Clear();
  8.  Query->SQL->Assign(TS);
  9.  Query->Open();
  10. }
  11.  
Pero de tu primer mensaje no divisé a donde apuntaba tu consulta, ahora viendo el uso, no tiene sentido todo ese código previo.  Simplemente hace:

Código
  1. {
  2.  Query->Close();
  3.  Query->SQL->Text = "SELECT * FROM COUNTRY";
  4.  Query->Open();
  5. }
  6.  
Con el mismo resultado.

Si la consulta que envias al motor es muy extensa te conviente usar el método Add()  para darle mas legibilidad al código. Es importante en este caso usar previamente el métod Clear(), para eliminar cualquier residuo de la propiedad SQL(de tipo TStrings).

Por ejemplo:
Código
  1. {
  2.  Query->Close();
  3.  Query->SQL->Clear();
  4.  Query->SQL->Add("UPDATE TABLA SET PRECIO =");
  5.  Query->SQL->Add("CASE OPICION");
  6.  Query->SQL->Add("WHEN 'CASO1' THEN PRECIO * 0.5");
  7.  Query->SQL->Add("WHEN 'CASO2' THEN PRECIO * 0.3");
  8.  Query->SQL->Add("ELSE PRECIO * 0.25 END");
  9.  Query->Open();
  10. }
  11.  

Saludos :)





Título: Re: Borland C++ Builder 6 Conversion
Publicado por: joaco97 en 5 Julio 2013, 19:49 pm
Mucha gracias, la verdad me re ayudaste, pude terminar el programa.