Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   tquery a archivo (https://www.clubdelphi.com/foros/showthread.php?t=85176)

ralmic 10-02-2014 23:49:02

tquery a archivo
 
Hola estimados, necesito pasar los datos de un tquery a un archivo de texto o csv para después agregar estos datos a una tabla igual que se encuentra en otra base de datos, ya hice las conexiones. mi base de datos es sybase 9, y trabajo en c++ xe3, intente migrarlo con sql incrustado en c++ usando la opción output de sybase pero me da un error que esta mala la sentencia. lo pruebo en el isql y me importa el archivo sin problemas. gracias de antemano.

ecfisa 11-02-2014 00:31:41

Hola ralmic.

Código:

void QueryToTxt(TQuery *qy, const String aFileName)
{
  String tmp;

  TStrings *sl = new TStringList;
  __try {
    qy->Close();
    qy->Open();
    while (!qy->Eof) {
      tmp = "";
      for(int i=0; i<qy->Fields->Count; i++)
        tmp += qy->Fields->Fields[i]->AsString + ",";
      tmp.SetLength(tmp.Length()-1);
      sl->Add(tmp);
      qy->Next();
    }
    qy->Close();
    sl->SaveToFile(aFileName);
  } __finally {
    delete sl;
  }
}

Ejemplo de uso:
Código:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  Query1->SQL->Text = "SELECT * FROM COUNTRY";
  QueryToTxt(Query1, "C:\\Carpeta\\Query.txt");
}

Saludos :)

ralmic 11-02-2014 15:15:37

Gracias había hecho un código parecido, no andaba tan perdido, ahora para agregar esos datos a la tabla, como hacer para que a las cadenas, fechas y demas les ponga comillas y asi poder agregarlos o este código es suficientemente inteligente y hace eso??

ecfisa 11-02-2014 16:17:50

Hola ralmic.

La función que hice no agrega comillas, pero con un simple cambio podes indicarle el formato que deseas:
Código:

void QueryToTxt(TQuery *qy, const String aFileName, const String Quote)
{
  String tmp;

  TStrings *sl = new TStringList;
  __try {
    qy->Close();
    qy->Open();
    while (!qy->Eof) {
      tmp = "";
      for(int i=0; i<qy->Fields->Count; i++)
        tmp += Format("%s%s%s,", ARRAYOFCONST(((String)Quote,
          (String)qy->Fields->Fields[i]->AsString, (String)Quote)));
      tmp.SetLength(tmp.Length()-1);
      sl->Add(tmp);
      qy->Next();
    }
    qy->Close();
    sl->SaveToFile(aFileName);
  } __finally {
    delete sl;
  }
}

Ejemplo:
Código:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
 ...
 // Sin comillas
 QueryToTxt(Query1, "C:\\Pruebas\\NoQuote.txt","");

 // Con comillas simples
 QueryToTxt(Query1, "C:\\Pruebas\\SingleQuote.txt",'\'');

 // Con comillas dobles
 QueryToTxt(Query1, "C:\\Pruebas\\DoubleQuote.txt",'"');
}

Saludos :)

ralmic 11-02-2014 17:11:16

gracias es excelente tu código, realmente quise modificarlo para mis necesidades soy un poco novato en builder y parece que no hay mucha ayuda. con este método le pone comilla a todo no importa que sea carácter o no lo que me faltaría es como pornerle comillas a los valores que no sean numéricos. para poder a agregarlos a un a tabla. será posible?? . saludos.

ecfisa 11-02-2014 18:21:54

Hola ralmic.
Cita:

Empezado por ralmic (Mensaje 472544)
...
lo que me faltaría es como pornerle comillas a los valores que no sean numéricos. para poder a agregarlos a un a tabla. será posible?? ...


Si claro,
Código:

void QueryToTxt(TQuery *qy, const String aFileName, const String Quote)
{
  String tmp;
  TStrings *sl = new TStringList;

  __try {
    qy->Close();
    qy->Open();
    while (!qy->Eof) {
      tmp = "";
      for(int i=0; i<qy->Fields->Count; i++)
        tmp += qy->Fields->Fields[i]->InheritsFrom(__classid(TNumericField)) ?
              qy->Fields->Fields[i]->AsString + "," :
              Quote+qy->Fields->Fields[i]->AsString+Quote + ",";
      tmp.SetLength(tmp.Length()-1);
      sl->Add(tmp);
      qy->Next();
    }
    qy->Close();
    sl->SaveToFile(aFileName);
  } __finally {
    delete sl;
  }
}

Uso:
Código:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  QueryToTxt(Query1, "C:\\Pruebas\\DoubleQuote.txt",'"');
}

Saludos :)


La franja horaria es GMT +2. Ahora son las 15:44:37.

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