jueves, 14 de octubre de 2010

Conectar Dynamics Nav con BBDD externas

Muchas veces necesitamos conectar Dynamics Nav con bbdd externas para extraer o modificar datos. Podemos usar librerías externas o webservices. Pero si es algo sencillo podemos ejecutar directamente el código desde Dynamics Nav e interactuar con cualquier base de datos externa.

Con ADO.NET, un programa puede leer, insertar, editar, o borrar, la información contenida en diferentes tablas dentro de la base de datos. Además, se puede manipular la propia base de datos para crear nuevas tablas, como también alterar o eliminar las ya existentes, entre otras cosas.

En el siguiente link está la documentación oficial de ADO.NET:

También os pongo un ejemplo de código CAL de como conectarse a una bbdd externa:

ADOConn@1100240000 : Automation Microsoft ActiveX Data Objects 2.8 Library'.Connection";
ADOrs@1100240001 : Automation 'Microsoft ActiveX Data Objects 2.8 Library'.Recordset";
ConnStr@1100240002 : Text[200];
AnzCount@1100240003 : Text[30];
OpenMethod@1100240004 : Integer;
LockMethod@1100240005 : Integer;
Name@1100240006 : Text[200];
Str@1100240007 : Text[200];


// ODBC-Connector
CLEAR(ADOConn);
CLEAR(ADOrs);

OpenMethod := 3; // 1=adOpenKeyset; 2=adOpenDynamic; 3= adOpenStatic
LockMethod := 2; // 1=dLockreadonly; 2=adLockPessimistic; 3=adLockOptimistic; 4=adLockBatchOptimistic
CREATE(ADOConn);
ConnStr := 'PROVIDER=Microsoft.Jet.OLEDB.4.0; Data Source= c:\pruebas.mdb';

ADOConn.Open(ConnStr);
CREATE(ADOrs);

ADOrs.Open('Select * from Tabla_Prueba WHERE ID = "Id_prueba"',ADOConn,OpenMethod,LockMethod); //ejecuta la sentencia

IF NOT ADOrs.EOF THEN BEGIN //Sí no es vacío
ADOrs.MoveFirst; //Se queda apuntado al primer registro de la tabla
Name := ADOrs.Fields.Item('Referencia').Value;
Message(Name);
END;

// Close odbc connector
ADOrs.Close;
ADOConn.Close;

CLEAR(ADOrs);
CLEAR(ADOConn);



6 comentarios:

  1. Hola, muy bueno este post pero me da un error...

    ... al crear la variable AdoRs e intentar guardar el report en el que la declaro me dice "La variable ADORS::WILLCHANGEFIELD está definida más de una vez". Es un report en blanco y solo tengo esta variable creada ¿?

    ResponderEliminar
  2. Las únicas variables que tienes que crear tipo ADORS son Connection y Recordset, no WILLCHANGEFIELD.

    ResponderEliminar
  3. Sí y así está, WILLCHANGEFIELD debe ser un método de AdoRs, por eso me da el error "La variable AdoRs::Willchangefield...". En cualquier caso he cambiado a ActiveX 2.7 y de momento va bien la cosa.

    Muchas gracias

    ResponderEliminar
  4. Hola,

    En este ejemplo te quedas apuntando al primer registro de una tabla que está en una base de datos SQL.
    ¿Cómo se podría recuperar toda la tabla? Yo necesitaría copiar todos los registros a una tabla que está la en la base de datos (Navision) desde la que me conecto.

    Muchas gracias, (fantástico blog!)

    ResponderEliminar
    Respuestas
    1. ADOrs.Open('Select top 2 * from [Pacasa Biometrico SQL21]',sqlConect,3,2); //ejecuta la sentencia
      WHILE NOT ADOrs.EOF DO
      BEGIN
      //MESSAGE(FORMAT(ADOrs.Fields.Item('IdUser').Value));
      ADOrs.MoveNext();
      END;

      Eliminar
  5. Este comentario ha sido eliminado por el autor.

    ResponderEliminar