• Jueves 28 de Marzo de 2024, 21:12

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - Señor X²

Páginas: [1]
1
C/C++ / Re: programa de Dijkstra en c
« en: Miércoles 3 de Junio de 2009, 05:23 »

2
C/C++ / Re: Visual C++ MySQL Server Embebido
« en: Jueves 21 de Mayo de 2009, 16:13 »
·         Incluimos
Código: C++
  1. #include "winsock.h"
  2. #include "mysql.h"
  3.  

·         Asignamos la dependencia a la librería libmysqld

Project -> Properties (ALT+F7)

Configuration Properties -> Linker -> Input

Additional Dependencies libmysqld.lib

El archivo se encuentra ubicado en: C:Archivos de programaMySQLMySQL Server 5.1EmbeddedDLLrelease o debug, respectivamente.
Si no se encuentra el archivo, ver la instalación de MySQL, ya que nos ofrece instalar o no los archivos del servidor embebido.
Entonces programa necesita el archivo libmysqld.dll para correr, de unos 6 MB.

·         Creamos en archivo de configuracion del servidor

Creamos el archivo my.ini con el siguiente contenido

 
Citar
[libmysqld_server]
datadir = C:/datadir
language = C:/windows/

[libmysqld_client]
language = C:/windows/

·         Conectamos al servidor

Código: C++
  1. static char *server_options[] = { "mysql_test", "--defaults-file=C:/Windows/my.ini", NULL };
  2. int num_elements = (sizeof(server_options) / sizeof(char *)) - 1;
  3.  
  4. static char *server_groups[] = { "libmysqld_server", "libmysqld_client", NULL };
  5.  
  6. mysql_library_init(num_elements, server_options, server_groups);
  7.  
  8. myData = mysql_init(NULL);
  9.  
  10. mysql_options(myData, MYSQL_READ_DEFAULT_GROUP, "libmysqld_client");
  11.  
  12. mysql_options(myData, MYSQL_OPT_USE_EMBEDDED_CONNECTION, NULL);
  13.  
  14. mysql_real_connect(myData, NULL,NULL,NULL, NULL, 0,NULL,0);
  15.  

Si el archivo my.ini no se encuentra en la ruta especificada ahí, la función mysql_library_init falla.

En el archivo my.ini, le especificamos 2 carpetas, datadir y language, datadir, es el directorio donde van los datos de las tablas, etc, y language, es el directorio donde se encuentra el archivo con los mensajes de errores (creo que es para eso :P), llamado errmsg.sys el mismo lo encontramos en C:Archivos de programaMySQLMySQL Server 5.1share y el idioma que querramos, yo usé el inglés, pero no creo que haya problemas para usar el español.

MUY IMPORTANTE:

La carpeta datadir, tiene que existir, mysql no la va a crear.

·         Cerramos la conexión

Código: C++
  1. mysql_close(myData);
  2. mysql_library_end();
  3.  

Por último, para realizar las consultas, basta con usar la función mysql_query en cualquier mensaje, ya sea un botón, o cuando se desee. Por supuesto, para hacer las consultas hay que seleccionar la base de datos, eso lo hacemos usando la consulta “USE prueba” o al usar mysql_real_connect en el parametro numero 5.

Acá te dejo el .cpp completo

Código: C++
  1. // mysql_embedded_visual.cpp : Defines the entry point for the application.
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include "mysql_embedded_visual.h"
  6.  
  7. #include "winsock.h"
  8. #include "mysql.h"
  9.  
  10. #define MAX_LOADSTRING 100
  11.  
  12. // Global Variables:
  13. HINSTANCE hInst;                                // current instance
  14. TCHAR szTitle[MAX_LOADSTRING];                  // The title bar text
  15. TCHAR szWindowClass[MAX_LOADSTRING];            // the main window class name
  16.  
  17. /* Declaramos la variable myData */
  18. MYSQL *myData;
  19.  
  20. // Forward declarations of functions included in this code module:
  21. ATOM                MyRegisterClass(HINSTANCE hInstance);
  22. BOOL                InitInstance(HINSTANCE, int);
  23. LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
  24. INT_PTR CALLBACK    About(HWND, UINT, WPARAM, LPARAM);
  25.  
  26.  
  27.  
  28. int APIENTRY _tWinMain(HINSTANCE hInstance,
  29.                      HINSTANCE hPrevInstance,
  30.                      LPTSTR    lpCmdLine,
  31.                      int       nCmdShow)
  32. {
  33.     UNREFERENCED_PARAMETER(hPrevInstance);
  34.     UNREFERENCED_PARAMETER(lpCmdLine);
  35.  
  36.     // TODO: Place code here.
  37.     MSG msg;
  38.     HACCEL hAccelTable;
  39.  
  40.     // Initialize global strings
  41.     LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
  42.     LoadString(hInstance, IDC_MYSQL_EMBEDDED_VISUAL, szWindowClass, MAX_LOADSTRING);
  43.     MyRegisterClass(hInstance);
  44.  
  45.     // Perform application initialization:
  46.     if (!InitInstance (hInstance, nCmdShow))
  47.     {
  48.         return FALSE;
  49.     }
  50.  
  51.     hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_MYSQL_EMBEDDED_VISUAL));
  52.  
  53.     // Main message loop:
  54.     while (GetMessage(&msg, NULL, 0, 0))
  55.     {
  56.         if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
  57.         {
  58.             TranslateMessage(&msg);
  59.             DispatchMessage(&msg);
  60.         }
  61.     }
  62.  
  63.     return (int) msg.wParam;
  64. }
  65.  
  66.  
  67.  
  68. //
  69. //  FUNCTION: MyRegisterClass()
  70. //
  71. //  PURPOSE: Registers the window class.
  72. //
  73. //  COMMENTS:
  74. //
  75. //    This function and its usage are only necessary if you want this code
  76. //    to be compatible with Win32 systems prior to the 'RegisterClassEx'
  77. //    function that was added to Windows 95. It is important to call this function
  78. //    so that the application will get 'well formed' small icons associated
  79. //    with it.
  80. //
  81. ATOM MyRegisterClass(HINSTANCE hInstance)
  82. {
  83.     WNDCLASSEX wcex;
  84.  
  85.     wcex.cbSize = sizeof(WNDCLASSEX);
  86.  
  87.     wcex.style          = CS_HREDRAW | CS_VREDRAW;
  88.     wcex.lpfnWndProc    = WndProc;
  89.     wcex.cbClsExtra     = 0;
  90.     wcex.cbWndExtra     = 0;
  91.     wcex.hInstance      = hInstance;
  92.     wcex.hIcon          = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_MYSQL_EMBEDDED_VISUAL));
  93.     wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);
  94.     wcex.hbrBackground  = (HBRUSH)(COLOR_BTNFACE+1);
  95.     wcex.lpszMenuName   = MAKEINTRESOURCE(IDC_MYSQL_EMBEDDED_VISUAL);
  96.     wcex.lpszClassName  = szWindowClass;
  97.     wcex.hIconSm        = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
  98.  
  99.     return RegisterClassEx(&wcex);
  100. }
  101.  
  102. //
  103. //   FUNCTION: InitInstance(HINSTANCE, int)
  104. //
  105. //   PURPOSE: Saves instance handle and creates main window
  106. //
  107. //   COMMENTS:
  108. //
  109. //        In this function, we save the instance handle in a global variable and
  110. //        create and display the main program window.
  111. //
  112. BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
  113. {
  114.    HWND hWnd;
  115.  
  116.    hInst = hInstance; // Store instance handle in our global variable
  117.  
  118.    hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
  119.       CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
  120.  
  121.    if (!hWnd)
  122.    {
  123.       return FALSE;
  124.    }
  125.  
  126.    ShowWindow(hWnd, nCmdShow);
  127.    UpdateWindow(hWnd);
  128.  
  129.    return TRUE;
  130. }
  131.  
  132. //
  133. //  FUNCTION: WndProc(HWND, UINT, WPARAM, LPARAM)
  134. //
  135. //  PURPOSE:  Processes messages for the main window.
  136. //
  137. //  WM_COMMAND  - process the application menu
  138. //  WM_PAINT    - Paint the main window
  139. //  WM_DESTROY  - post a quit message and return
  140. //
  141. //
  142. LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
  143. {
  144.     int wmId, wmEvent;
  145.     PAINTSTRUCT ps;
  146.     HDC hdc;
  147.  
  148.     switch (message)
  149.     {
  150.     case WM_CREATE:
  151.         {
  152.  
  153.             static char *server_options[] = { "mysql_test", "--defaults-file=C:/Windows/my.ini", NULL };
  154.             int num_elements = (sizeof(server_options) / sizeof(char *)) - 1;
  155.  
  156.             static char *server_groups[] = { "libmysqld_server",
  157.                                              "libmysqld_client",
  158.                                              NULL };
  159.  
  160.             mysql_library_init(num_elements, server_options, server_groups);
  161.  
  162.             myData = mysql_init(NULL);
  163.  
  164.             mysql_options(myData, MYSQL_READ_DEFAULT_GROUP, "libmysqld_client");
  165.             mysql_options(myData, MYSQL_OPT_USE_EMBEDDED_CONNECTION, NULL);
  166.  
  167.             mysql_real_connect(myData, NULL,NULL,NULL, NULL, 0,NULL,0);
  168.  
  169.             /* Creamos la fuente */
  170.             HFONT hfont1 = CreateFont(-11, 0, 0, 0, 400, FALSE, FALSE, FALSE, 1, 400, 0, 0, 0, ("Ms Shell Dlg 2"));
  171.             /* Creamos el botón */
  172.             HWND hCtrl1_1 = CreateWindowEx(0, "BUTTON", ("Aceptar"), WS_VISIBLE | WS_CHILD | WS_TABSTOP | BS_PUSHBUTTON, 567, 380, 95, 24, hWnd, (HMENU)IDC_OK, hInst, 0);
  173.             /* Asignamos la fuente al botón */
  174.             SendMessage(hCtrl1_1, WM_SETFONT, (WPARAM)hfont1, FALSE);
  175.         }
  176.  
  177.     case WM_COMMAND:
  178.         wmId    = LOWORD(wParam);
  179.         wmEvent = HIWORD(wParam);
  180.         // Parse the menu selections:
  181.         switch (wmId)
  182.         {
  183.         case IDC_OK:
  184.             {
  185.                 mysql_query(myData,"CREATE DATABASE prueba");
  186.                 break;
  187.             }
  188.         case IDM_ABOUT:
  189.             DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
  190.             break;
  191.         case IDM_EXIT:
  192.             DestroyWindow(hWnd);
  193.             break;
  194.         default:
  195.             return DefWindowProc(hWnd, message, wParam, lParam);
  196.         }
  197.         break;
  198.     case WM_PAINT:
  199.         hdc = BeginPaint(hWnd, &ps);
  200.         // TODO: Add any drawing code here...
  201.         EndPaint(hWnd, &ps);
  202.         break;
  203.     case WM_DESTROY:
  204.  
  205.         mysql_close(myData);
  206.         mysql_library_end();
  207.  
  208.         PostQuitMessage(0);
  209.         break;
  210.     default:
  211.         return DefWindowProc(hWnd, message, wParam, lParam);
  212.     }
  213.     return 0;
  214. }
  215.  
  216. // Message handler for about box.
  217. INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
  218. {
  219.     UNREFERENCED_PARAMETER(lParam);
  220.     switch (message)
  221.     {
  222.     case WM_INITDIALOG:
  223.         return (INT_PTR)TRUE;
  224.  
  225.     case WM_COMMAND:
  226.         if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
  227.         {
  228.             EndDialog(hDlg, LOWORD(wParam));
  229.             return (INT_PTR)TRUE;
  230.         }
  231.         break;
  232.     }
  233.     return (INT_PTR)FALSE;
  234. }
  235.  
  236.  

3
C/C++ / Re: Visual C++ MySQL Server Embebido
« en: Martes 5 de Mayo de 2009, 15:41 »
bueno, después de un tiempo pude hacerlo andar, si a alguien le interesa, avisen

4
C/C++ / Visual C++ MySQL Server Embebido
« en: Martes 31 de Marzo de 2009, 23:45 »
Hola, hace un tiempo programo en Visual C++ 2008 usando las API y accediendo a MySQL también por medio de las API, hasta ahí todo bien, el tema es que ahora quiero usar la opción de servidor embebido haciando uso de la librería libmysqld.dll, para no tener que instalar MySQL en cada máquina donde voy a ejecutar mis programas. Pero no he podido hacerlo andar, hace un par de semanas ya que vengo renegando con esto y no he podido hacerlo andar.

Encontré mucha información, pero toda para Linux y lo que me interesa es sobre windows.

En esta página hay un tutorial que lo explica en windows y el linux, pero no he podido hacerlo andar, se produce un error en tiempo de ejecución y se cierra todo

hxxp://shivasdairy.blogspot.com/2007/01 ... erver.html
(puse hXXp porque no tengo privilegios para publicar enlaces) perdón si no se puede

Muchas Gracias

5
C++ Builder / Re: Mostrar Jpg En Timage
« en: Lunes 25 de Febrero de 2008, 16:17 »
aaaaaaajajajajajaj mirá donde nos encontramos !!!!!
no te puedo creer que era con ese header nomás !!!! había puesto con el loadfromfile, el igual, no andaba con nada .. con ese header listo !!

gracias shanky, un abrazo

6
C++ Builder / Mostrar Jpg En Timage
« en: Sábado 23 de Febrero de 2008, 06:37 »
hola a todos, resulta que tengo un componente TImage y si en tiempo de ejecución pongo que Image1->Picture = imagen.jpg me da un error, como que no soporta ese formato, pero si lo hago desde las propiedades del componente con el Inspector de Objetos antes de compilar, soporta jpg ... quería saber como hacer para que pueda hacerlo en tiempo de ejecución, o sino de alguna otra forma

gracias, saludos

7
C++ Builder / Abrir Archivo .chm
« en: Lunes 26 de Febrero de 2007, 05:08 »
Hola, tengo mi archivo de ayuda en formato .CHM y quisiera saber como hago para que cuando haga click en el menú Ayuda > Ver Manual me abra el documento CHM

EDIT:

acabo de encontrar que se puede hacer con:

ShellExecute(Handle,"open","ruta-fichero.chm",NULL,NULL,SW_SHOWNORMAL);

y me anda bien

Muchas Gracias

8
C++ Builder / Re: Manejo De Archivos
« en: Viernes 8 de Diciembre de 2006, 06:44 »
hola, creo que la forma más fácil sería con el operador [],  por ejemplo, si tenés la cadena A (fijate si la cadena es de tipo String o CString, las CString permiten el uso del operador [], de no ser así, tendrías que convertirla a CString, con el método c_str(): por ejemplo:

si tenés la cadena en un string:
Código: Text
  1.  
  2. char aux[10]="";    // declaramos el cstring auxiliar con un tamaño de 10 posiciones
  3. strcpy(aux, A.c_str());    // copiamos a "aux" el String y para que sea un CString con el metodo c_str()
  4.  
  5.  
entonces te podés referir a cada posición de la cadena con el operador de la siguiente forma:
Código: Text
  1.  
  2. if( aux[0] == '1'){
  3. // accion si verdadero
  4. }
  5.  
  6. if( aux[1] == '3'){
  7. // accion si verdadero
  8. }
  9.  
  10. if( aux[2] == '2'){
  11. // accion si verdadero
  12. }
  13.  
  14.  

creo que con eso andarías bien, cualquier cosa comentanos, saludos

9
C++ Builder / Re: Comparar Fechas
« en: Jueves 7 de Diciembre de 2006, 08:00 »
Te comento que me anduvo perfecto, muchas gracias. No había probado usar el TDateTimePicker, yo estaba usando la clase TDateTime y ponía la fecha en los Edit, y no encontraba como comparar .. pero con esto ya estoy perfecto.

La razón por la que quiero hacer una búsqueda de esta manera es que yo tengo guardado en un archivo unas facturas, con descripcion, etc .. una de los elementos es la fecha .. entonces levanto la fecha del archivo, comparo con las fechas inicial y final y veo las facturas que coincidan.

Muchas gracias de nuevo por la respuesto.

Saludos

p/d: perdón la demora en responder

10
C++ Builder / Re: Comparar Fechas
« en: Miércoles 6 de Diciembre de 2006, 19:28 »
Perdón .. no me di cuenta de no aclarar más las cosas.
Tengo 3 Edit, el primero tiene el campo Desde, el segundo el campo Hasta y el tercero la fecha a buscar. No tengo problemas en separarlos en enteros o algo así .. el formato de la fecha es por ejemplo: 06/12/2006

11
C++ Builder / Comparar Fechas
« en: Miércoles 6 de Diciembre de 2006, 15:33 »
Hola, hace un par de días vengo con este problema.
Necesito Comparar fechas, por ejemplo, tengo 3 fechas, Fecha_Inicial, Fecha_Final, Fecha1. Lo que quiero es comparar las fechas para saber si Fecha1 está entre Fecha_Inicial y Fecha_Final.

Espero puedan ayudarme, me tiene frenado hace bastante,
Gracias, Saludos

12
C++ Builder / Re: Dar Formato A Un Float Tipo 2.325242
« en: Domingo 19 de Noviembre de 2006, 06:52 »
Hola, tenía un problema parecido y lo resolví usando un arrelgo de caracteres (aux) y la función STRNCPY (Copia N caracteres)
Código: Text
  1.  
  2. char aux[5]="";
  3. strncpy(aux,Edit1->Text.c_str(),4);
  4. Label1->Caption= aux;
  5.  
  6.  

entonces ahí definimos el arreglo auxiliar, copiamos 4 caracteres del Edit1 (el método .c_str() nos deja el AnsiString en un arreglo de caracteres) al arreglo aux y finalmente asignamos aux a un Label.

Espero te sirva.
Saludos

p/d: no lo probé a esto, pero supongo que anda, igualmente la idea la tenés .. cualquier cosa comentame, y decime también si te anduvo.

13
C++ Builder / Re: Cómo Saber Si Un Archivo Existe?
« en: Martes 31 de Octubre de 2006, 16:09 »
Muchas Gracias Boheme y Ethernal Idol por las respuestas, me parece que voy a usar FileExists y voy a tener en cuenta que no funciona si no es borland.

Muchas Gracias
Saludos

14
C++ Builder / Cómo Saber Si Un Archivo Existe?
« en: Martes 31 de Octubre de 2006, 05:52 »
Hola amigos, me está matando un tema que no pensé que se me iba a hacer tan complicado, lo que quiero hacer es abrir el archivo y escribirle una linea, pero si el archivo existe, ignorar eso, tengo el siguiente codigo, a ver si me pueden marcar el error o decirme alguno nuevo, no tengo problemas:

Código: Text
  1.  
  2.   fstream f;
  3.  
  4.   f.open("archivo.txt",ios::out | ios::beg | ios::noreplace);
  5.     if(f.is_open()){
  6.       f<<"Monto inicial\t"<<Edit1->Text.c_str()<<"\n";
  7.       f.close();
  8.   } else ShowMessage("El archivo ya existe");
  9.  
  10.  
Con este código, me escribe el archivo siempre, como si el ios::noreplace no anduviera.


Es la primera vez que uso el ios::noreplace, puede que mi error esté ahí.
También probé con este código:
Código: Text
  1.  
  2.   fstream f;
  3.  
  4.   f.open("archivo.txt", ios::in);
  5.   if(!f.is_open()){
  6.     f.open("archivo.txt",ios::out | ios::beg);
  7.     if(f.is_open()){
  8.       f<<"Monto inicial\t"<<Edit1->Text.c_str()<<"\n";
  9.       f.close();
  10.     } else ShowMessage("No se puede abrir el archivo!!");
  11.   }  else {
  12.       f.close();
  13.       ShowMessage("El archivo ya existe");
  14.   }
  15.  
  16.  
Lo que intento hacer ahí, es abrir el archivo solo para leerlo, si eso da error, lo abro para escritura y lo creo.
Y con este código no lo escribe nunca al archivo, pero si detecta si existe o no.

Muchas Gracias
Saludos

15
C/C++ / Re: Como Ejecutar Otro Programa Desde El Mio.
« en: Viernes 20 de Octubre de 2006, 20:22 »
:o  No tenía idea de todo eso ... gracias Eternal Idol.

Saludos

16
C/C++ / Re: Como Ejecutar Otro Programa Desde El Mio.
« en: Viernes 20 de Octubre de 2006, 04:24 »
Yo terminé usando este:

WinExec("archivo.exe", SW_SHOWNORMAL);

para lo que yo necesitaba me sirvió, capaz te sirve a vos también.

Saludos

Páginas: [1]