Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-06-2010
Avatar de richy08
richy08 richy08 is offline
Miembro
 
Registrado: may 2007
Ubicación: Bucerias, Nayarit Mexico
Posts: 529
Poder: 17
richy08 Va por buen camino
aplicaion que se conecta a otras bases de datos

buenos tardes compañeros estoy terminando la aplicaion para un hotel, la cual se conecta a una base de datos de access y a otra de mysql para leer cargos, dichas interfaces actualmente funcionan pero con algunas restricciones, para conectar con la de mysql la maquina necesita estar en una red .11, y todas las maquinas estan en la red .10, solo ahi una que esta en la .11 y los usuarios se quejan por que necesitan correr ciertos procesos de la reserva en esa maquina, me piden que eso cambie y las soluciones que he encontrado son dos:


1.- insertar estado de los procesos en una tabla y poner una aplicacion en el servidor que este leyendo todo el tiempo esta tabla, y al ver que cambia el estado que corra esos procesos para quitar la restriccion de la red, la pregunta es no sera demasiado costoso que este corriendo todo el tiempo un programa en el server que este leyendo la tabla???, y otro inconveniente que veo es que algunas reservas no seran tomadas en cuenta ya que llevaran mas prioridad las que esten arriba en la tabla.

2.- la otra (no estoy seguro si se pueda hacer) es crear una aplicacion que mas bien seria coom una funcion y que solo se ejecute cuando alguna maquina le pase parametros, se podria hacer???

nota: el servidor donde corre la aplicaion cuenta condos tarjetas de red por lo cual puede ver las dos redes la .10 y la .11

graciasp or cualquier comentario
Responder Con Cita
  #2  
Antiguo 05-07-2010
manuc manuc is offline
Miembro
 
Registrado: abr 2010
Posts: 165
Poder: 15
manuc Va por buen camino
Hola Richy08,

Puedes hacerlo de varias formas.

Lo que comentas de crear una aplicación que reciba parámetros no está mal encaminada.

Una solución (si no lo has hecho antes, quizás pueda ser algo complicada) sería desarrollar una Servidor TPC, que reciba peticiones en el servidor y ejecute procesos que se conecten a una base de datos u otra.

Igualmente, puedes crear un ActiveX Library, instalarla en el servidor e igual que el caso anterior, recibir peticiones para ejecutarlas en el servidor.

En ambos casos, lo que consigues es los ordenadores clientes realicen peticiones a un software que se ejecuta en el servidor. Este Software que se ejecuta en el servidor, podrá conectar a una base de datos u otra.

Espero que te ayude.

Un saludo.
Responder Con Cita
  #3  
Antiguo 05-07-2010
Avatar de richy08
richy08 richy08 is offline
Miembro
 
Registrado: may 2007
Ubicación: Bucerias, Nayarit Mexico
Posts: 529
Poder: 17
richy08 Va por buen camino
gracias por la respuesta manuc, la verdad aun no he llegado a ese punto donde partire la aplicaion de los ejemplos que me comentas me parecen una buena opcion, pero he buscado en el foro y no encuentro nada de informacion tendras un link para orientarme, otra forma que habia estado pensando es hacerlo via sockets enviar una cadena y pues en el sevidor desbaratarla y ahi tendria mis parametros cree que funcione de esta forma??? y cuales son los inconvenientes de hacerlo asi, que me recomendarias muchas gracias por tu tiempo
Responder Con Cita
  #4  
Antiguo 05-07-2010
manuc manuc is offline
Miembro
 
Registrado: abr 2010
Posts: 165
Poder: 15
manuc Va por buen camino
Hola richy08,

Disculpa, con lo de Servidor TCP me refería exactamente (perdona, no he sido muy preciso) a un Software Servidor por Socket.

En realidad ambas soluciones utilizan conexiones por Socket. Quizás, crear una ActiveX Library, sea más sencillo si no has trabajado antes con Sockets.

¿Con qué versión de Delphi trabajas?
Responder Con Cita
  #5  
Antiguo 05-07-2010
Avatar de richy08
richy08 richy08 is offline
Miembro
 
Registrado: may 2007
Ubicación: Bucerias, Nayarit Mexico
Posts: 529
Poder: 17
richy08 Va por buen camino
a ok jeje disculpa mi ignorancia trabajo con delphi 7, y pues alguna ves vi un ejemplo de un tipo chat que utilizaba sockets, pero cualquier informacion me servira de mucha ayuda
Responder Con Cita
  #6  
Antiguo 05-07-2010
manuc manuc is offline
Miembro
 
Registrado: abr 2010
Posts: 165
Poder: 15
manuc Va por buen camino
Entonces imagino que trabajarás con Indy 9.

Te adjunto un ejemplo de como hacer un cliente y servidor con Sockets.

Tiene la extensión .zip, pero realmente es un .rar.

Espero que te ayude.

Un saludo.
Archivos Adjuntos
Tipo de Archivo: zip IdTCPDemo.zip (7,3 KB, 7 visitas)
Responder Con Cita
  #7  
Antiguo 05-07-2010
Avatar de richy08
richy08 richy08 is offline
Miembro
 
Registrado: may 2007
Ubicación: Bucerias, Nayarit Mexico
Posts: 529
Poder: 17
richy08 Va por buen camino
mil gracias por tu tiempo manuc le voy a echar un vistazo y comento
Responder Con Cita
  #8  
Antiguo 07-07-2010
Avatar de richy08
richy08 richy08 is offline
Miembro
 
Registrado: may 2007
Ubicación: Bucerias, Nayarit Mexico
Posts: 529
Poder: 17
richy08 Va por buen camino
hola manuc ya empeze a cambiar mi codigo y estoy analizando los proyectos que me enviaste te has percatado que la cerrar el cliente marca un error??

o es solo en mi maquina saludos.
Responder Con Cita
  #9  
Antiguo 07-07-2010
manuc manuc is offline
Miembro
 
Registrado: abr 2010
Posts: 165
Poder: 15
manuc Va por buen camino
Hola richy08,

¿qué lanza un error o una excepción?

La verdad es que no lo he probado. Sí es normal, que al desconectar el cliente, el servidor lance una excepción.

Un saludo.
Responder Con Cita
  #10  
Antiguo 07-07-2010
Avatar de richy08
richy08 richy08 is offline
Miembro
 
Registrado: may 2007
Ubicación: Bucerias, Nayarit Mexico
Posts: 529
Poder: 17
richy08 Va por buen camino
a ok perfecto de hecho es una excepcion, entonces seguire adelante mil gracias por tu tiempo
Responder Con Cita
  #11  
Antiguo 07-07-2010
manuc manuc is offline
Miembro
 
Registrado: abr 2010
Posts: 165
Poder: 15
manuc Va por buen camino
de nada richy08, encantado de poder ayudar.

Hay que compartir. Llevo años aprendiendo en este foro, gracias a la generosidad de sus participantes y voy devolviendo el favor a medida que puedo.

Un saludo.
Responder Con Cita
  #12  
Antiguo 07-07-2010
Avatar de richy08
richy08 richy08 is offline
Miembro
 
Registrado: may 2007
Ubicación: Bucerias, Nayarit Mexico
Posts: 529
Poder: 17
richy08 Va por buen camino
buenas tardes manu sigo con la aplicacion y he estado probandola y comprendiendola, pero e notado algo extraño tal ves pienso que puede ser al servidor dns de la empresa, no estoy seguro. el error que le noto es que al querer enviar un mensaje a una maquina en especifico solo la aplicacion del servidor recibe los valores, y a la maquina que va dirigido no, y la duda es mas grande es indy 9 funciona en windows 7
Responder Con Cita
  #13  
Antiguo 08-07-2010
manuc manuc is offline
Miembro
 
Registrado: abr 2010
Posts: 165
Poder: 15
manuc Va por buen camino
Hola Richy08,

Yo tengo aplicaciones que utilizan indy9 y funcionan perfectamente en Windows Vista y Windows 7.

El error que comentas, la verdad es que no lo he entendido bien. Cuando dices que intentas enviar a otras máquinas: ¿te refieres a otro ordenador cliente? ¿cómo lo estás haciendo?
Responder Con Cita
  #14  
Antiguo 08-07-2010
Avatar de richy08
richy08 richy08 is offline
Miembro
 
Registrado: may 2007
Ubicación: Bucerias, Nayarit Mexico
Posts: 529
Poder: 17
richy08 Va por buen camino
Cita:
Empezado por manuc Ver Mensaje
Hola Richy08,
El error que comentas, la verdad es que no lo he entendido bien. Cuando dices que intentas enviar a otras máquinas: ¿te refieres a otro ordenador cliente? ¿cómo lo estás haciendo?
asi es manuc en la aplicacion queme pasaste estoy tratando de adaptarla a mis necesidades pero al usar el campo recipient (le pongo el nombre de la maquina o la ip) y los mensajes no llegan solo en la parte del server se ven pero al destinatario nunca llegan, alguna idea de que pueda ser , segun lo que he leido de los componentes en la parte de host del tcp que va en la parte del cliente, ese campo lleva la direccion ip o el nombre de la maquina donde se encuentra el servidor, los he configurado asi ademas modifique el proyecto por que estaba compilando con las librerias y dichas librerias no estan en le cliente, lo extraño de todo esto que los mensajes solo llegan cuando son broadcast.

Última edición por richy08 fecha: 08-07-2010 a las 17:40:56.
Responder Con Cita
  #15  
Antiguo 08-07-2010
manuc manuc is offline
Miembro
 
Registrado: abr 2010
Posts: 165
Poder: 15
manuc Va por buen camino
Disculpa richy,

No se si lo que estás intentando es conectar dos tidTCPClients.
Si es así, no podrás hacerlo. Tu arquitectura tiene que seguir siempre un modelo Cliente -> Servidor.

Si lo que quieres es enviar información de un cliente a otro cliente, tendrás que pasar por el servidor y que este redireccione la información.

Si me comentas qué tipo de estructura estás intentando montar, te puedo aconsejar cómo hacerlo.

Un saludo.
Responder Con Cita
  #16  
Antiguo 08-07-2010
Avatar de richy08
richy08 richy08 is offline
Miembro
 
Registrado: may 2007
Ubicación: Bucerias, Nayarit Mexico
Posts: 529
Poder: 17
richy08 Va por buen camino
gracias manuc no efectivamenete estoy siguiendo la estructura cliente - servidor de hecho estoy probando con los ejecutables de los ejemplos que me enviaste, lo que quiero lograr es que al enviar los parametros a la aplicaion esta ejecute el codigo que ya tengo programado y al terminar le envie un message a la maquina que lo mando llamar solamente y diga algo como done¡¡ ahora mismo estoy en sitio donde esta instalada la aplicacion hare pruebas con los mismos ejecutables dentro de su red para descartar que sea el servidor DNS de la empresa saludos
Responder Con Cita
  #17  
Antiguo 09-07-2010
Avatar de richy08
richy08 richy08 is offline
Miembro
 
Registrado: may 2007
Ubicación: Bucerias, Nayarit Mexico
Posts: 529
Poder: 17
richy08 Va por buen camino
hola manuc ya logre que funcione la aplicacion no la he terminado primero me gustaria preguntarte algo, ahora lo unico que hace es que cuando el cliente envia la peticion de conexion le regresa la cadena diciendole que le proceso se hizo, creo que con esto bastara ya despues le agregare mas campos que seran mis variables al record "TCommBlock", este es el codigo que uso en el cliente


//clientes
Código Delphi [-]
procedure TClientHandleThread.HandleInput;
begin
  if CB.Command = 'MESSAGE' then
     Frm_Posgue.IncomingMessages.Lines.Add (CB.MyUserName + ': ' + CB.Msg)
  else
  if CB.Command = 'DIALOG' then
    MessageDlg ('"'+CB.MyUserName+'" sends you this message:'+#13+CB.Msg, mtInformation, [mbOk], 0)
  else  // unknown command
    MessageDlg('Unknown command "'+CB.Command+'" containing this message:'+#13+CB.Msg, mtError, [mbOk], 0);
end;

procedure TClientHandleThread.Execute;
begin
  while not Terminated do
  begin
    if not Frm_Posgue.Client.Connected then
      Terminate
    else
    try
      Frm_Posgue.Client.ReadBuffer(CB, SizeOf (CB));
      Synchronize(HandleInput);
    except
    end;
  end;
end;

  CBClientActive.Checked:=true;
      if CBClientActive.Checked then
      begin
        try
           Client.Connect(10000);  // in Indy < 8.1 leave the parameter away
           ClientHandleThread := TClientHandleThread.Create(True);
           ClientHandleThread.FreeOnTerminate:=True;
           ClientHandleThread.Resume;
        except
            on E: Exception do MessageDlg ('Error while connecting:'+#13+E.Message, mtError, [mbOk], 0);
        end;
      end
      else
      begin
       ClientHandleThread.Terminate;
       Client.Disconnect;
      end;

    CommBlock.Command      := '';//EditCommand.Text;         //     assign the data
    CommBlock.MyUserName   := Client.LocalName;
    CommBlock.Msg          := 'hola';//EditMessage.Text;
    CommBlock.ReceiverName := 'Desarrollo-lap';//EditRecipient.Text;

    Client.WriteBuffer (CommBlock, SizeOf (CommBlock), true);

la pregunta aqui es en que momento desconecto la conexion ya que la mayoria de los procesos de las interfaces se llevan en esta pantalla al ir presionando botones segun cambie de estado la reservacion.


//Server
Código Delphi [-]
procedure TFrm_Interfaces.CBServerActiveClick(Sender: TObject);
begin
  Server.Active := CBServerActive.Checked;
end;

procedure TFrm_Interfaces.ServerConnect(AThread: TIdPeerThread);
var
  NewClient: PClient;
begin
GetMem(NewClient, SizeOf(TClient));

  NewClient.DNS         := AThread.Connection.LocalName;
  NewClient.Connected   := Now;
  NewClient.LastAction  := NewClient.Connected;
  NewClient.Thread      :=AThread;

  AThread.Data:=TObject(NewClient);

  try
    Clients.LockList.Add(NewClient);
  finally
    Clients.UnlockList;
  end;

  Protocol.Lines.Add(TimeToStr(Time)+' Connection from "'+NewClient.DNS+'"');
end;

procedure TFrm_Interfaces.ServerExecute(AThread: TIdPeerThread);
var
  ActClient, RecClient: PClient;                                                                              
  CommBlock, NewCommBlock: TCommBlock;
  RecThread: TIdPeerThread;
  i: Integer;
begin
  if not AThread.Terminated and AThread.Connection.Connected then
  begin
    AThread.Connection.ReadBuffer (CommBlock, SizeOf (CommBlock));
    ActClient := PClient(AThread.Data);
    ActClient.LastAction := Now;  // update the time of last action
     // unknown command given
      Protocol.Lines.Add (TimeToStr(Time)+' !! "'+CommBlock.MyUserName+'": '+CommBlock.Command);
      NewCommBlock.Command := 'DIALOG';       // the message should popup on the client's screen
      NewCommBlock.MyUserName := '[Server]';  // the server's username
      NewCommBlock.Msg := 'The process was done  "'+CommBlock.Command+'"';  // the message to show
      NewCommBlock.ReceiverName := '[return-to-sender]'; // unnecessary
//****************************************************
//codigo de los procesos a ejecutar "segun yo" 
//****************************************************
      AThread.Connection.WriteBuffer (NewCommBlock, SizeOf (NewCommBlock), true);  // and there it goes...
    //end;
  end;
end;

procedure TFrm_Interfaces.ServerDisconnect(AThread: TIdPeerThread);
var
 ActClient: PClient;
begin
  ActClient := PClient(AThread.Data);
  Protocol.Lines.Add (TimeToStr(Time)+' Disconnect from "'+ActClient^.DNS+'"');
  try
    Clients.LockList.Remove(ActClient);
  finally
    Clients.UnlockList;
  end;
  FreeMem(ActClient);
  AThread.Data := nil;
end;


procedure TFrm_Interfaces.FormCreate(Sender: TObject);
begin
  Clients := TThreadList.Create;
end;

procedure TFrm_Interfaces.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  Server.Active := False;
  Clients.Free;
end;
entre estas etiquetas creo que debe de ir el codigo de los procesos ver arriba en el codigo del server
//****************************************************
//codigo de los procesos a ejecutar "segun yo"
//****************************************************
la pregunta aqui es que pasa si dos estaciones abren esta pantalla las dos trabajando sobre diferente records y por asares del destino mientras los querys estan haciendo los procesos de la peticion de una maquina, que pasa si otra manda llamar al mismo proceso lso querys seguiran ejecutando la peticion de la otra maquina y esperaran a que terminen para comenzar con la nueva transaccion

gracias.
Responder Con Cita
  #18  
Antiguo 09-07-2010
Avatar de richy08
richy08 richy08 is offline
Miembro
 
Registrado: may 2007
Ubicación: Bucerias, Nayarit Mexico
Posts: 529
Poder: 17
richy08 Va por buen camino
sigo con las pruebas y si al parecer me hace falta algo, ya que al ejecutar los querys y simular un enpalme de peticiones de dos maquinas diferentes me marca un error y la aplicaion server se queda pasmada, el error que me marca es que no se pueden completar las operaciones de forma asincrona, algun manual donde pueda ver como sincronizar las operaciones gracias
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
¿Filas de 1 color y otras de otras En Synedit IDE Delphi? JXJ Varios 1 11-12-2008 00:01:28
Otras Bases de datos luxus Conexión con bases de datos 3 23-03-2007 10:55:48
La Base de Datos no se conecta por TCP elmago Firebird e Interbase 4 29-01-2006 00:53:35
Llenar una tabla con datos de otras dos tablas jovehe Tablas planas 2 23-08-2004 17:21:55
Datos no se actualizan en otras transacciones erickperez6 Firebird e Interbase 4 04-09-2003 17:30:03


La franja horaria es GMT +2. Ahora son las 19:44:52.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi