• Jueves 14 de Noviembre de 2024, 22:45

Autor Tema:  Como Puedo Linkar Una Base De Datos Access?  (Leído 1219 veces)

Getovich

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Como Puedo Linkar Una Base De Datos Access?
« en: Lunes 7 de Junio de 2004, 16:54 »
0
hola ante todo saludos para todos los del foro, bueno mi problema es que tengo que usar una base de datos access (*.mdb) y no se como lograr una conexion desde c++, tengo el compilador visual c++ pero no quiero usar MFC la aplicacion es win32 api calls, como puedo hacer? si tienen algun ejemplo pequeño para ver las decaraciones y las cabeceras y que libreria usa. gracias por su ayuda si necesitan mas detalles pregunten.

nostromo

  • Miembro MUY activo
  • ***
  • Mensajes: 134
    • Ver Perfil
    • http://win32cpp.cjb.net
Re: Como Puedo Linkar Una Base De Datos Access?
« Respuesta #1 en: Lunes 26 de Julio de 2004, 23:57 »
0
Hola;

Por el momento tengo cóodigo pero en forma consola:

1.- Primer ejemplo:
Código: Text
  1.  
  2. #include<stdio.h>
  3. #include"C:\Program Files\Microsoft Visual Studio\VC98\mfc\SRC\stdafx.h"
  4.  
  5. #import "c:\program files\common files\system\ado\msado15.dll" rename("EOF", "EOFile")
  6.  
  7. struct StartOLEProcess
  8. {
  9.   StartOLEProcess()
  10.   {
  11.     ::CoInitialize(NULL);
  12.   }
  13.   ~StartOLEProcess()
  14.   {
  15.     ::CoUninitialize();
  16.   }
  17. } _start_StartOLEProcess;
  18.  
  19. void main(void)
  20. {
  21.   ADODB::_ConnectionPtr con = NULL;
  22.   ADODB::_RecordsetPtr rec = NULL;
  23.   ADODB::FieldPtr pAuthor;
  24.   _variant_t vAuthor;
  25.   char sAuthor[40];
  26.   HRESULT hr = S_OK;
  27.   char File[255], ConStr[500];
  28.   VARIANT *vRecordsAffected = NULL;
  29.   int ctr;
  30.  
  31.   printf("\nEnter Database Path and File name: ");
  32.   fgets(File, 250, stdin);
  33.   for (ctr = 0; (unsigned int)ctr < strlen(File); ctr++)
  34.   {
  35.     if (File[ctr] == '\n')
  36.     {
  37.       File[ctr] = '\0';
  38.       break;
  39.     }
  40.   }
  41.   ConStr[0] = '\0';
  42.   strcat(ConStr, "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=");
  43.   strcat(ConStr, File);
  44.  
  45.   hr = con.CreateInstance(__uuidof(ADODB::Connection));
  46.   printf("\nCreateInstance result= %d uuidof= %d\n", hr, __uuidof(ADODB::Connection));
  47.   printf("\nConnection object created.");
  48.  
  49.   con->Open(ConStr, "", "", 0);
  50.  
  51.   printf("\nConnection opened.");
  52.  
  53.   printf("\nEnter Database table name: ");
  54.   fgets(File, 250, stdin);
  55.   for (ctr = 0; (unsigned int)ctr < strlen(File); ctr++)
  56.   {
  57.     if (File[ctr] == '\n')
  58.     {
  59.       File[ctr] = '\0';
  60.       break;
  61.     }
  62.   }
  63.   ConStr[0] = '\0';
  64.   strcat(ConStr, "SELECT * FROM ");
  65.   strcat(ConStr, File);
  66.   rec = con->Execute(ConStr, vRecordsAffected, 1);
  67.  
  68.   printf("\nSQL statement processed");
  69.  
  70.   printf("\nEnter Database field name: ");
  71.   fgets(File, 250, stdin);
  72.   for (ctr = 0; (unsigned int)ctr < strlen(File); ctr++)
  73.   {
  74.     if (File[ctr] == '\n')
  75.     {
  76.       File[ctr] = '\0';
  77.       break;
  78.     }
  79.   }
  80.   pAuthor = rec->Fields->GetItem(File);
  81.  
  82.   if ((pAuthor->Type == 202)||(pAuthor->Type == 203))
  83.   {
  84.     printf("\nGetting data now...\n");
  85.  
  86.     while (!rec->EOFile)
  87.     {
  88.       vAuthor.Clear();
  89.       vAuthor = pAuthor->Value;
  90.       WideCharToMultiByte(CP_ACP, 0, vAuthor.bstrVal, -1, sAuthor, sizeof(sAuthor), NULL, NULL);
  91.  
  92.       printf("\n%s", sAuthor);
  93.       rec->MoveNext();
  94.     }
  95.     printf("\n\nEnd of data.");
  96.   }
  97.   else
  98.   {
  99.     if ((pAuthor->Type == 11)||(pAuthor->Type == 7))
  100.     {
  101.       printf("\nGetting data now...\n");
  102.  
  103.       while (!rec->EOFile)
  104.       {
  105.         vAuthor.Clear();
  106.         vAuthor = pAuthor->Value;
  107.  
  108.         printf("\n%d", vAuthor.boolVal);
  109.         rec->MoveNext();
  110.       }
  111.       printf("\n\nEnd of data.");
  112.     }
  113.     else
  114.     {
  115.       if (pAuthor->Type == 2)
  116.       {
  117.         printf("\nGetting data now...\n");
  118.  
  119.         while (!rec->EOFile)
  120.         {
  121.           vAuthor.Clear();
  122.           vAuthor = pAuthor->Value;
  123.  
  124.           printf("\n%d", vAuthor.intVal);
  125.           rec->MoveNext();
  126.         }
  127.         printf("\n\nEnd of data.");
  128.       }
  129.       else
  130.       {
  131.         printf("\nUnable to handle that data type, %d", pAuthor->Type);
  132.       }
  133.     }
  134.   }
  135.  
  136.   rec->Close();
  137.   rec = NULL;
  138.  
  139.   printf("\nClosed and removed recordset object.");
  140.  
  141.   con->Close();
  142.   con = NULL;
  143.  
  144.   printf("\nClosed and removed connection object.");
  145.  
  146.   return;
  147. }
  148.  
  149.  

2.- Access MDB Compatibility:C, C++ (general), Microsoft Visual C++
To open MS Access or Ms SQL server database using C/C++ or VC++


Código: Text
  1.  
  2. //**************************************
  3. //    
  4. // Name: Access MDB
  5. // Description:To open MS Access or Ms S
  6. //     QL server database using C/C++ or VC++
  7. // By: Mokarrabin A Rahman
  8. //
  9. // Returns:Shows some recordsets
  10. //
  11. // Assumes:Change the name of the databa
  12. //     se to any database and place it in the s
  13. //     ame directory as the .exe. You shoul als
  14. //     o change the SQL to your particular data
  15. //     base. You may change the connect string
  16. //     to connect to MS SQL Server.
  17. //
  18. // Side Effects:Great
  19. //
  20. //This code is copyrighted and has
  21. // limited warranties.Please see http://
  22. //     www.Planet-Source-Code.com/vb/scripts/Sh
  23. //     owCode.asp?txtCodeId=1371&lngWId=3
  24. //for details.
  25. //**************************************
  26. //    
  27.  
  28. #import "c:\Program Files\Common Files\System\ADO\msado15.dll" \
  29. no_namespace rename("EOF", "EndOfFile")
  30. // This code comes from : www.geocities.
  31. //     com/mokarrabin
  32. #include <stdio.h>
  33. #include <iostream.h>
  34. void main(void)
  35.  
  36.  
  37.     {
  38.     CoInitialize(NULL);
  39.     try
  40.  
  41.  
  42.         {
  43.         _RecordsetPtr pRst("ADODB.Recordset");
  44.         // Connection String
  45.         _bstr_t strCnn("DRIVER={Microsoft Access Driver (*.mdb)};UID=admin;DBQ=GBOOK.mdb");
  46.            // Open table
  47.           pRst->Open("SELECT * FROM ProductService where ProductService like '%samir%';", strCnn, adOpenStatic, adLockReadOnly, adCmdText);
  48.            
  49.            pRst->MoveFirst();
  50.  
  51.  
  52.                while (!pRst->EndOfFile) {
  53.                  cout<<(char*) ((_bstr_t) pRst->GetFields()->GetItem("ProductService")->GetValue())<<endl;
  54.                  pRst->MoveNext();
  55.                }
  56.                pRst->Close();
  57.                
  58.         }
  59.         catch (_com_error &e)
  60.  
  61.  
  62.             {
  63.             cout<<(char*) e.Description();
  64.         }
  65.         ::CoUninitialize();
  66.     }
  67.  
  68.  

3.- Database Access - beta
Compatibility:C++ (general), Microsoft Visual C++


ZIP : Database_A1505751212002.zip

Nos vemos, espero que te sirva en Win32 Aplicación aún no encuentro nada.
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.

Getovich

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Re: Como Puedo Linkar Una Base De Datos Access?
« Respuesta #2 en: Martes 3 de Agosto de 2004, 14:56 »
0
Gracias por tu respuesta, baje ese codigo de la pagina del msdn, es una buena alternativa, gracias de todas formas, lo hice con creando un DSN con el driver de Microsoft Access, usando las librerias por defecto de win32 para la conexion ODBC (odbc32.lib) Tema en ayuda>Calling ODBC API Functions Directly.