Autor Tema: FirebidSQL  (Leído 5676 veces)

0 Usuarios y 1 Visitante están viendo este tema.

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
FirebidSQL
« en: Febrero 12, 2010, 04:25:26 am »
Alguien tiene experiencia usando VB6 con FirebirdSQL?, yo estoy empezando a usarlo, hasta ahora bien salvo dos inconvenientes nada graves, pero me gustaría saber si alguien en este foro conoce y maneja FirebirdSQL.
Saludos
Me encuentras en YAcosta.com

ssccaann43

  • Moderador
  • Terabyte
  • *****
  • Mensajes: 970
  • Reputación: +97/-58
    • Ver Perfil
    • Sistemas Nuñez, Consultores y Soporte, C.A.
Re:FirebidSQL
« Respuesta #1 en: Febrero 12, 2010, 01:03:48 pm »
Como BD lo conozco y la integración con VB es totalmente simple. Ahora bien, dime que inconvenientes tienes?
Miguel Núñez.

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:FirebidSQL
« Respuesta #2 en: Febrero 13, 2010, 03:05:22 am »
Hola Miguel, bueno tengo algunas dudas ya que mi experiencia en base de datos no es la adecuada, acabo de salir de Access y entre a Firebird, la migración hasta ahora va bien, pero quisiera empezar por lo que seria algunos conceptos de pronto básicos que algunos de ellos no me queda muy claro. Quizá esta pregunta tiene que ver en realidad con las bases de datos en general. Trabajando con VB6

Tengo lo siguiente:
codigo...
codigo.. 
DB.BeginTrans
codigo... (insert a tablas A, B, D)
codigo... (update a C, E)
codigo...
db.CommitTrans

Entiendo que desde que mando la orden db.BeginTrans la BD no confirma las modificaciones a la Base de Datos hasta que encuentre el Commit y deja en cola otras alteraciones a la Base de Datos que serán atendidas después del commit.
La pregunta es: Se quedan "suspendidas" toodas las tablas de la BD?, es decir toda la BD? porque, ¿como sabe el BeginTrans que solo debe bloquear a las tablas A,B,C, D y E?, eso es lo que no me queda claro.

Saludos
Me encuentras en YAcosta.com

ssccaann43

  • Moderador
  • Terabyte
  • *****
  • Mensajes: 970
  • Reputación: +97/-58
    • Ver Perfil
    • Sistemas Nuñez, Consultores y Soporte, C.A.
Re:FirebidSQL
« Respuesta #3 en: Febrero 13, 2010, 04:31:36 pm »
Mira el Beginstrans y el CommitTrans, se utilizan para asegurar la integridad de los datos,
si vas a modificar la base de datos deberas abrir una transaccion(BeginTrans)
al iniciar un evento de modificacion de la base de datos(insert, delete, update),
y terminarla, luego de hacer todas las modificaciones con (CommitTrans).

Esto hace que si alguna instruccion falla, no se realiza ningun cambio en la base de datos.
El BeginTrans no bloquea las tablas, el "bloqueo" lo hace el evento de modificacion de la base de datos(insert, delete, update).
Miguel Núñez.

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:FirebidSQL
« Respuesta #4 en: Febrero 15, 2010, 02:27:08 am »
Ok quedo claro lo anterior. Tengo otra duda que de pronto es mas de ADO y que aun no resuelvo.

Lo que quisiera saber es, ¿como accedo a los datos Hijos de una consulta jerárquica?, quiero recorrerlos uno por uno para un propósito que tengo (tema de impresión) y cuando hago:

...
While Not rsCPadre.EOF
    MsgBox (rsDet("NCOMPLETO")) 'Muestro el nombre de un articulo,
    'pero como le hago para mostrar otro registro?
Wend

Saludos

Yvan Acosta B.
Me encuentras en YAcosta.com

coco

  • Administrador
  • Terabyte
  • *****
  • Mensajes: 548
  • Reputación: +63/-3
    • Ver Perfil
Re:FirebidSQL
« Respuesta #5 en: Febrero 15, 2010, 03:18:53 am »
Ok quedo claro lo anterior. Tengo otra duda que de pronto es mas de ADO y que aun no resuelvo.

Lo que quisiera saber es, ¿como accedo a los datos Hijos de una consulta jerárquica?, quiero recorrerlos uno por uno para un propósito que tengo (tema de impresión) y cuando hago:

...
While Not rsCPadre.EOF
    MsgBox (rsDet("NCOMPLETO")) 'Muestro el nombre de un articulo,
    'pero como le hago para mostrar otro registro?
Wend

Saludos

Yvan Acosta B.


no estoy seguro pero probaste con rsCPadre.Next o rsCPadre.MoveNext ?

saludos
'-     coco
(No me cabe: Java, Python ni Pascal)
SQLite - PIC 16F y 18F - ARM STM32 - ESP32 - Linux Embebido - VB6 - Electronica - Sonido y Ambientacion

seba123neo

  • Terabyte
  • *****
  • Mensajes: 763
  • Reputación: +88/-5
    • Ver Perfil
Re:FirebidSQL
« Respuesta #6 en: Febrero 15, 2010, 12:01:13 pm »
como dijo coco, te falta rsCPadre.MoveNext...sino entra en bucle infinito....te recomiendo leer mas sobre ADO, la pagina de el guille es oro en eso...

saludos.

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:FirebidSQL
« Respuesta #7 en: Febrero 15, 2010, 01:52:12 pm »
como dijo coco, te falta rsCPadre.MoveNext...sino entra en bucle infinito....te recomiendo leer mas sobre ADO, la pagina de el guille es oro en eso...

saludos.

No no... bueno, creo que no me explique bien, asumí que diciendo solo "consulta jerárquica" se iba a entender y por eso solo puse el código del problema, creo que me expresé como USUARIO (de esos que todos odiamos jeje) me explicare correctamente.

Tengo una consulta jerárquica, Esta consulta me entrega datos de cabecera y detalle de una Factura, lo que me interesa y no consigo es poder recorrer el detalle, es decir la consulta hijo, necesito manipular el detalle para un tema externo, lo mas fácil seria hacer solo la consulta del detalle aparte de la consulta jerárquica pero eso me llevaría a hacer dos veces la misma consulta. Yo deseo saber si es posible recorrer la consulta detalle de una consulta jerárquica.

El código es:
Dim rsCD As New ADODB.Recordset

rsCD.StayInSync = False
rsCD.Open sql_PH(NumHead)), dB, 1, 1

Set MiReporte.DataSource = rsCD
MiReporte.Show 1

Esto va muy bien, el reporte (que es una Factura realmente) me pinta muy bien.

Ahora, por ejemplo, si antes de mostrar el reporte, hago rsCD.RecordCount siempre me va a mostrar un solo registro, y es correcto porque en NumHead pongo el codigo del documento. Este documento (Factura) tiene detalle, 10 o 15 items y quiero recorrerlos individualmente. Probe con:

Dim rsDet As Variant
rsDet = rsCD("Detalle").value

Que por allí leí que me serviría para recorrer el detalle, pero no lo he logrado, ya que rsDet.Recordcount no existe o rsDet.Field... tampoco.

Esta es mi interrogante. A continuación pongo la consulta jerárquica la cual va muy bien.

-----------------------------------------------------------------
---- aqui la funcion que me crea la consulta
---- esta funcion llama a otras dos, una para armar cabecera
---- y otra para armar detalle

Public Function sql_PH(CSP_ID As Double)
sql_PH = _
"SHAPE {" & sqlCSP(CSP_ID) & "} AS Cabecera " & _
"APPEND ({" & sqlCSP_DET & "} AS Detalle " & _
"RELATE CSP_ID to CSP_ID) AS Detalle"

'EL PH ES POR PADRE HIJO sqlCSP y sqlCSP_DET son otras dos consultas SQL que arman toda la consulta, esto funciona bien
End Function
-----------------------------------------------
Me encuentras en YAcosta.com

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:FirebidSQL
« Respuesta #8 en: Febrero 16, 2010, 03:23:58 pm »
Ya esta, ya lo resolví, lo publico por si alguien le sirva
En la parte rsDet = rsCD("Detalle").value no debe ir .value, quedando así el código:

Dim rsCD As New ADODB.Recordset
Dim rsDet As Variant
rsCD.StayInSync = False
rsCD.Open sql_PH(NumHead)), dB, 1, 1

   rsDet = rsCD("Detalle")
   While Not rsDet.EOF
       Debug.Print rsDet(0), rsDet(1), rsDet(2)
       rsDet.MoveNext
   Wend


Set MiReporte.DataSource = rsCD
MiReporte.Show 1

claro que en  Debug.Print rsDet(0), rsDet(1), rsDet(2) lo cambio por el código que manipulara esos datos según conveniencia, pero ya con esto puedo recorrerlos.

Saludos
   
Me encuentras en YAcosta.com