Consulta sobre Firebird
  • hola buenos dias amigo yacosta queria hacerte una consulta tengo una cuestion sobre lo siguiente tengo dos locales una pc  en cada local con una distancia en la cual el wifi no hay alcance bueno entonces me gustaria utilizar una sola base para ambas maquinas, es recomendable utilizar una bd para ambas pc y si fuera asi tendria que utilizar zeebede en este caso de antemano agradecer tu opinion y sugerencia amigo saludos
  • 18 Comentarios sorted by
  • No me quedo clara tu petición doc. Asi que responderé por los dos escenarios.

    Una BD para dos PCs.
    Esto es correcto y se puede usar con total transparencia en Firebird porque Firebird es un motor cliente servidor, por tanto puedes tener 20 o 30 PCs todas atacando a la base de datos que es una sola: La del servidor, o la de la maquina que hace de servidor. Eso si, tendrás que construir y manipular tu BD respetando el ACID porque sino se te va a hacer un menjunje toda la data.
    Aclarado eso el otro tema es ¿como estableces la conexión entre ambas maquinas?. Puede ser por cable, internet, wifi, señales de humo, lo que quieras pero recuerda que cada una de ellas hará mas o menos lenta la conectividad, eso puede castigar tu transacción, ten en cuenta eso.
    El uso de Zebedee es por un tema de seguridad en la transferencia de datos por red de la BD, puesto que encripta esa transferencia y eso tiene un costo, el costo es: lentitud, va a hacer que se ponga un poco lenta la experiencia de uso, quizá no lo sientas al principio por la poquísima data pero después si te va a pasar factura y esta sera mas cara si es que tu diseño y mantenimiento no es adecuado.
    En la practica dependerá de algunas condiciones el hecho de si vale la pena usar Zebedee o no. Tengo mas de 10 clientes todos en red local y cada uno de ellos tiene en su red un minimo de 3pc (el mas grande tiene 20) y no usamos Zebedee ni tenemos problemas de transferencia o intromision. Cuando el tema se va para internet quiza si sea adecuado el Zebedee pero yo no lo uso porque es muy poca esa usabilidad (de momento).

    Misma BD para dos PCs.
    Tambien se puede tener el archivo de base de datos en varias pcs pero todas menos una sera replicadoras, en este tema mucho no he entrado, creo que no te refieres a esto y que tu tema es el punto anterior, pero lo comento por siaca.

  • Hola amigo gracias por contestar, esto no lo entendi

    Misma BD para dos PCs.
    Tambien
    se puede tener el archivo de base de datos en varias pcs pero todas
    menos una sera replicadoras, en este tema mucho no he entrado, creo que
    no te refieres a esto y que tu tema es el punto anterior, pero lo
    comento por siaca.

    si mira aqui la idea es que la informacion quede en una sola base  de datos, ya que utilizar una bd para cada maquina y despues centralizarla seria un rollo  asi que pues la idea seria utilizar internet para la comunicacion, puedo a lo mejor ahorrarme lo de zebede por que no creo manegar datos del pentagono ni de un banco ni nada por el estilo jejee ahora tu lo crees recomendable crees que sea muy lenta o cual seria tu recomendacion para manejar ambas pc y desde una poder ver las ventas totales inventarios etc
  • Vamos por partes.

    Olvidemos lo de los replicadores, es un rollo que nos va a desviar del tema y lo podemos ver aparte.

    Existe tambien el concepto de base de datos distribuidas pero de nuevo, es otro rollo y para otras necesidades.

    Usar una BD en un entorno es lo normal y lo correcto, esta BD puede ser atacada por una 1 o por 100 instancias o PCs, hablando de Firebird no hay problema, esta para eso. Por donde se conectan es otro rollo.

    Y bueno sobre la experiencia de uso del sistema teniendo terminales que se comunican por internet dependerá de varios factores. En lo personal ya lo uso en mi solución, tengo un cliente que desde su celular le pasa internet a su laptop en el cual levanta el aplicativo y este aplicativo se conecta a su servidor. Todo esto con VB6 y Firebird (y DynDNS). El y yo consideramos que la velocidad de transferencia de datos es aceptable, teniendo en cuenta que la BD ya pasa los 200 megas, naturalmente hay un uso adecuado de indices, algunas consultas están paginadas, transacciones, etc.
    Este cliente no usa tanto el aplicativo que se conecta por internet para hacer operaciones sino para hacer consultas, el problema es que si hace operaciones y se le cae la señal (se acaba el internet, alguien en la red se pone a ver calatas, ven youtube, etc) al no completarse o demorarse mucho la transacción pues las tablas involucradas quedan en espera hasta que se haga el rollback o commit y los terminales locales se van a  ver afectados (cuelgues), pero como el no lo usa principalmente para hacer operaciones y si lo hace pues ocurre solo en modulos donde nadie mas intervenga (cuenta de clientes, pagar proveedores remotamente, etc), No en Ventas, ni traslados, pero si lo usa mucho para hacer consultas: Stock, caja, valorizados, estadisticas, etc.

    Recomendación: Usar indices, paginar consultas, no usarlo mucho en tablas transaccionales directamente cuando en local también se estén usando.
  • ok amigo perfecto otra pregunta mas y mas bien es como opinion entonces si yo quiero tener dos maquinas y una base de datos para ambas no es recomdable si seria en una la conexion por internet por el tema de las transacciones verdad (ventas). lo ideal seria una base para cada una ahora, alguna opinion sobre la intencion de centralizar en una base de datos la informacion de ambas bases de datos de las diferentes maquinas es viable esto, o a esto te refieres con base de datos distribuidas
  • por que otra solucion seria hacer algo web verdad el pex seria que se va internet y pelas no hay sistema
  • No no!!! olvidemos el tema de dos base de datos, el tema de replicación en realidad es para otro fin, luego lo vemos en otro post. De momento OLVIDA eso. Y las bases de datos distribuidas es para organizaciones mas grandes donde no se necesita por X motivos que todas la data este centralizada, pero ya es harina de otro costal.

    Tu escenario se resuelve con una sola BD.

    Para que las operaciones no se solapen se tiene que diseñar el sistema para ese fin, puede usarse tablas intermedias, puede usarse procesos diferentes para actualizar saldos, costear, etc. habría que estudiar ello, habria que estudiar tu alcance. El "solapado" de operaciones no es algo que ocurra concurrentemente pero puede pasar y ademas como firebird es transaccional no te estropeara la BD, lo máximo que pasara sera una fastidio de "cuelgue" y tendrias que reinicar el aplicativo afectado, siendo lo mas chulo que valides esa situación y te curas de espanto

    ¿Como lo valido?
    1.- Pregunta: Transacción abierta?
    2.- Si es No. Abrir transacción, operar.
    3.- Si es Si, Dar mensaje a usuario de que Vuelva a intentar su operación (actualizando sus datos) y vuelve al punto 1.


     
  • ok  amigo creo que en este tema de gestion no hay nadien que te gane amigo sinceramente
    :D en cuestion de mi aplicativo ya desde hace rato manejo transacciones gracias ati ahora solo seria cuestion entonces de el aplicativo estacion a distancia seria manejar en el momento de generar la transacciones abrir conexion y cerrarla vdd seria lo recomendable, ahorita yo manejo tanto en red local abrir conexion al inicar aplicativo y cierro al terminar y en el escenario del que hablamos seria conexion al iniciar transaccion y cerrarla al terminar transaccion vdd?

    ahora con referente a preguntar a lo de transacción abierta
  • Es correcto, en el terminal remoto harás esto:
    Abrir conexion
    Realizar transacciones
    Cerrar conexion.

    Alli reducimos mucho los inconvenientes, claro que el costo es que tu aplicativo remoto sera un poco mas lento por la tarea de Abrir conexión pero creo que es un tiempo admisible.
    Ahora (entre nos) te dire que una vez use el mismo aplicativo local (el que se conecta una sola vez) sobre internet y la experiencia fue positiva, pero para curarnos de espanto lo mejor es abrir y cerrar.

    Sobre preguntar si la conexion esta abierta o no, pues la verdad yo no pregunto sino mas bien capturo el error. Cuando quieres alterar una tabla que esta siendo usada por una transaccion te salta un error (no recuerdo cual es), ese lo capturas, activas un timer y preguntas al usuario si quiere volver a intentar la operacion. Si te dice que si, abres la transaccion, vuelves a correr las validadciones y continuas.



  • a ok amigo
    ya voy entiendiendo

    aver amigo





    On Local Error goto captura_error

    Cnn.BeginTrans ' aqui abre inicia la transaccion
    Cnn.Execute strCabecera, adCmdText
    Cnn.Execute strDetalle, adCmdText
    Cnn.CommitTrans
    exit sub
    captura_error:
    'Código de alerta de error
    Cnn.RollbackTrans
    msgbox "Se ha producido un error desea volver a intentarlo xxxxx?
    exit sub


    seria algo asi amigo
  • Es casi correcto, pero mas bien no preguntes si desea volver a intentarlo, sino dictamina que vuelva a intentar la operacion. Si preguntas  entonces mete toda la operacion en un procedimiento cosa que si el usuario responde Si pues invocas a ese procedimiento.

    Y digo casi correcto porque deberia ser asi:

    On Local Error goto captura_error

    Cnn.BeginTrans ' aquí abre inicia la transaccion
    If ValidarBD Then 'este es Validar debe ser una funcion que si retorna true aplica, sino no.
       Cnn.Execute strCabecera, adCmdText
    Cnn.Execute strDetalle, adCmdText
    Cnn.CommitTrans
    else
       Cnn.Rollback
       Msgbox("Se presentaron inconsistencias en...")
    End If

    exit sub
    captura_error:
    'Código de alerta de error
    Cnn.RollbackTrans
    msgbox "Se ha producido un error desea volver a intentarlo xxxxx?
    exit sub


    Fijate que ValidarBD lo pongo dentro del Begin, es conveniente SI ES QUE tienes que hacer validaciones en base de datos, por ejemplo si se trata de una venta debes hacer un select a la tabla de saldo para ver si tenemos la cantidad suficiente, PERO DENTRO DE LA TRANSACCIÓN,
    Si todo lo que te retorna es True entonces sale de la función con True y procede a aplicar la grabación, si algo es inconsistente sale de la función con False y hace rooback con el consecuente mensaje.
    Si es que no vas a hacer ninguna validacion entonces si puedes obviar a ValidarBD

    El capturador de error que aplicaste ya queda para saber si la transacción se puede abrir o no debido a que las tablas estén comprometidas en otra transaccion.
  • ok amigo perfectisimo amigo quedo entendido mas que suficiente jejeje tengo otra duda y no es sobre firebird sino directamente sobre vb6 a lo mejor es facil pero ando perdido estos dias fijate que quiero agregar una referencia a mi proyecto lo que siempre hago es irme a menu en proyecto en la parte penultima si no mal recuero esta la opcion de referencia pero que crees no veo por ningun lado referencias en mi vb6. pregunta lo ocultaria yo sin querer o movi algo es la primera vez que me pasa ya llevo toda la mañana y no logro jejeje

    image
  • Manya que curioso. A ver, arranca de nuevo el VB6 pero SIN PROYECTO alguno, nada. Y dime si se ve asi:
    image
  • tampoco amigo fijate ya estube googleando y no encontre nada sera que tendre que reinstalar nuevamente grrr
  • Pues si, es una cosa rarisima, nunca lo vi, incluso esta bueno para que lo publiques en el foro de Lea, quiza alguien tenga experiencia en ello
  • amigo una pregunta sigo utilizando la version 2.1 que descarge desde tu foro crees convenien te empezar a utilizar la 2.5  saludos

  • La gente ya esta empezando a usar 2.5, incluso ya esta poniéndose estable la version 3, pero la verdad yo sigo con la 2.1 por la sencilla razón de que no necesito mas, ya me ha demostrado innumerables veces que cumple todo lo que necesito, le perdi un poco de velocidad al tema de Firebird, alguna vez te comente que incluso ya no quiero programar y dedicarme a otra cosa pero por necesidad sigo en el tema.

    Sin embargo creo que harias bien en instalarte la 2.5 doc
  • gracias amigo te agradezco tus comentarios amigo, y pues hojala si alguna vez te retiras de esto por que otros proyectos ya tuvieron exito, espero sigas programando aunque sea por hobbie amigo

¡Hola Forastero!

Pareces nuevo por aquí. Si quieres participar, ¡pulsa uno de estos botones!

Poll

No poll attached to this discussion.

In this Discussion

Top Actividad

En linea (0)