Control gCn (conexión) - Todo lo que debes saber.

Creado por David Miralpeix, Modificado el Fri, 16 Feb 2024 a las 12:25 PM por David Miralpeix

Es una de las clases administradoras del ERP, por lo cual es instanciada una sola vez. A través de este objeto tendremos acceso a las funciones más importantes.


A través de éste objeto accederemos también a las propiedades de la conexión tales como Delegación, Usuario, etc.


A continuación se muestra un resumen de las principales propiedades y métodos



FUNCIONES DE CONSULTA



DameValorCampo:


Descripción: Obtiene el valor de un campo de tabla/vista de bbdd.


Parámetros de entrada: Instrucción SQL (con el nombre de campo como única columna de resultados)


Parámetros de salida: Variant / Valor


Más información: DameValorCampo


Ejemplo:


Código VB6:

Variable = gcn.DameValorcampo("Select RazonSocial From Clientes_Datos Where IdCliente = '00000’")
Sub Show()  
  Dim lPathDocumentos    
  lPathDocumentos  = gcn.DameValorCampo("SELECT Valor FROM Ceesi_configuracion  WHERE parametro = 'PATHFICHEROS'")   
  gCn.Obj.ShowMsgBox lPathDocumentos 
End Sub


Código C#:

string lRazonSocial= gCn.DameValorCampo("Select RazonSocial From Clientes_Datos Where IdCliente = '00000’");
private void Show()
{
	string lPathDocumentos = gCn.DameValorCampo("SELECT Valor FROM Ceesi_configuracion  WHERE parametro = 'PATHFICHEROS'");
	AhoraCore.VBA.Interaction.MsgBox(lPathDocumentos);
}



DameValorSQL:


Descripción: Ejecuta una consulta SQL devolviendo un único registro con las columnas especificadas de la clausula SELECT.


Parámetros de entrada: Sentencia SQL (string), si se muestran mensajes de error (booleano)array o lista de columnas de la consulta con su respectivas variables separadas por coma.


Parámetros de salida: Variables definidas previamente en la llamada a DameValorSQL (Variant / Valor)


Más información: DameValorSQL


Ejemplo:


Código VB6:

Sub Main()  
  frmAux.Descargar 
  gcn.damevalorsql "Select top 1 IdEmpleado, Nombre,Apellidos  from Empleados_Datos",True,"IdEmpleado",lIdEmpleado,"Nombre",lNombre,"Apellidos",lApellidos  
  gCn.Obj.ShowMsgBox "IdEmpleado: " & lIdEmpleado & " " & "Nombre: " & lApellidos  
End Sub 


Código C#:

using AhoraOCX;
using AhoraCore;

namespace AhoraScriptsVacia
{
    public class Script_0 : AhoraOCX.AhoraBaseScript
    {
        public void Main()
        {
            Valor lIdEmpleado = "";
            Valor lNombre = "";
            Valor lApellidos = "";

            gCn.DameValorSQL("Select top 1 IdEmpleado, Nombre,Apellidos from Empleados_Datos",true, "IdEmpleado", ref lIdEmpleado, "Nombre", ref lNombre, "Apellidos", ref lApellidos); 
            AhoraCore.VBA.Interaction.MsgBox($"IdEmpleado: {lIdEmpleado} Nombre: {lNombre} {lApellidos}");
        }
    }
}



EsAdmonUser:


Descripción: Devuelve un Booleano indicando si el usuario actual pertenece al grupo GRUPOADMIN.


Parámetros de salida:  Boolean / bool


Ejemplo:


Código VB6:

Variable = gcn.EsAdmonUser


Código C#:

bool lEsAdmonUser = gCn.EsAdmonUser;


IdEmpresa:


Descripción: Obtiene la empresa donde está actualmente logueado el usuario.


Parámetros de salida: Long / int


Ejemplo:


Código VB6:

 Variable = gcn.Idempresa


Código C#:

int lIdEmpresa = gCn.IdEmpresa;



IdDelegacion:


Descripción: Obtiene la delegación donde se ha logueado el usuario


Parámetros de salida: Long / int


Ejemplo:


Código VB6:

Variable = gcn.IdDelegacion


Código C#:

int lIdDelegacion = gCn.IdDelegacion;


IdDepartamento:


Descripción: Obtiene el departamento donde se ha logueado el usuario.


Parámetros de salida: Long / int


Ejemplo:


Código VB6:

 Variable = gcn.IdDepartamento

Código C#:

int lIdDepartamento = gCn.IdDepartamento;


IdEmpleado:


Descripción: Obtiene el Id Empleado del usuario


Parámetros de salida: Long / int


Ejemplo:



Código VB6:

 Variable = gcn.IdEmpleado

Código C#:

int lIdEmpleado = gCn.IdEmpleado;


BDAActual:


Descripción: Devuelve la base de datos actual


Parámetros de salida: String


Ejemplo:


Código VB6:

 Variable = gcn.BDAActual

Código C#:

string lBDAActual = gCn.BDAActual;


UsuarioActual:


Descripción: Devuelve el usuario que hizo login


Parámetros de salida: String


Ejemplo:


Código VB6:

 Variable = gcn.UsuarioActual

Código C#:

string lUsusarioActual = gCn.UsuarioActual;


BuscarPropiedad:


Descripción: Devuelve el valor de un campo especificado data una consulta SQL


Parámetros de entrada: Propiedad (String) , instrucción SQL (String)


Parámetros de salida: Variant / Valor


Ejemplo:


Código VB6:

 Variable = gCn.BuscarPropiedad("Maximo", "Select IsNull(Max(IdLista),0)+1 Maximo From Listas_PRecios_Cli")

Código C#:

Parámetros que se pasan a  BuscarPropiedad -> public Valor BuscarPropiedad(string propiedad, string sentenciaSQL)


Valor lValor = gCn.BuscarPropiedad("Maximo", "Select IsNull(Max(IdLista),0)+1 Maximo From Listas_Precios_Cli");


Existe:


Descripción: Consulta si un campo existe en la tabla


Parámetros de entrada: Campo (String), valor a comprobar (Variant), tabla donde se quiere buscar (String)  e instrucción WHERE (String, opcional). Si se le pasan datos en el parámetro Where, ingora los anteriores.


Parámetros de salida: Verdadero / Falso. Devuelve True si existe ese campo en la base de datos.


Ejemplo:


Código VB6:

If gCn.Existe("IdArticulo", "arti001", "Articulos") Then 
gCn.Obj.ShowMsgBox ("Ya existe el artículo")
End IF


Código C#:

if (gCn.Existe("IdArticulo", "IdArt0001", "Articulos"))
{
    AhoraCore.VBA.Interaction.MsgBox("Ya existe el artículo");
}


Ejemplo con parámetro WHERE:

- En este caso se omiten los 3 primeros parámetros de la función Existe().


Código VB6:

If gCn.Existe("IdArticulo", "arti001", "Pedidos_Cli_Lineas","SELECT idArticulo FROM Pedidos_Cli_Lineas WHERE idArticulo = 'arti001' AND idPedido = 7") Then
    gcn.Obj.ShowMsgBox ("Ya existe el artículo")
Else
    gcn.Obj.ShowMsgBox("NO  existe el artículo")
End If


Código C#:

if (gCn.Existe("IdArticulo", "arti001", "Pedidos_Cli_Lineas", "SELECT idArticulo FROM Pedidos_Cli_Lineas WHERE idArticulo = 'arti001' AND idPedido = 7")) {
    AhoraCore.VBA.Interaction.MsgBox("Ya existe el artículo");
} else {
    AhoraCore.VBA.Interaction.MsgBox("NO  existe el artículo");
}

ExisteSqlObj:


Descripción: Consulta un objeto de SQL (tabla, campo, procedimiento, desencadenador, etc.).


Parámetros de entrada: Nombre del objeto (String)


Parámetros de salida: Verdadero / Falso


Ejemplo:


Código VB6:

If gCn.ExisteSqlObj("clientes_datos") = True Then   
  gCn.Obj.ShowMsgBox "Existe"
Else
   gCn.Obj.ShowMsgBox "No existe"
End If


Código C#:

if (gCn.ExisteSqlObj("Clientes_Datos"))
{
AhoraCore.VBA.Interaction.MsgBox("Existe");
}
else
{
AhoraCore.VBA.Interaction.MsgBox("No existe");
}



FUNCIONES DE EJECUCIÓN



EjecutaStore:


Descripción: Ejecuta un procedimiento almacenado en la BBDD, enviando los parámetros en una matriz.


Parámetros de entrada: Nombre del procedimiento almacenado (String) y lista de parámetros en una matriz (Variant)


Parámetros de salida: Verdadero/Falso. devuelve True si se ha ejecutado correctamente.


Ejemplo:


Código VB6:

lMatlParam(0) = lwhere
 lMatlParam(1) = lusuario
 lMatlParam(2) = lorden
  If Not gCn.EjecutaStore("NombreProceso ", lMatlParam) = True Then
   gCn.Obj.ShowMsgBox "Error"
   Exit Sub
 Else
   gCn.Obj.ShowMsgBox "Proceso ejecutado correctamente", vbInformation
 End If


Código C#:

Valor[] lMatlParam = new Valor[] {lWhere, lUsuario, lOrden};
if (!(gCn.EjecutaStore("NombreProceso ", ref lMatlParam)))
{
	AhoraCore.VBA.Interaction.MsgBox("Error");
	return;
}
else
{
	AhoraCore.VBA.Interaction.MsgBox("Proceso ejecutado correctamente", vbInformation);
}


EjecutaStoreCol:


Descripción: Ejecuta un procedimiento almacenado en la BBDD, devolviendo los parámetros en una colección.


Parámetros de entrada: Nombre del procedimiento almacenado (String) y una colección con los parámetros (Variant).


Parámetros de salida: Verdadero/Falso, devuelve True si se ha ejecutado correctamente.


Ejemplo:


En la BBDD:

CREATE PROCEDURE [dbo].[pCliente_Store]
@Parametro1 varchar(30),
@Parametro2 varchar(30),
@Parametro3 varchar(50),
@Parametro4 varchar(50) OUTPUT
AS
BEGIN
--Procedimiento que me devuelve la diferencia en días entre las fechas pasadas.
SELECT @Parametro4=DATEDIFF(day,@Parametro1, @Parametro2)
--Incorrecto
--RETURN 0
--Correcto
RETURN -1
END
---Asignar permisos mediante zAsignapermisos


Código VB6:

 Set lCol = gcn.DameNewCollection
lCol.add lwhere
lCol.add lusuario
lCol.add lorden
If Not gCn.EjecutaStoreCol("NombreProceso ", lCol) = True Then
gCn.Obj.ShowMsgBox "Error"
Exit Sub
Else
gCn.Obj.ShowMsgBox "Proceso ejecutado correctamente", vbInformation
End If


 Set lColParam = gcn.dameNewCollection  
lColParam.Add "20090101"
lColParam.Add "20091231"
lColParam.Add "Texto1"
lColParam.Add 0
'Preparo la llamada a la stored
If gcn.EjecutaStoreCol ("pCliente_Store", lColParam) Then
'Recupero el Valor del parámetro de salida
gCn.Obj.ShowMsgBox "Valor parámetro salida: " & lColParam.item(4) ,vbinformation
Else
'Comprobar que exista la store.
gCn.Obj.ShowMsgBox "Error al ejecutar el procedimiento. "
End If


Sub ejEjecutaStorecol  Dim lParam   Set lParam = gcn.DameNewCollection  lParam.add "0"  lParam.add CStr(gForm.Controls("IdCliente").text)  If Not gCn.EjecutaStorecol("PClientes_Datos_CopiarArt", lParam) Then    MsgBox "No se han podido copiar los datos."  Else    MsgBox  "Datos copiados."    gForm.Controls("EObjeto").refresh  End If End Sub


Código C#:

IVB6Collection<Valor> lCol = gCn.DameNewCollection();
lCol.Add(lWhere);
lCol.Add(lUsuario);
lCol.Add(lOrden);
if (!(gCn.EjecutaStoreCol("NombreProceso ", lCol)))
{
	AhoraCore.VBA.Interaction.MsgBox("Error");
	return;
}
else
{
	AhoraCore.VBA.Interaction.MsgBox("Proceso ejecutado correctamente", vbInformation);
}
IVB6Collection<Valor> lColParam = gCn.DameNewCollection();
lColParam.Add("20090101");
lColParam.Add("20091231");
lColParam.Add("Texto1");
lColParam.Add(0);
//Preparo la llamada a la stored
if (gCn.EjecutaStoreCol("pCliente_Store", lColParam))
{
	//Recupero el Valor del parámetro de salida
	AhoraCore.VBA.Interaction.MsgBox("Valor parámetro salida: " + lColParam[4], VbMsgBoxStyle.vbInformation);
}
else 
{
	//Comprobar que exista la store.
	AhoraCore.VBA.Interaction.MsgBox("Error al ejecutar el procedimiento. ");
}
public static void ejEjecutaStorecol()
{
	IVB6Collection<Valor> lParam = gCn.DameNewCollection();
	lParam.Add("0");
	lParam.Add((gForm.Controls["IdCliente"] as ITextoUsuario).Text);
	if (!gCn.EjecutaStoreCol("PClientes_Datos_CopiarArt", lParam))
	{
		AhoraCore.VBA.Interaction.MsgBox("No se han podido copiar los datos.");
	}
	else
	{
		AhoraCore.VBA.Interaction.MsgBox("Datos copiados.");
		(gForm.Controls["EObjeto"] as IEnlaceObjetos).Refresh();
	}
}


EjecutaStoreResult:


Descripción: Ejecuta un procedimiento almacenado en la BBDD, enviando los parámetros en una matriz.


Parámetros de entrada: Nombre del procedimiento almacenado (String) y una lista de parámetros en una matriz (Variant, opcional)


Parámetros de salida: Devuelve un RecordSet de tipo IRecordSet.


Ejemplo:


Código VB6:

Variable = Gcn.EjecutaStoreResult ("NombreProceso", lMatlParam)


Código C#:

IRecordSet recordSet = gCn.EjecutaStoreResult("NombreProceso", ref lMatlParam);


ExecuteSQL:


Descripción: Ejecuta una instrucción SQL en la base de datos.


Parámetros de entrada: Instrucción SQL(String), descripción de Error de salida(String, opcional), número de error (Long, opcional), número de registros afectados (Variant, opcional), si se muestra sólo el último error (Boolean, opcional, por defecto 


True), tipo de ejecución (Enumeración de tipo eExecTipo, por defecto 0)


Código VB6:

Public Enum eExecTipo
   eExecAsyncExecute = 16
   eExecAsyncFetch = 32
   eExecAsyncFetchNonBlocking = 64
   eExecExecuteNoRecords = 128
   eExecExecuteStream = 1024
 End Enum


Parámetros de salida: Devuelve True si se ha ejecutado correctamente.


Ejemplo:


Código VB6:

Gcn.ExecuteSql "INSERT INTO Conta_Subcuentas(IdEjercicio,Subcuenta,Descrip) VALUES (1,’70000000’,’Ventas’)"
Dim lError 
If Not gCn.ExecuteSql "INSERT INTO Conta_Subcuentas(IdEjercicio, Subcuenta, Descrip) VALUES (1,’70000000’,’Ventas’)" Then  
  gCn.Obj.ShowMsgBox "Error insertando subcuenta" Else  gCn.Obj.ShowMsgBox "Subcuenta insertada sin errores" 
End If


Código C#:

gCn.ExecuteSql($"INSERT INTO Conta_Subcuentas(IdEjercicio,Subcuenta,Descrip) VALUES (1,’70000000’,’Ventas’)");
string lError;
if (!(gCn.ExecuteSql($"INSERT INTO Conta_Subcuentas(IdEjercicio, Subcuenta, Descrip) VALUES (1,’70000000’,’Ventas’)", out lError)))
{
	AhoraCore.VBA.Interaction.MsgBox("Error insertando subcuenta; " + lError);
}
else
{
	AhoraCore.VBA.Interaction.MsgBox("Subcuenta insertada sin errores");
}


OpenResultSet:


Descripción: Obtiene un conjunto de registros de BBDD


Parámetros de entrada: Consulta a ejecutar (String), tipo de cursor (Enumeración, opcional, por defecto eCurDinamico), tipo de bloqueo(Enumeración, opcional, por defecto eBloqSoloLectura), opciones (Long, opcional, por defecto -1), si traza los pasos (Boolean, opcional, por defecto True)


Enum eCursorTipo
   eCurDinamico = CursorTypeEnum.adOpenDynamic
   eCurRecorrer = CursorTypeEnum.adOpenForwardOnly
   eCurConjuntoClaves = CursorTypeEnum.adOpenKeyset
   eCurEstatico = CursorTypeEnum.adOpenStatic
   eCurSinDefinir = CursorTypeEnum.adOpenUnspecified
 End Enum 

Enum eBloqueoTipo
   eBloqOptimistaLotes = LockTypeEnum.adLockBatchOptimistic
   eBloqOptimista = LockTypeEnum.adLockOptimistic
   eBloqPesimista = LockTypeEnum.adLockPessimistic
   eBloqSoloLectura = LockTypeEnum.adLockReadOnly
   eBloqSinDefinir = LockTypeEnum.adLockUnspecified
 End Enum


Parámetros de salida: un RecordSet de tipo IRecordSet


Ejemplo:


Código VB6:

Set lcursor = gCn.OpenResultSet("SELECT descrip FROM vArticulos_Vehiculos") 
Do While Not lCursor.Eof  
  lVehi = lCursor.Campos("descrip ").Value  
  gCn.Obj.ShowMsgBox lVehi 
  lCursor.MoveNext 
Loop
sql= "Select * from VDocumentos where tabla like 'cliente'  and iddocobjeto = "&gForm.Controls("EObjeto").ObjGlobal.Propiedades("IdDoc") 
Set lrs = gCn.OpenResultSet (sql,2,3) 
If lrs.EOF  Then    
  gCn.Obj.ShowMsgBox "No hay documentos vinculados a este cliente",vbinformation   
  Exit Sub 
Else    
  gCn.Obj.ShowMsgBox "Hay documentos vinculados a este cliente"  ,vbinformation   
  Exit Sub 
End If


Código C#:

var lCursor = gCn.OpenResultSet($"SELECT descrip FROM vArticulos_Vehiculos");
do
{
	var lVehi = lCursor.Campos["Descrip"].Value;
	AhoraCore.VBA.Interaction.MsgBox(lVehi);
	lCursor.MoveNext();
} 
while (!lCursor.EOF);
string lSql = $"Select * from VDocumentos where tabla like 'cliente'  and iddocobjeto = {(gForm.Controls["EObjeto"] as IEnlaceObjetos).ObjGlobal["IdDoc"]}";
IRecordSet lRs = gCn.OpenResultSet(lSql, 2, 3);
if (lRs.EOF)
{
	AhoraCore.VBA.Interaction.MsgBox("No hay documentos vinculados a este cliente", vbInformation);
	return;
}
else
{
	AhoraCore.VBA.Interaction.MsgBox("Hay documentos vinculados a este cliente", vbInformation);
	return;
}


AhoraProceso:


Descripción: Ejecuta un proceso Ahora_Proceso.


Parámetros de entrada: Nombre del proceso (String), parámetro de retorno (Variant), array con los parámetros que pide el proceso.


Parámetros de salida: Valor que retorna el proceso


Ejemplo:


Código VB6:

Sub Main()  
  frmAux.Descargar      'ATENCIÓN: DEBE ESTAR SIEMPRE QUE NO SE MUESTRE EL FORMULARIO. 
  lE_Mail = "destinatario@dominio.es"  
  lAsunto = "Prueba de Asunto"  
  lDetalle = "Prueba de Detalle" 
  lArchivo = "TPV.txt"  
  lRutaArchivo = "F:\Temp\datos.txt"  gCn.AhoraProceso "Enviar_Correo", False, gCn, False, lE_Mail, lAsunto, lDetalle, "nada", lRutaArchivo  

End Sub 

Código C#:

using AhoraOCX;
using AhoraCore;

namespace AhoraScriptsVacia
{
    public class Script_0 : AhoraOCX.AhoraBaseScript
    {
        public void Main()
        {
            string lE_Mail = "destinatario@dominio.es";
            string lAsunto = "Prueba de Asunto";
            string lDetalle = "Prueba de Detalle";
            string lArchivo = "TPV.txt";
            string lRutaArchivo = "F:\Temp\datos.txt";
            Valor[] lParams = { lE_Mail, lAsunto, lDetalle, lArchivo, lRutaArchivo };
            gCn.AhoraProceso("Enviar_Correo", out _, lParams);
    }
}



ActualizaValorCampo (no usar):


Este método está obsoleto. Se debe utilizar el método ExecuteSql.

BeginTrans, CommitTrans, RollbackTrans:


Descripción: Inicia, confirma o deshace la transacción.


Parámetros de salida: Verdadero / Falso. Devuelve verdadero si se ha ejecutado correctamente.


Ejemplo:


Código VB6:

 gCn.BeginTrans
 'acciones con control de errores
 If todoOk = True
   gCn.CommitTrans
   gCn.Obj.ShowMsgBox "Finalizado correctamente"
 Else
   gCn.RollbackTrans
   gCn.Obj.ShowMsgBox "Error"
 End If 
Sub ejTransacciones  
  gCn.BeginTrans  
  lsql= "Select * From clientes_datos where IdCliente = "  & 
  gForm.Controls("EObjeto").ObjGlobal.Propiedades("IdCliente")  
  If Not gcn.ActualizaValorCampo (lsql, "direccion", "dirección nueva") Then   
    gCn.Obj.ShowMsgBox "No se han podido actualizar los datos."     
    gCn.RollbackTrans  
  Else    
    gForm.Controls("EObjeto").refresh    
    gCn.Obj.ShowMsgBox  "Datos actualizados."    
    gCn.CommitTrans  
End If 
End Sub 


Código C#:

gCn.BeginTrans();
//acciones con control de errores
if (todoOk = True) {
   gCn.CommitTrans();
   AhoraCore.VBA.Interaction.MsgBox("Finalizado correctamente");
} else {
   gCn.RollbackTrans();
   AhoraCore.VBA.Interaction.MsgBox("Error");
}
public static void ejTransacciones()
{
	gCn.BeginTrans();
	string lSql = $"Select * From clientes_datos where IdCliente ={(gForm.Controls["EObjeto"] as IEnlaceObjetos).ObjGlobal["IdCliente"]}";
	if (!(gCn.ExecuteSql(lSql))
	{
		AhoraCore.VBA.Interaction.MsgBox("No se han podido actualizar los datos.");
		gCn.RollbackTrans();
	}
	else
	{
		(gForm.Controls("EObjeto") as IEnlaceObjetos).Refresh();
		AhoraCore.VBA.Interaction.MsgBox("Datos actualizados.");
		gCn.CommitTrans();
	}
	return;
}



¿Le ha sido útil este artículo?

¡Qué bien!

Gracias por sus comentarios

¡Sentimos mucho no haber sido de ayuda!

Gracias por sus comentarios

¡Háganos saber cómo podemos mejorar este artículo!

Seleccione al menos una de las razones
Se requiere la verificación del CAPTCHA.

Sus comentarios se han enviado

Agradecemos su esfuerzo e intentaremos corregir el artículo