Menú

Mostrar Mensajes

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

Mostrar Mensajes Menú

Mensajes - SubAtomicParticula

#1
Ole, campeón. Te has resuelto el tema, solo te falta cambiar la "b" por "c", jejeje.
#2
MAFUS, si sabes programar no te será dificil explicarlo tu.
#3
Esto está mal:

MCM = std::MCM(A, B);

std::MCM(A, B) no puede ser una funcion de std porque está definido como int en el programa. Seguro que este código lo has desarrollado tú?

Suerte.

PD: las conparaciónes if( A=B) deben ser if( A==B).
#4
Esto sería una sencilla traducción, claro está faltan algunas cosas como situar el cursor, etc.

using namespace std;

#include <windows.h>
#include <mmsystem.h>
#include <conio.h>

#pragma comment(lib, "Winmm.lib")

int main()
{
   char Opcion;
   printf("Menu\n");
   printf("A - Abrir Bandeja\n");
   printf("C - Cerrar Bandeja\n");
   do {
      Opcion = _getch();
   } while (Opcion != 'A' && Opcion != 'C');
   switch (Opcion) {
   case 'A':
      printf("Abriendo...\n");
      mciSendStringA("set CDAudio door open", NULL, NULL, NULL);
      printf("Abierto.\n");
      break;
   case 'C':
      printf("Cerrando...\n");
      mciSendStringA("set CDAudio door closed", NULL, NULL, NULL);
      printf("Cerrado.\n");
      break;
   }
    return 0;
}
#6
Programación C/C++ / Re: Switch y case
8 Agosto 2017, 12:41 PM
Saludos, la sentencia funciona por valores por separado pero podemos agrupar por valores al omitir break;

Caso básico sería:

switch(dia){
case 1:
Funcion1();
break;
case 2:
Funcion2();
break;
case 3:
Funcion3();
break;
------
case 30:
Funcionx();
break;
}

Caso de agrupar por valores sería:

switch(dia){
case 1:
case 2:
Funcion1y2();
break;
case 3:case 4:case 5:
Funcion345();
break;
------
case 30:
Funcionx();
break;
}

Para el caso de un rango seria incluir todos los valores:
switch(dia){
case 1:case 2:case 3:case 4:case 5: <----> case 15:
Funcion1_15();
break;
------
case 30:
Funcionx();
break;
}

También puedes hacer lo siguiente:

switch(dia){
case 30:
Funcion30();
break;
default:
Funcionx();
break;
}

Con esto conseguiríamos hacer un caso para el día 30 y el resto de los días se ejecutaría el caso por defecto (default:).

Espero haberte ayudado.
#7
Me auto respondo:

El problema está en que hay que borrar los punteros a Conexion y Tabla (_ConnectionPtr, _RecordsetPtr) y volver a crearlos e inicializarlos en cada consulta o ejecucion.

Un saludo.
#8
Saludos IrvWinchester:

El error lo tienes en la funcion agregar(), te indico el codigo modificado que funciona:

void agregar(){
   agenda *nuevo;
   nuevo = (agenda *)malloc(sizeof(agenda));         //reservando la memoria

----------------------------
   nuevo->sig= NULL;

   if(primero==NULL){
      primero=nuevo;
      ultimo=nuevo;
      // FALTA NULL A PUNTERO ANTERIOR
      nuevo->ant = NULL;
   }
   else{
      ultimo->sig=nuevo;
      // FALTA ASIGNAR EL PUNTERO ANTERIOR para en nuevo elemento
      nuevo->ant = ultimo;
      ultimo=nuevo;
   }
-------------------------------
}

Espero haberte ayudado. Un saludo.
#9
Saludos, tengo problemas para ejecutar consultas con ADO C++. Uso ADO en C++ importando la libreria:

#import "C:\\Program Files (x86)\\Common Files\\System\\ado\\msado15.dll" no_namespace rename("EOF", "EndOfFile")

El problema parece ser que las consultas se ejecutan de manera asincrona. Al eliminar un registro de la base de datos y volver a cargar la tabla no se refleja el cambio hasta pasado algún tiempo. Esto ocurre al usar el método Command->Execute(NULL, NULL, adCmdText | adExecuteNoRecords);

La conexión a la Base de datos la configuro de la siguiente manera:

// CadenaDeConexion = "Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Registry Path=;Jet
// OLEDB:Database Locking Mode=1;Data Source=Base de datos.mdb;Mode=Share Deny None;Jet
// OLEDB:Engine Type=3;Provider=""Microsoft.Jet.OLEDB.4.0"";Jet OLEDB:System database=;Jet
// OLEDB:SFP=False;persist security info=False;Extended Properties=;Jet OLEDB:Compact Without
// Replica Repair=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Create System
// Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;User ID=Admin;Jet
// OLEDB:Global Bulk Transactions=1"
CoInitialize(NULL);
Conexion.CreateInstance(__uuidof(ADO::Connection));
Conexion->Open(CadenaDeConexion, L"", L"", adConnectUnspecified);
Comando.CreateInstance(__uuidof(Command));
Comando->ActiveConnection = Conexion;

Para consultas de ejecucion uso el método:
void DB::EjecutaSQL(wchar_t SQL){
   Comando->CommandText = SQL;
   Comando->Execute(NULL, NULL, adCmdText | adExecuteNoRecords);
}
Y para obtener el recordset uso el método:
void DB::CreaTabla(wchar_t SQL) {
   Tabla.CreateInstance(__uuidof(ADO::Recordset));
   Tabla->Open((wchar_t*)SQL, (IDispatch *)Conexion, adOpenKeyset, adLockOptimistic,
   adCmdText);
}
Estoy bastante perdido, si alguién domina ADO se agradecería alguna indicación.

Gracias, un saludo.
#10
Muchas gracias, me sirve para lo que quería.

Un saludo.