Daten von einer TQuery holen

AnsiString sTempString = SQLQuery->FieldByName("Spaltenname")->AsString;
float fZahl = SQLQuery->FieldByName("Spaltenname")->AsFloat;
int iWert = SQLQuery->FieldByName("Spaltenname")->AsInteger;

oder

AnsiString sTempString = SQLQuery->Fields->Fields[SpaltenNummer]->AsString;
float fZahl = SQLQuery->Fields->Fields[SpaltenNummer]->AsFloat;
int iWert = SQLQuery->Fields->Fields[SpaltenNummer]->AsInteger;

Arbeit mit TQuery und SQL

  • Um die Arbeit mit SQL Strings und den TQuery-Objekten zu vereinfachen sollte man sich eine Funktion schreiben, an die nur noch der SQL-String und der Typ der Rückgabemenge übergeben wird.
// "true" für Abfragen mit Rückgabemenge
SqlQuery(true, "SELECT * FROM tablename");

// "false" für Abfragen ohne Rückgabemenge
SqlQuery(false, "INSERT INTO tablename (col1, col2, ...) VALUES (0, 'String', NULL)");

void TDataModule::SqlQuery(bool QueryType, AnsiString Sql)
{
    SQLQuery->Close();
    SQLQuery->SQL->Clear();
    SQLQuery->SQL->Add(Sql);

    if (QueryType) SQLQuery->Open();
    else SQLQuery->ExecSQL();
}

Beispiel für einen Datenbankzugriff mit MySQLDAC-Komponenten

Auf eine Form eine mySQLDatabase, mySQLQuery, Datasource, DBGrid und einen DBNavigator ziehen und im Objektinspektor folgendes einstellen:

mySQLDatabase1->DatabaseName = beliebiger Name
mySQLDatabase1->Host = IP-Adresse des mySQL-Servers;
mySQLDatabase1->Port = 3306;
mySQLDatabase1->UserName = ein Username;
mySQLDatabase1->UserPassword = gültiges Passwort;
mySQLDatabase1->Active = true;

mySQLQuery1->DataBase = mySQLDatabase1
mySQLQuery1->sql: SELECT * FROM TabellenName
mySQLQuery1->Active = true;

DataSource1->DataSet = Query1

DBGrid1->DataSource = Datasource1

DBNavigator->DataSource = Datasource1

Beispiel für einen Datenbankzugriff mit BDE-Komponenten

Auf eine Form eine Database, Query, Datasource, DBGrid und einen DBNavigator ziehen und im Objektinspektor folgendes einstellen:

Database1->Aliasname = BCDemos
Database1->DatabaseName = TestDB
Database1->LoginPrompt = false
Database1->Active = true;

Query1->DatabaseName = TestDB
Query1->sql: SELECT * FROM animals
Query1->Active = true;

DataSource1->DataSet = Query1

DBGrid1->DataSource = Datasource1

DBNavigator->DataSource = Datasource1

Versionsinformationen einer Datei lesen

  • Verwendung:
VerInfo * pVer = new VerInfo("C:\\WINDOWS\\notepad.exe");

for (int i = 0; i < 10; i++)
{
    Memo1 -> Lines -> Add(pVer -> GetVerInfo(ilCount));
}

if (pVer != NULL) { delete pVer; pVer = NULL; }
  • *.h
#ifndef versionsinfoH
#define versionsinfoH
//---------------------------------------------------------------------------
#include <SysUtils.hpp>
#include <vcl.h>
//----------------------------------------------------------------
// Konstanten für die Verwendung als Parameter mit der
// Funktion GetVerInfo(int iId):
//-----------------------------------------------------------------
const int VI_COMPANY_NAME      = 0;      // Firmen-Name
const int VI_FILE_DESCRIPTION  = 1;      // Dateibeschreibung
const int VI_FILE_VERSION      = 2;      // Versionsnummer
const int VI_INTERNAL_NAME     = 3;      // Interner Name
const int VI_LEGAL_COPYRIGHT   = 4;      // Copyright-Info
const int VI_LEGAL_TRADEMARKS  = 5;      // Warenzeichen
const int VI_ORIGINAL_FILENAME = 6;      // Orig.-Dateiname
const int VI_PRODUCT_NAME      = 7;      // Produktname
const int VI_PRODUCT_VERSION   = 8;      // Produkt-Version
const int VI_FILE_COMMENTS     = 9;      // Kommentare

class TVerInfo
{
      private:

        AnsiString sCompany_name;
        AnsiString sFile_description;
        AnsiString sFile_version;
        AnsiString sInternal_name;
        AnsiString sLegal_copyright;
        AnsiString sLegal_trademarks;
        AnsiString sOriginal_filename;
        AnsiString sProduct_name;
        AnsiString sProduct_version;
        AnsiString sFile_comments;

      protected:

        char *GetVersionKey(char *cBuffer, const AnsiString &sPrefix, char *cKey);

      public:

        __fastcall TVerInfo(AnsiString sExeName);
        AnsiString GetVerInfo(int iID);
};
#endif
  • *.cpp
__fastcall TVerInfo::TVerInfo(AnsiString sExeName)
{
           DWORD dwHandle;
           DWORD dwSize;

           sCompany_name       = "";
           sFile_description   = "";
           sFile_version       = "";
           sInternal_name      = "";
           sLegal_copyright    = "";
           sLegal_trademarks   = "";
           sOriginal_filename  = "";
           sProduct_name       = "";
           sProduct_version    = "";
           sFile_comments      = "";

           if (FileExists(sExeName))
           {
              dwSize = GetFileVersionInfoSize(sExeName.c_str(), &dwHandle);

              if (dwSize > 0)
              {
                 char *cBuffer = new char[dwSize];

                 if (GetFileVersionInfo(sExeName.c_str(), 0, dwSize, cBuffer))
                 {
                    UINT uiDataSize;
                    unsigned short *usTranslation;
                    VerQueryValue(cBuffer, "\\VarFileInfo\\Translation",(void **) &usTranslation, &uiDataSize);

                    AnsiString sPrefix = "\\StringFileInfo\\" + AnsiString::IntToHex(usTranslation [0], 4)+ AnsiString::IntToHex(usTranslation [1], 4);

                    sCompany_name       = GetVersionKey(cBuffer, sPrefix, "CompanyName");
                    sFile_description   = GetVersionKey(cBuffer, sPrefix, "FileDescription");
                    sFile_version       = GetVersionKey(cBuffer, sPrefix, "FileVersion");
                    sInternal_name      = GetVersionKey(cBuffer, sPrefix, "InternalName");
                    sLegal_copyright    = GetVersionKey(cBuffer, sPrefix, "LegalCopyright");
                    sLegal_trademarks   = GetVersionKey(cBuffer, sPrefix, "LegalTrademarks");
                    sOriginal_filename  = GetVersionKey(cBuffer, sPrefix, "OriginalFilename");
                    sProduct_name       = GetVersionKey(cBuffer, sPrefix, "ProductName");
                    sProduct_version    = GetVersionKey(cBuffer, sPrefix, "ProductVersion");
                    sFile_comments      = GetVersionKey(cBuffer, sPrefix, "Comments");
                 }

                 delete [] cBuffer;
              }
           }
}

char* TVerInfo::GetVersionKey(char *cBuffer, const AnsiString &sPrefix, char *cKey)
{
      char *cData;
      UINT uiDatasize;
      AnsiString sFullkey = sPrefix + "\\" + cKey;
      bool bStatus = VerQueryValue(cBuffer, sFullkey.c_str(), (void **)&cData, &uiDatasize);
      return (bStatus) ? cData : "";
}

AnsiString TVerInfo::GetVerInfo(int iID)
{
           AnsiString sRetValue;

           switch (iID)
           {
                  case VI_COMPANY_NAME      : { sRetValue = sCompany_name; break; }
                  case VI_FILE_DESCRIPTION  : { sRetValue = sFile_description; break; }
                  case VI_FILE_VERSION      : { sRetValue = sFile_version; break; }
                  case VI_INTERNAL_NAME     : { sRetValue = sInternal_name; break; }
                  case VI_LEGAL_COPYRIGHT   : { sRetValue = sLegal_copyright; break; }
                  case VI_LEGAL_TRADEMARKS  : { sRetValue = sLegal_trademarks; break; }
                  case VI_ORIGINAL_FILENAME : { sRetValue = sOriginal_filename; break; }
                  case VI_PRODUCT_NAME      : { sRetValue = sProduct_name; break; }
                  case VI_PRODUCT_VERSION   : { sRetValue = sProduct_version; break; }
                  case VI_FILE_COMMENTS     : { sRetValue = sFile_comments; break; }
                  default                   : { sRetValue = ""; }
           }

           return sRetValue;
}

LogFile erstellen (zeilenweise in eine Datei schreiben)

void __fastcall TForm1::WriteToFile(AnsiString sLine)
{
    FILE *OutputFile; //Zeiger auf das Logfile
    AnsiString sLogFileName = "test.log";

    // File wird im Modus Append (a) und Text (t) geöffnet
    if ((OutputFile = fopen(sLogFileName.c_str(), "a+t")) == NULL)
    {
        ShowMessage("Fehler beim Öffnen der Datei");
    }
    else
    {
        //Zeilenvorschub zum String hinzufügen
        sLine += "\n";

        //Zeile in die Datei 1x schreiben
        fwrite(sLine.c_str(), sLine.Length(), 1, OutputFile);

        fclose(OutputFile);
    }
}