|
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
« en: Miércoles 3 de Junio de 2009, 05:23 »
2
« en: Jueves 21 de Mayo de 2009, 16:13 »
· Incluimos#include "winsock.h" #include "mysql.h"
· Asignamos la dependencia a la librería libmysqldProject -> 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 servidorCreamos el archivo my.ini con el siguiente contenido [libmysqld_server] datadir = C:/datadir language = C:/windows/
[libmysqld_client] language = C:/windows/ · Conectamos al servidorstatic char *server_options[] = { "mysql_test", "--defaults-file=C:/Windows/my.ini", NULL }; int num_elements = (sizeof(server_options) / sizeof(char *)) - 1; static char *server_groups[] = { "libmysqld_server", "libmysqld_client", NULL }; mysql_library_init(num_elements, server_options, server_groups); myData = mysql_init(NULL); mysql_options(myData, MYSQL_READ_DEFAULT_GROUP, "libmysqld_client"); mysql_options(myData, MYSQL_OPT_USE_EMBEDDED_CONNECTION, NULL); mysql_real_connect(myData, NULL,NULL,NULL, NULL, 0,NULL,0);
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  ), 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ónmysql_close(myData); mysql_library_end();
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 // mysql_embedded_visual.cpp : Defines the entry point for the application. // #include "stdafx.h" #include "mysql_embedded_visual.h" #include "winsock.h" #include "mysql.h" #define MAX_LOADSTRING 100 // Global Variables: HINSTANCE hInst; // current instance TCHAR szTitle[MAX_LOADSTRING]; // The title bar text TCHAR szWindowClass[MAX_LOADSTRING]; // the main window class name /* Declaramos la variable myData */ MYSQL *myData; // Forward declarations of functions included in this code module: ATOM MyRegisterClass(HINSTANCE hInstance); BOOL InitInstance(HINSTANCE, int); LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM); int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { UNREFERENCED_PARAMETER(hPrevInstance); UNREFERENCED_PARAMETER(lpCmdLine); // TODO: Place code here. MSG msg; HACCEL hAccelTable; // Initialize global strings LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING); LoadString(hInstance, IDC_MYSQL_EMBEDDED_VISUAL, szWindowClass, MAX_LOADSTRING); MyRegisterClass(hInstance); // Perform application initialization: if (!InitInstance (hInstance, nCmdShow)) { return FALSE; } hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_MYSQL_EMBEDDED_VISUAL)); // Main message loop: while (GetMessage(&msg, NULL, 0, 0)) { if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } } return (int) msg.wParam; } // // FUNCTION: MyRegisterClass() // // PURPOSE: Registers the window class. // // COMMENTS: // // This function and its usage are only necessary if you want this code // to be compatible with Win32 systems prior to the 'RegisterClassEx' // function that was added to Windows 95. It is important to call this function // so that the application will get 'well formed' small icons associated // with it. // ATOM MyRegisterClass(HINSTANCE hInstance) { WNDCLASSEX wcex; wcex.cbSize = sizeof(WNDCLASSEX); wcex.style = CS_HREDRAW | CS_VREDRAW; wcex.lpfnWndProc = WndProc; wcex.cbClsExtra = 0; wcex.cbWndExtra = 0; wcex.hInstance = hInstance; wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_MYSQL_EMBEDDED_VISUAL)); wcex.hCursor = LoadCursor(NULL, IDC_ARROW); wcex.hbrBackground = (HBRUSH)(COLOR_BTNFACE+1); wcex.lpszMenuName = MAKEINTRESOURCE(IDC_MYSQL_EMBEDDED_VISUAL); wcex.lpszClassName = szWindowClass; wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL)); return RegisterClassEx(&wcex); } // // FUNCTION: InitInstance(HINSTANCE, int) // // PURPOSE: Saves instance handle and creates main window // // COMMENTS: // // In this function, we save the instance handle in a global variable and // create and display the main program window. // BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) { HWND hWnd; hInst = hInstance; // Store instance handle in our global variable hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL); if (!hWnd) { return FALSE; } ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); return TRUE; } // // FUNCTION: WndProc(HWND, UINT, WPARAM, LPARAM) // // PURPOSE: Processes messages for the main window. // // WM_COMMAND - process the application menu // WM_PAINT - Paint the main window // WM_DESTROY - post a quit message and return // // LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { int wmId, wmEvent; PAINTSTRUCT ps; HDC hdc; switch (message) { case WM_CREATE: { static char *server_options[] = { "mysql_test", "--defaults-file=C:/Windows/my.ini", NULL }; int num_elements = (sizeof(server_options) / sizeof(char *)) - 1; static char *server_groups[] = { "libmysqld_server", "libmysqld_client", NULL }; mysql_library_init(num_elements, server_options, server_groups); myData = mysql_init(NULL); mysql_options(myData, MYSQL_READ_DEFAULT_GROUP, "libmysqld_client"); mysql_options(myData, MYSQL_OPT_USE_EMBEDDED_CONNECTION, NULL); mysql_real_connect(myData, NULL,NULL,NULL, NULL, 0,NULL,0); /* Creamos la fuente */ HFONT hfont1 = CreateFont(-11, 0, 0, 0, 400, FALSE, FALSE, FALSE, 1, 400, 0, 0, 0, ("Ms Shell Dlg 2")); /* Creamos el botón */ 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); /* Asignamos la fuente al botón */ SendMessage(hCtrl1_1, WM_SETFONT, (WPARAM)hfont1, FALSE); } case WM_COMMAND: wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); // Parse the menu selections: switch (wmId) { case IDC_OK: { mysql_query(myData,"CREATE DATABASE prueba"); break; } case IDM_ABOUT: DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About); break; case IDM_EXIT: DestroyWindow(hWnd); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } break; case WM_PAINT: hdc = BeginPaint(hWnd, &ps); // TODO: Add any drawing code here... EndPaint(hWnd, &ps); break; case WM_DESTROY: mysql_close(myData); mysql_library_end(); PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; } // Message handler for about box. INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { UNREFERENCED_PARAMETER(lParam); switch (message) { case WM_INITDIALOG: return (INT_PTR)TRUE; case WM_COMMAND: if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) { EndDialog(hDlg, LOWORD(wParam)); return (INT_PTR)TRUE; } break; } return (INT_PTR)FALSE; }
3
« 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
« 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
« 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
« 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
« 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
« 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: char aux[10]=""; // declaramos el cstring auxiliar con un tamaño de 10 posiciones strcpy(aux, A.c_str()); // copiamos a "aux" el String y para que sea un CString con el metodo c_str()
entonces te podés referir a cada posición de la cadena con el operador de la siguiente forma: if( aux[0] == '1'){ // accion si verdadero } if( aux[1] == '3'){ // accion si verdadero } if( aux[2] == '2'){ // accion si verdadero }
creo que con eso andarías bien, cualquier cosa comentanos, saludos
9
« 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
« 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
« 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
« 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) char aux[5]=""; strncpy(aux,Edit1->Text.c_str(),4); Label1->Caption= aux;
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
« 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
« 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: fstream f; f.open("archivo.txt",ios::out | ios::beg | ios::noreplace); if(f.is_open()){ f<<"Monto inicial\t"<<Edit1->Text.c_str()<<"\n"; f.close(); } else ShowMessage("El archivo ya existe");
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: fstream f; f.open("archivo.txt", ios::in); if(!f.is_open()){ f.open("archivo.txt",ios::out | ios::beg); if(f.is_open()){ f<<"Monto inicial\t"<<Edit1->Text.c_str()<<"\n"; f.close(); } else ShowMessage("No se puede abrir el archivo!!"); } else { f.close(); ShowMessage("El archivo ya existe"); }
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
« en: Viernes 20 de Octubre de 2006, 20:22 »
 No tenía idea de todo eso ... gracias Eternal Idol. Saludos
16
« 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]
|
|
|