• Jueves 2 de Mayo de 2024, 00: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 - softevolutions

Páginas: 1 2 [3] 4
51
C++ Builder / Re: Comunicacion serie con centralita siemens h150e
« en: Martes 12 de Octubre de 2010, 12:24 »
Ya he resuelto el problema:

La lectura del puerto es como siempre se ha hecho, con una lectura a un Comm estandar.

Código: C++
  1.   HANDLE hSer;
  2.   COMMTIMEOUTS ctmoNew, ctmoOld;
  3.   char InBuff[500];
  4.   DWORD dwBytesRead;
  5.  
  6.       if( !ReadFile(hSer, InBuff, sizeof(InBuff), &dwBytesRead, NULL) ) {
  7.         ShowMessage( "ERROR: " + String(GetLastError()) );
  8.       }
  9.       else {
  10.         if( dwBytesRead > 0 ) {
  11.           ShowMessage( String(InBuff).Trim() );    
  12.           for( int i=0; i<500; i++) InBuff[0] = ' ';
  13.           PurgeComm(hSer,PURGE_TXCLEAR);      
  14.         }
  15.       }
  16.  
  17.  

Lo que he puesto aquí es mas o menos orientativo, ya que mi codigo real son algunas lineas mas, ya que entre otras cosas, tengo que interpretar lo que devuelve en la varialbe InBuff.

Bueno, el caso por el que no podia obtener nada del puerto en un principio es por que la dichosa centralita está configurada para "contestar" por el puerto Comm SOLO a la aplicación del fabricante, así que por eso a mi no me devolvia nada, a pesar de tener el codigo 100% correcto.

Al final se solucionó facilmente, usando una aplicación de configuración de centralitas llamado "Siemens HICOM 150  E  OFFICE Handbuch und Assistant E".

Con este software puede configurar cambiando el valor de un desplegable para indicarle a la centralita que emitiese también por el Comm correspondiente.

Con eso se solucionaron todos mis problemas con la centralita.

De todas formas, si necesitais mas información al respecto, me lo comentais.

52
C++ Builder / Re: no guardar registro hasta que se llenen todos los campos
« en: Lunes 27 de Septiembre de 2010, 10:07 »
Revisa el contenido de los TEdit y evalua su volor según necesites en cada uno.

Si por ejemplo, si es un texto a rellenar obligatorio, en tu función pon algo como esto:

Código: C++
  1. if( miedit->Text.IsEmpty() ) {
  2.      ShowMessage("campo obligatorio");
  3.      return;
  4. }
  5.  

53
C++ Builder / Re: Como puedo hacer esto
« en: Lunes 20 de Septiembre de 2010, 17:52 »
Prueba con el evento OnEnter del TBitBtn

54
C++ Builder / Re: BORLAND C
« en: Miércoles 15 de Septiembre de 2010, 11:48 »
Exactamente ... ¿donde te quedas te parado?

Intenta ser un poco mas cocreto para que podamos ayudarte.

¿Tienes problemas al definir funciones, estructuras .... ?

un saludo

55
C++ Builder / Re: MaskEdit
« en: Viernes 10 de Septiembre de 2010, 10:46 »
¿Que es la Curp?

56
C++ Builder / Re: Guardar
« en: Lunes 6 de Septiembre de 2010, 11:14 »
En el segundo formulario, debes añadir el fichero de cabecear .h del primer formulario, así podrás acceder a todos sus componentes publicos.

Te quedaria algo así para acceder:

//del formulario 2, donde esta el boto guardar:
Edit1->Text
Edit2->Text
//del formulario 1
Form1->Edit1->Text


así podras acceder sin problemas

57
C++ Builder / Re: Boton maximizar de un formulario
« en: Viernes 27 de Agosto de 2010, 10:40 »
Buenas Gared12

La propiedad autosize de los TForm es para que el formulario se dimensione automaticamente según el contenido del mismo.

Para que el formulario no se maximice ni cambie de tamaño y se quede con el tamaño de diseño, lo que hay que hacer es poner la propiedad BorderStyke a bsToolWindow si quieres que se pueda cerrar o a bsNone si no quieres que aparezca el borde del formulario.

Pero si lo único que quieres es que no este el boton de maximixar, usa el siguiente codigo

miformjulario->BorderIcons = TTBorderIcons() >> biMaximize;


un saludo

58
MySQL / Re: Cambios en BBDD
« en: Jueves 12 de Agosto de 2010, 11:00 »
Crea una aplicación que instalarias en el servidor, que seria la encargada de recibir las modificaciones para la base de datos, tratarlas y ejecutarlas en tu SGBD, ese mismo programa se encargaría de avisar a quien corresponda de que se ha realizado una modificacion en la base de datos

Podrias usar mensajeria mediante Socket. Asì sólo habría comunicación cuando se produzca un cambio de la base de datos.

59
C++ Builder / Re: Concatenacion
« en: Jueves 12 de Agosto de 2010, 10:53 »
¿cual es el objeto de tener esas tres variables?

Si el texto que quieres buscar está en el Edit y, la informacion esta en base de datos, si usas ADO, no tienes problemas: ADODataSet->Locate

¿Las tres variables son AnsiString?

¿Que te dice el mensaje de error? Literalmente

Intenta ser un poco mas concreto para que te podamos ayudar mejor

60
C++ Builder / Re: como saber el tamaño de un fichero
« en: Jueves 12 de Agosto de 2010, 10:48 »
Prueba con la función de la API de windows GetFileSize

GetFileSize(hFile,NULL)

hFile es un handle al fichero en cuestion

61
MySQL / Re: Duda calculo Fechas
« en: Miércoles 21 de Julio de 2010, 08:38 »
Filtra con WHERE los registros que superen las 18:00 horas en la misma consulta que muestras

62
C++ Builder / Re: Comunicacion serie con centralita siemens h150e
« en: Jueves 1 de Julio de 2010, 11:02 »
Gracias por la respuesta, pero ya lo he intentado y ha sido .... imposible. También lo he intentado con el distribuidor oficial de la zona y lo único que he conseguido es que comenten que la comunicación es facil, que lea TODO lo que haya y que me será facil deducir la estructura de datos que devuelve.

La semana que viene empiezo a trabajar con la centralita y cuando consiga tenerlo listo, lo publicaré como articulo en el foro (si es que puedo, claro), por si le sirve de ayuda a alguien mas.

Un saludo

63
SQL Server / Re: Problema con COUNT
« en: Lunes 21 de Junio de 2010, 17:18 »
No entiendo muy bien lo que quieres hacer. Cuando haces un COUNT, cuentas el número de registros que devuelve la consulta, independientemente de las columnas que tenga dicha consulta.

Sería algo así:

SELECT COUNT(*) cuantos FROM pesos AS p, optimas AS o,htargets AS h WHERE o.codigo = p.codOptima AND  o.linea = 'L01S' AND o.tubo LIKE '%' AND p.fecha BETWEEN '2010-06-18 09:00' AND '2010-06-18 09:30' AND p.hora='9:00 - 9:30'AND h.codoptima = o.codigo AND h.hora='9:00 - 9:30'

Explica un poco mejor que necesitas a ver si podemos hecharte una mano.

64
C++ Builder / Re: Indicar con check
« en: Jueves 17 de Junio de 2010, 17:27 »
Puedes usar variosr TCheckBox, uno para cada tarea que se esté realizando.

En algunos casos, yo uso una alternativa:

Pones diferentes TLabel en vertical, uno por cada tarea. Ahora usas un TImage, donde cargarás una imagen, la que quieras, que indique "realizado" o "realizando". Y mediante código, una vez realizado una operación, le pones a la izquierda esa imagen.

Yo uso dos imagenes, una para tarea "no realizada" y "otra para tarea "realizada". Hechale un poco de imaginación y verás que te queda bastante curioso.

65
C++ Builder / Comunicacion serie con centralita siemens h150e
« en: Martes 15 de Junio de 2010, 11:18 »
Necesito obtener información de llamadas de una centralita siemens h150e. No he encontrado documentación sobre las estructuras que emite la centralita. Si puedo conectarme, pero no se que estructuras debo obtener. ¿Alguno ha trabajado ya con alguna centralita?.

Gracias de antemano

66
C++ Builder / Re: Duda con ADOQuery?
« en: Jueves 10 de Junio de 2010, 11:44 »
Disculpa pero no veo error aparente en el codigo, y tampoco vi el Insert(), por eso te comente lo del Append().

En que linea te salta el error?. cuando activas el dataset?. Hay algún apostrofe en el campo Evaluación?, en el ComboBox

67
C++ Builder / Re: Obtener nombre de archivo con el OpenDialog?
« en: Miércoles 9 de Junio de 2010, 11:11 »
Usa esto para obtener el nombre del fichero:
ExtractFileName(OpenDialog1->FileName);


Para obtener solo la ruta:
ExtractFilePath(OpenDialog1->FileName);


Para obtener la extensión (con el '.'):
ExtractFileExt(OpenDialog1->FileName);

68
C++ Builder / Re: Duda con ADOQuery?
« en: Miércoles 9 de Junio de 2010, 11:08 »
para añadir un nuevo registro, te falta la sentencia

Tabla->Append();

Puego añades los valores y por ultimo

Tabla->Post();

69
C++ Builder / Re: Duda con ADOQuery?
« en: Martes 8 de Junio de 2010, 09:05 »
Pon el trozo de código completo, pues así no puedo ver la palabra "Trimestre" para ver cual es el error.

70
C++ Builder / Re: Duda con ADOQuery?
« en: Lunes 7 de Junio de 2010, 10:28 »
Tienes un error en la SQL que le indicas en el TADODataSet

//MAL
ADODataSet7->CommandText = "select count(*) cuantos from Tabla_Prueba where [Año] = " + parametro1 + " Localidad = '" + parametro2 + "' Evaluacion = "  + parametro3;


//BIEN
ADODataSet7->CommandText = "select count(*) cuantos from Tabla_Prueba where [Año] = " + parametro1 + " AND Localidad = '" + parametro2 + "' AND Evaluacion = "  + parametro3;
//Te faltaban los AND en la evaluación del WHERE

71
C++ Builder / Re: Duda con ADOQuery?
« en: Domingo 6 de Junio de 2010, 14:47 »
"cuantos" dentro de la consulta SQL no es más de el nombre que le he dado al resultado de la función de agregado "count". He revisado el codigo y no tiene por que darte error. Es un literal que debe ir entre comillas, ya que hace referencia a un nombre de campo de la SQL.

FieldByName("cuantos") es una función de TADODataSet que sirve para devolver un objeto de tipo TField del campo que le hayas indicado entre comillas.

El componente TADODataSet es mucho más versatil que TADOQuery. Yo lo uso y me da muy buenos resultados.

Mi consulta anterior te daba un par de formas de como realizar lo que necesitabas. Si no es lo que buscar, por favor, se un poco más preciso y te ayudaremos en tu problema.

72
C++ Builder / Re: Intermitencias
« en: Jueves 3 de Junio de 2010, 09:11 »
Un par de cosas:

1) en el if, has metido una asignación y no una comparación
2) Tienes que cambiar el sitio donde cambias el valor de "m", ya que el cambio SOLO lo hará una vez o ninguna.

Te dejo una sugerencia para evitar el uso de una variable intermedia "m"

void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
     if (Shape1->Brush->Color == clYellow) {
          Shape1->Brush->Color = clRed;
          Shape2->Brush->Color = clYellow;
     }
     else {
          Shape1->Brush->Color = clYellow;
          Shape2->Brush->Color = clRed;
     }
}

73
C++ Builder / Re: Duda con ADOQuery?
« en: Jueves 3 de Junio de 2010, 09:04 »
Usa TADODataSet en vez de TADOQuery.

Podrías dejarlo mas o menos así:

AnsiString parametro1,parametro2,parametro3;

parametro1=ComboBox1->Text; //ANIO
parametro2=ComboBox2->Text; //LOCALIDAD
parametro3=ComboBox3->Text; //TRIMESTRE

ADODataSet->CommandText = "select count(*) cuantos from tabla_prueba where [año] = " + parametro1 + " localidad = " + parametro2 + " trimestre = " + parametro3;

NOTA: recuerda que si "localidad" es de tipo texto, deberías dejar parametro 2 entre comillas simples:
ADODataSet->CommandText = "select count(*) cuantos from tabla_prueba where [año] = " + parametro1 + " localidad = '" + parametro2 + "' trimestre = " + parametro3;

ADODataSet->Active = true;

//ahora consulta el valor del campo "cuantos", ya que la consulta SIEMPRE devuelve un registro.
if( ADODataSet->FieldByName("cuantos")->AsInteger == 0 ) {
     ShowMessage("no existe");
}
else {
     ShowMessage("si existe");
}

//Cuando vayas a consultar otra sentencia que no sepas si devolverá algún registro o no, puedes comprobarlo así
if( ADODataSet->IsEmpty() ) {
     ShowMessage("no existe");
}
else {
     ShowMessage("si existe");
}

ADODataSet->Active = false;

74
C++ Builder / Re: IP Address Control?
« en: Lunes 31 de Mayo de 2010, 19:34 »
Usa el componente TMaskEdit, de la pestaña "Additional" en el Builder 6.

Permite crear máscaras de entrada. Define la que necesites.

75
C++ Builder / Re: Dias que hay entre fechas
« en: Lunes 31 de Mayo de 2010, 19:32 »
Prueba con esta funcion:

int __fastcall DaysBetween(const System::TDateTime ANow, const System::TDateTime AThen);

Devuelve un entero con los dias que hay entre las fechas ANow y AThen

Está en la unidad DateUtils

Páginas: 1 2 [3] 4