Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Obtener el número de versión de ADO instalada

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Tips & Tricks
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Obtener el número de versión de ADO instalada Responder citando

Con esta rutina obtenemos el número de versión de ADO que tenemos instalada:

Código:
// Añadimos:  #include <memory>

String GetAdoVersion(void)
{
    String sVersion = "(desconocida)";

    HKEY hKey;
    if ( RegOpenKeyEx(HKEY_LOCAL_MACHINE,
            "Software\\Microsoft\\Windows\\CurrentVersion",
            0, KEY_QUERY_VALUE, &hKey) == ERROR_SUCCESS )
    {
        // Buscamos en el registro la localizacion
        //   del directorio de archivos comunes
        char szAdoDllPath[MAX_PATH];
        DWORD tamanyo = sizeof(szAdoDllPath);
        if ( RegQueryValueEx(hKey, "CommonFilesDir", 0, 0,
                reinterpret_cast<unsigned char*>(szAdoDllPath),
                &tamanyo) == ERROR_SUCCESS )
        {
            // Al path de archivos comunes le añadimos el de la dll
            StrCat(szAdoDllPath, "\\System\\Ado\\msado15.dll");
            if (FileExists(szAdoDllPath))
            {
                // Obtenemos el numero de version de la dll
                tamanyo = GetFileVersionInfoSize(szAdoDllPath, 0);
                if (tamanyo)
                {
                    std::auto_ptr<TMemoryStream> stream(new TMemoryStream);
                    stream->SetSize(static_cast<int>(tamanyo));
                    // Si el archivo contiene información de versión...
                    if ( GetFileVersionInfo(szAdoDllPath, 0,
                            tamanyo, stream->Memory))
                    {
                        // Extraemos la identificación de lenguaje
                        unsigned int datasize;
                        unsigned short* translation;
                        VerQueryValue(stream->Memory,
                                "\\VarFileInfo\\Translation",
                                reinterpret_cast<void**>(&translation),
                                &datasize);

                        // Creamos la cadena de consulta
                        String key = "\\StringFileInfo\\"
                                + String::IntToHex(translation[0], 4)
                                + String::IntToHex(translation[1], 4)
                                + "\\FileVersion";

                        // Extraemos la información
                        char* data;
                        if (VerQueryValue(stream->Memory, key.c_str(),
                                reinterpret_cast<void**>(&data), &datasize) )
                        {
                            sVersion = data;
                        }
                    } // if GetFileVersionInfo
                } // if tamanyo
            } // if FileExists
            else
                sVersion = "(ADO no instalado)";
        } // if RegQueryValueEx
        RegCloseKey(hKey);
    }

    return sVersion;
}


Ejemplo de uso:
    Edit1->Text = GetAdoVersion();

Las actualizaciones de ADO son gratuitas y se pueden descargar desde:
    http://www.microsoft.com/data/
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Otra forma de hacerlo, aunque la de arriba da mas detalle:
Código:
String GetAdoVersion(void)
{
    // Añadimos:  #include <ComObj.hpp> en todas las versiones,
    //   excepto en el BCB1 que tenemos que añadir #include<OleAuto.hpp>
    Variant vAdo;
    String  sVersion;
    try
    {
        vAdo = CreateOleObject("AdoDb.Connection");
        sVersion = vAdo.OlePropertyGet("Version");
    }
    catch (...)
    {
        sVersion = "(ADO no instalado)";
    }
    vAdo = Unassigned;
    return sVersion;
}

Probado con BCB1, BCB4 y BCB6 en Win95/98/ME/XP
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Yo he intentado para que sirva para cualquier ejecutable...
La idea es que uno elija un ejecutable y examine esa información...

Gracias,...
_________________
Please Response to:joseluisbz@bigfoot.com
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor MSN Messenger
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.