Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Actualizacion de consulta en varias maquinas

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Bases de Datos
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Actualizacion de consulta en varias maquinas Responder citando

Hola a todos...
Les escribo despues de mucho tiempo...
La cuestion es la siguiente, tengo una base de datos que funciona en 3 maquinas, lo que estoy haciendo es mas o menos usar, la arquitectura cliente/servidor, en la cual en el servidor esta mi base de datos original y las otras acceden mediante un alias, desde el ODBC, mi primera pregunta si esta forma es la correcta cuando hago uso de base de datos en red, o cual seria la forma mas optima de hacerlo...

Por otra parte necesito hacer por ejemplo que una maquina se encarga de vender los productos, y la otra es encargada de los almacenes, la cuestion es que quiero que en cuanto venda algo, la maquina de ventas, en la maquina de almacenes se note el cambio, claro si estan viendo la misma tabla..., no se si me explico, pero lo que quiero es que por ejemplo en la maquina de almacenes aparece lo siguiente:

pintura 80 tarros
brocha 70 pzas.
...
...

y en ventas venden 5 tarros de pintura y 3 brochas que se muestre automaticamente lo nuevos valores:

pintura 75 tarros
brocha 67 pzas.
...
...

espero que me puedan ayudar...
Gracias de antemano....
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor Yahoo Messenger MSN Messenger
Mensaje    Asunto: Actualizacion en maquinas diferentes Responder citando

Hola a todos....

Cualquier sugerencia, me vendria bien, ademas que he estado averiguando algo y me dijeron que lo que queria hacer era posible hacerlo haciendo uso de Agentes, pero la verdad ni idea... Sad

Ahora bien, tambien tengo otro problema que espero me puedan ayudar, lo que pasa es que la velocidad de acceso a una tabla se debe a varios aspectos verdad??, y uno de esos es el tamaño de la base de datos, ahora lo que quisiera que me ayuden a solucionar es que una vez que mi base de datos este llena, por ejemplo quisiera hacer una opcion que diga mantenimiento, y lo que quiero que esta opcion haga es que primero haga una copia de seguridad de las tablas (Todas), para luego borrar el contenido de las tablas (Solo algunas), bueno espero haberme explicado bien, y cualquier ayuda ya saben que es muy bien venido... Razz

Gracias a todos... Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor Yahoo Messenger MSN Messenger
Mensaje    Asunto: Responder citando

Raul:


Como tu me enfrente a este dilema al iniciar la transcision de BD Escritorio a Cliente/Servidor.

No soy experto pero te proporcionare mis experiencias en este caso,

Si venimos de BD escritorio estamos ACOSTUMBRADOS a tener GRIDS por todos lados y para todo, a usar Tables para todo.

Esto en parte por nuestra familiaridad con lenguajes xBase (Fox, clipper , dbase etc etc).

Ahora bien, el paradigma de programacion cambia al ser Cliente/Servidor, pensandolo bien, ¿ Que tal util es que el cliente vea TODA su base de datos o filtrada por grupo con existencias y costos?, si de todos modos no es valido que las cambie directamente (en contadas ocasiones), los cambios son sobre Tuplas (renglones) especificos o rangos de operaciones agrupadas. Para eso sirven los reportes ¿no crees?

Tomando las palabras del maestro Marteens: ¿ Cuando has visto un GRID en un cajero automatico?, el ejemplo cliente/servidor por excelencia.

Ejemplo real

Actualize una aplicacion que estaba diseñada para ser usada localmente, que mostraba las mesas abiertas al mesero, obviamente al expandir a 4 terminales de captura, los datos quedan"viejos" en las pantallas que no se usan.

Pero sabes que?.. NO IMPORTA..ya que en la caja cuando el cliente quiere ver el total de ventas o datos especificos, se lee en el momento los datos con un boton

Me explico?

Espero haberte ayudado.

PD. Por otro lado ,puedes poner un timer de refresco cada X minutos (Funciona peo no se me hace elagante, a menos que sea una aplicacion para aeropuertos Smile )
_________________
Ing. Gabriel Góngora Navarrete
TouchSoftwares Inc

http://www.touchsoftwares.com
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

Lo que comenta Touchsoftwares efectivamente no es elegante .... pero ..... los usuarios se las gastan en ese aspecto de querer ver lo último de su información .... en alguna ocasion me tocó mostrar una rejilla que contenía información sobre los pedidos de compra de la tienda para la cual laboro ....... le di al usuario la opción de generar el mismo la información a consultar (con lo consiguiente de informacion vieja y tener en sus manos que realizar la actualización) o configurar un timer indicando el tiempo que desea que su rejilla se actualize .... te digo que se las gastan porque TODOS los usuarios de sistema configuraron el timer ..... para evitar tener que estar actualizando ...

espero haberte ayudado
Volver arriba
Ver perfil de usuario Enviar mensaje privado Yahoo Messenger MSN Messenger
Mensaje    Asunto: Responder citando

Hola, pretendes que una modificacion hecha en una estacion se refleje de inmediato en otra.. bueno primero debes preguntarte si esto es necesario realmente, en la situacion propuesta en almacen se necesitaria saber el stock exacto en caso de estarse verificando un inventario, por lo general en esta situacion las empresas cesan las operaciones de compra/venta . Una necesidad real pudiese ser en el caso en que se factura por oficina o mostrador y se entrega por almacen, aqui se requiere que este sea notificado al momento de producirse una nueva facturacion a fin de ir preparando el despacho.

Puedes implementar un timer como propone Gabriel (Tampoco me parece elegante) o puedes enviar un mensaje por la red para refrescar la(s) tabla(s) en cualquiera de los casos debes verificar que la(s) tabla(s) no este(n) en modo de edicion pues estarias llamando a un Post implicito y no conozco ningun usuario que le agrade ver como le desaparece delante de la vista el registro en el cual esta trabajando.

Para vaciar las tablas despues de respaldarlas tienes que abrirlas en modo exclusivo, para esto es necesario que no este nadie conectado a ellas, en el mundo real te encontraras con la necesidad de mandar a cerrar tu aplicacion en todas las estaciones, puedes usar un mensaje por la red, el telefono interno o ir una por una...

Mi consejo (ya un disco rayado) "Si desarrollas bases de datos para cliente /servidor usa un verdadero sistema CLIENTE/SERVIDOR si puedes pedir pide ORACLE, si no usa FIREBIRD o INTERBASE en su version 6.0 que es gratuita.

Si te decides a migrar cuenta con todo mi apoyo en lo que respecta desde el diseño de la BD, migracion e implementacion de la aplicacion.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

alguna vez, tuve la necesidad, de realizar los refrescamientos en las bases.
bien, no se si, la idea no sea descabellada, puesto que en paradox, no habia, tuve qurealizar una pequeña ayuda con los hilos, del paleta FASNET, cocretamente con el protocolo NMUDP, para enviar y recibir los datos, dentro de las bases, asi cuando una de ellas actualizaba, les enviava un mensaje, a todas, para que actualizarana, bien
pasando a interbase, existe IBEventes, que realiza un funcion similar a esta..

saludos..
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

César C. Salazar, ¿no te importa explicar un poco como va eso de los mensajes NMUDP? ¿como se envian a la aplicacion para indicar que tiene que actualizar consultas y desde donde, claro?
y si pones unos ejemplos mejor Laughing
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

supon que introduces un componente, NMUDP1, con los puertos 6588 fue el numero de puerto que se me ocurrio, je je, dentro de un modulo de datos, y en el evento OnDataRecived, estableces esto

Código:
void __fastcall TDataModule1::NMUDP1DataReceived(TComponent *Sender,
      int NumberBytes, AnsiString FromIP, int Port)
{
    char Buff[40];
    int j;
    NMUDP1->ReadBuffer(Buff, 40, j);
    Buff[j]=0;
    if(Buff=="F"){  // F para indicar actualizaion
        if(this->TCARGOS->Active)
            this->TCARGOS->Refresh();
        if(this->TCLIENTES->Active)
            this->TCLIENTES->Refresh();
        if(this->TDIVISAS->Active)
            this->TDIVISAS->Refresh();
        if(this->TEMPLEADO->Active)
            this->TEMPLEADO->Refresh();
        if(this->TEMPRESA->Active)
            this->TEMPRESA->Refresh();
        if(this->TTARIFAS->Active)
            this->TTARIFAS->Refresh();
        if(this->TSECCION->Active)
            this->TSECCION->Refresh();
        if(this->TGRAFHAB->Active)
            this->TGRAFHAB->Refresh();
        if(this->TCARFAC->Active)
            this->TCARFAC->Refresh();


/*        if(this->TREGISTRO->Active)
            this->TREGISTRO->Refresh();
        if(this->TREGHAB->Active)
            this->TREGHAB->Refresh();
        if(this->TFACTURAS->Active)
            this->TFACTURAS->Refresh();*/


    }
}


posteriormente, usando una funcion como la siguiente, cada vez que se graba un registro..
Código:
RefrescarDatos(DataModule1->TDNS, DataModule1->NMUDP1,"F");

RefrescarDatos(DataModule1->TDNS, // tabla con el nombre de las pc
                       DataModule1->NMUDP1, // el componente para comunicarme
                      "F" // el envio de datos para actualizar)


el codigo esta abajo..

Código:
/*******************FUNCION PARA ACTUALIZAR DATOS *********************/
/* DEBE EXISTIR UN NMUDP, DENTRO DEL PROGRAMA, PARA PODER REALIZAR ESTA FUNCION.*/
void __fastcall RefrescarDatos(TTable *TCC, TNMUDP *CeC,AnsiString Cadena){
        TCC->First();
        while (!TCC->Eof){
           // if(TCC->Fields->Fields[0]->AsString!="\0xff" &&(!strcmpi(Cadena.c_str(),"C") ? 1 : TCC->Fields->Fields[0]->AsString!=NombrePc())){
            if(TCC->Fields->Fields[0]->AsString!="\0xff"){
                CeC->RemoteHost=TCC->Fields->Fields[0]->AsString;
                CeC->SendBuffer(Cadena.c_str(),Cadena.Length(),Cadena.Length());
            }
            TCC->Next();
        }
}


cabe aclarar, que la funcion, usa un parametro TTable *TCC, que es la direccion de una tabla que contien todas las maquinas las cuales se conectan,
por ejemplo
est1
est2
est3
etc.., esto es para que en cada estacion se les envie el mensaje, y se actualicen cuando reciban el parametro "F"

espero ser claro, si tengo faltas de ortorgrafia, es por que hace mucho frio ahora, y los dedos los tengo entumidos Wink
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

muchas gracias por tu rapida respuesta, y muchas gracias por facilitar el codigo, esta bastante curioso, lo voy a poner en practica a ver que tal.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.