 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Raúl Capt


Registrado: 16 Ago 2002Mensajes: 174Ubicación: Oruro (Bolivia)
|
Publicado: Vie 22 Oct, 2004 2:30 am Asunto: Actualizacion de consulta en varias maquinas |
|
|
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 |
|
 |
Raúl Capt


Registrado: 16 Ago 2002Mensajes: 174Ubicación: Oruro (Bolivia)
|
Publicado: Mie 17 Nov, 2004 2:33 am Asunto: Actualizacion en maquinas diferentes |
|
|
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...
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...
Gracias a todos...  |
|
| Volver arriba |
|
 |
Touchsoftwares Master


Registrado: 16 Dic 2002Mensajes: 869Ubicación: MEXICO Playa del Carmen
|
Publicado: Mie 17 Nov, 2004 3:20 am Asunto: |
|
|
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 ) _________________ Ing. Gabriel Góngora Navarrete
TouchSoftwares Inc
http://www.touchsoftwares.com |
|
| Volver arriba |
|
 |
TObject Cdt

Registrado: 28 Jun 2004Mensajes: 17
|
Publicado: Mie 17 Nov, 2004 7:09 pm Asunto: |
|
|
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 |
|
 |
alfredo Master

Registrado: 13 Oct 2003Mensajes: 246Ubicación: Valencia Venezuela
|
Publicado: Mie 17 Nov, 2004 7:22 pm Asunto: |
|
|
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 |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Mie 17 Nov, 2004 8:03 pm Asunto: |
|
|
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.. _________________
 |
|
| Volver arriba |
|
 |
marcoss Cdt

Registrado: 24 Dic 2004Mensajes: 24
|
Publicado: Mar 28 Dic, 2004 4:55 pm Asunto: |
|
|
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  |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Mie 29 Dic, 2004 8:03 pm Asunto: |
|
|
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  _________________
 |
|
| Volver arriba |
|
 |
marcoss Cdt

Registrado: 24 Dic 2004Mensajes: 24
|
Publicado: Mie 29 Dic, 2004 10:19 pm Asunto: |
|
|
| 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 |
|
 |
|
|
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
|
© 2002–2026 Club Builder · Funciona con phpBB.
|