Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Insertar consulta grande de SQL en variable de VB para Macro de Excel

Estas en el tema de Insertar consulta grande de SQL en variable de VB para Macro de Excel en el foro de SQL Server en Foros del Web. Estoy intentando meter una consulta grande de SQL en una variable de VB que despues es ejecutada en el proceso de la macro, pero creo ...
  #1 (permalink)  
Antiguo 18/01/2012, 10:46
 
Fecha de Ingreso: agosto-2011
Ubicación: Edo. de Mexico
Mensajes: 12
Antigüedad: 12 años, 8 meses
Puntos: 0
Pregunta Insertar consulta grande de SQL en variable de VB para Macro de Excel

Estoy intentando meter una consulta grande de SQL en una variable de VB que despues es ejecutada en el proceso de la macro, pero creo que me pide unos saltos de linea, ó algo asi, la variable es de tipo string ya intente algunas cosas, pero incluso me toma las lineas de DECLARE como sentencias de VB parece.

Aqui les copio la parte que me da problemas:

Dim Connection1 As Object
Dim rst As Object
Dim rst1 As Object
Dim sql1 As String
Dim sql As String

sql = --USE SMSMexico_PRD
DECLARE @SalesCycleCode VARCHAR(12)
DECLARE @GeoTreeAreaCode VARCHAR(12)

/* Consulta de Actividad Switch Selling por Ciclo de Ventas y Zona
VCR, 2010-11-18, SR# 9,674,302 */

-- Configurar Código de Ciclo de Ventas
SET @SalesCycleCode = '201108'

-- Configurar Código Zona de Supervisión
SET @GeoTreeAreaCode = '840501'

CREATE TABLE ##Visitas
( CicloVentas VARCHAR(12)
, Territorio VARCHAR(12)
, CodigoCliente VARCHAR(12)
, NombreCliente VARCHAR(70)
, Estado VARCHAR(32)
, Canal VARCHAR(32)
, Subcanal VARCHAR(32)
, PotencialCliente VARCHAR(32)
, VisitActivityId UNIQUEIDENTIFIER
, CustomerId UNIQUEIDENTIFIER
)

CREATE TABLE ##Reporte
( CicloVentas VARCHAR(12)
, Territorio VARCHAR(12)
, CodigoCliente VARCHAR(12)
, NombreCliente VARCHAR(70)
, Estado VARCHAR(32)
, Canal VARCHAR(32)
, Subcanal VARCHAR(32)
, PotencialCliente VARCHAR(32)
, Subject VARCHAR(12)
, TIEMPOCATEGO VARCHAR(32)
, UTILIDCATEGO VARCHAR(1)
, PEDIDO VARCHAR(32)
, DISIPADO VARCHAR(1)
, ENTRENAMIENT VARCHAR(1)
, PAGOEMPLEADO VARCHAR(32)
, COMUNICPROMO VARCHAR(1)
, INVENTARIOS VARCHAR(1)
, REGISINVENTA VARCHAR(32)
, REGISVENTA VARCHAR(32)
, ALMACEN VARCHAR(1)
, OTRASCATEGO VARCHAR(1)
, CREDITOCAT VARCHAR(32)
, NEGOCIO VARCHAR(32)
, CREDITOCTES VARCHAR(1)
, DIASCREDITO VARCHAR(32)
, CARTEVENCID VARCHAR(1)
, INVENTFISICO VARCHAR(1)
, METODOEVALUA VARCHAR(32)
, CREDITOBANC VARCHAR(32)
, IDE VARCHAR(32)
, CONTADOR VARCHAR(1)
, VisitEndDateTime DATETIME
)

INSERT INTO ##Visitas
SELECT SalesCycleCode CicloVentas
, GeoTreeAreaCode Territorio
, CustomerCode CodigoCliente
, CustomerName NombreCliente
, CountryDescription Estado
, CustomerTypeDescription Canal
, CustomerTypeDetailDescription Subcanal
, IndustryClassificationLevelDescription PotencialCliente
, VisitActivityId
, CustomerId
FROM Customer
JOIN CustomerType ON Customer_CustomerTypeId = CustomerTypeId
JOIN CustomerTypeDetail ON Customer_CustomerTypeDetailId = CustomerTypeDetailId
JOIN CustomerAddress ON CustomerId = CustomerAddress_CustomerId
JOIN Address ON CustomerAddress_AddressId = AddressId
JOIN Country ON Address_CountryId = CountryId
JOIN IndustryClassificationLevel ON Customer_IndustryClassificationLevelId = IndustryClassificationLevelId
JOIN ( SELECT DISTINCT CustomerGeoTreeArea_CustomerId, GeoTreeAreaCode
FROM CustomerGeoTreeArea
JOIN GeoTreeArea ON CustomerGeoTreeArea_GeoTreeAreaId = GeoTreeAreaId
JOIN GeoTree ON GeoTreeArea_GeoTreeId = GeoTreeId
WHERE GeoTreeCode <> 'PWRSTMDZ'
AND GeoTreeAreaCode LIKE @GeoTreeAreaCode ) Territorio ON CustomerId = CustomerGeoTreeArea_CustomerId
JOIN ( SELECT SalesCycleCode, Visit_CustomerId, VisitActivityId
--• No Domestic Call Card (ORIGEN3)
FROM Journey, Visit, VisitActivity, SalesCycleActivity, SalesCycleActivityParameter, CallCard, SalesCycle
WHERE Visit_JourneyId = JourneyId
AND VisitId = VisitActivity_VisitId
AND VisitActivity_SalesCycleActivityId = SalesCycleActivityId
AND SalesCycleActivityId = SalesCycleActivityParameter_SalesCycleActivityId
AND SalesCycleActivityParameterValue = CAST(CallCardId AS VARCHAR(64))
AND SalesCycleActivity_SalesCycleId = SalesCycleId
AND SalesCycleCode = @SalesCycleCode
AND JourneyStatus = 'E'
AND VisitStatus = 'E'
AND CallCardCode = 'RIESGOMAY'
AND VisitActivityStatus = 'E' ) CallCards ON CustomerId = Visit_CustomerId
--WHERE CustomerCode = '0000102502'
ORDER BY 1, 2, 3


DECLARE VisitActivityCursor CURSOR FOR
SELECT VisitActivityId, CustomerId
FROM ##Visitas

DECLARE @VisitActivityId UNIQUEIDENTIFIER
DECLARE @CustomerId UNIQUEIDENTIFIER

OPEN VisitActivityCursor
FETCH VisitActivityCursor INTO @VisitActivityId, @CustomerId

WHILE @@FETCH_STATUS = 0
BEGIN

INSERT INTO ##Reporte
SELECT CicloVentas, Territorio,
CodigoCliente, NombreCliente,
Estado,
Canal, Subcanal,
PotencialCliente,
ISNULL(Answer_TIEMPOCATEGO.SubjectCode, ISNULL(Answer_UTILIDCATEGO.SubjectCode,
ISNULL(Answer_PEDIDO.SubjectCode, ISNULL(Answer_DISIPADO.SubjectCode,
ISNULL(Answer_ENTRENAMIENT.SubjectCode, ISNULL(Answer_PAGOEMPLEADO.SubjectCode,
ISNULL(Answer_REGISINVENTA.SubjectCode, ISNULL(Answer_REGISVENTA.SubjectCode,
ISNULL(Answer_ALMACEN.SubjectCode, ISNULL(Answer_OTRASCATEGO.SubjectCode,
ISNULL(Answer_CREDITOCAT.SubjectCode, ISNULL(Answer_NEGOCIO.SubjectCode,
ISNULL(Answer_CREDITOCTES.SubjectCode, ISNULL(Answer_DIASCREDITO.SubjectCode,
ISNULL(Answer_CARTEVENCID.SubjectCode, ISNULL(Answer_INVENTFISICO.SubjectCode,
ISNULL(Answer_METODOEVALUA.SubjectCode, ISNULL(Answer_CREDITOBANC.SubjectCode,
ISNULL(Answer_IDE.SubjectCode, ISNULL(Answer_CONTADOR.SubjectCode,
ISNULL(Answer_COMUNICPROMO.SubjectCode, Answer_INVENTARIOS.SubjectCode)))))))))))))))))))) ) SubjectCode,


RTRIM(ISNULL(Answer_TIEMPOCATEGO.AnswerValue, '')) TIEMPOCATEGO,
RTRIM(ISNULL(Answer_UTILIDCATEGO.AnswerValue, '')) UTILIDCATEGO,
RTRIM(ISNULL(Answer_PEDIDO.AnswerValue, '')) PEDIDO,
RTRIM(ISNULL(Answer_DISIPADO.AnswerValue, '')) DISIPADO,
RTRIM(ISNULL(Answer_ENTRENAMIENT.AnswerValue, '')) ENTRENAMIENT,
RTRIM(ISNULL(Answer_PAGOEMPLEADO.AnswerValue, '')) PAGOEMPLEADO,
RTRIM(ISNULL(Answer_COMUNICPROMO.AnswerValue, ''))COMUNICPROMO,
RTRIM(ISNULL(Answer_INVENTARIOS.AnswerValue, '')) INVENTARIOS,
RTRIM(ISNULL(Answer_REGISINVENTA.AnswerValue, '')) REGISINVENTA,
RTRIM(ISNULL(Answer_REGISVENTA.AnswerValue, '')) REGISVENTA,
RTRIM(ISNULL(Answer_ALMACEN.AnswerValue, ''))ALMACEN,
RTRIM(ISNULL(Answer_OTRASCATEGO.AnswerValue, '')) OTRASCATEGO,
RTRIM(ISNULL(Answer_CREDITOCAT.AnswerValue, '')) CREDITOCAT,
RTRIM(ISNULL(Answer_NEGOCIO.AnswerValue, '')) NEGOCIO,
RTRIM(ISNULL(Answer_CREDITOCTES.AnswerValue, ''))CREDITOCTES,
RTRIM(ISNULL(Answer_DIASCREDITO.AnswerValue, '')) DIASCREDITO,
RTRIM(ISNULL(Answer_CARTEVENCID.AnswerValue, ''))CARTEVENCID,
RTRIM(ISNULL(Answer_INVENTFISICO.AnswerValue, '')) INVENTFISICO,
RTRIM(ISNULL(Answer_METODOEVALUA.AnswerValue, '')) METODOEVALUA,
RTRIM(ISNULL(Answer_CREDITOBANC.AnswerValue, '')) CREDITOBANC,
RTRIM(ISNULL(Answer_IDE.AnswerValue, ''))IDE,
RTRIM(ISNULL(Answer_CONTADOR.AnswerValue, '')) CONTADOR
  #2 (permalink)  
Antiguo 18/01/2012, 10:55
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Insertar consulta grande de SQL en variable de VB para Macro de Excel

Hola Crack_x01:

Creo que esta pregunta está fuera de lugar, pues es un problema con VB, con con SQL Server... sería conveniente que acudas a ese foro a exponer tu problemática.

Sin embargo, si tengo una observación que hacerte. Es recomendable que en lugar de tratar de ejecutar tanto código como lo pretendes hacer utilices un Procedimiento Almacenado, de tal manera que en el programa sólo mandes a ejecutar este SP.

Saludos
Leo.
  #3 (permalink)  
Antiguo 18/01/2012, 11:07
 
Fecha de Ingreso: agosto-2011
Ubicación: Edo. de Mexico
Mensajes: 12
Antigüedad: 12 años, 8 meses
Puntos: 0
Respuesta: Insertar consulta grande de SQL en variable de VB para Macro de Excel

Si, tienes razon, asi al incluir solo una linea en la variable no da problemas, el problema es que no soy el administrador del server y aca hacen un relajote para poder crear un sp, eso si es que llegan a crearlo
  #4 (permalink)  
Antiguo 18/01/2012, 11:36
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Insertar consulta grande de SQL en variable de VB para Macro de Excel

Como DBA preferiría siempre crear un SP a permitir que un usuario haga lo que intentas hacer...

Creo que deberías hablar con tu DBA para plantear el problema, si es lo suficientemente racional como para ver el problema, permitirá crear el SP sin problemas. Ahora bien, si el burocratismo en tu empresa/dependencia es realmente un problema y en definitiva un SP no es la solución, puedes utilizar un StringBuilder para concatenar toda la consulta, no recuerdo exactamente la sintaxis, pues tengo años sin trabajar con VB, pero sería más o menos así:

Código:
Dim sql As New System.Text.StringBuilder

/*
USE SMSMexico_PRD ');*/
sql.append('DECLARE @SalesCycleCode VARCHAR(12) ');
sql.append('DECLARE @GeoTreeAreaCode VARCHAR(12) ');

/* Consulta de Actividad Switch Selling por Ciclo de Ventas y Zona ');
VCR, 2010-11-18, SR# 9,674,302 
-- Configurar Código de Ciclo de Ventas ');*/

sql.append('SET @SalesCycleCode = '201108' ');
......
......
Los comentarios no tiene caso que los incluyas es la consulta, estos no son mas que referencias para el programador, pero son desechados por el DBMS.

De tal manera que cuando requieras enviar la consulta lo haces con sql.ToString. Insisto, esto es una barbaridad tanto en programación como en BD, pero si es la única opción, pues adelante.

Saludos
Leo.
  #5 (permalink)  
Antiguo 18/01/2012, 16:36
 
Fecha de Ingreso: agosto-2011
Ubicación: Edo. de Mexico
Mensajes: 12
Antigüedad: 12 años, 8 meses
Puntos: 0
Respuesta: Insertar consulta grande de SQL en variable de VB para Macro de Excel

Muchisimas gracias, es muy buena opcion ya le di por todos lados y solo estan esta y meter el codigo sql en un objeto de texto para despues llamarlo con la conexion; la segunda me fuciono muy bien, y de la de System.Text.StringBuilder no tuve oportunidad de probarla, lo intente y al parecer no cuento con la Referencia System.Text que esta incluida en la dll mscorlib.dll misma con la que no cuenta mi equipo y al descargarlo, la maquina no deja instalarlo jejeje.

Pero esa opcion me llamo mucho la atencion me parece que de tener la dll seria exelente jajaaj lo malo que ya hasta habia hecho codigo para aplicarla.

Igual muchas gracias, que tengas buen dia.
  #6 (permalink)  
Antiguo 19/01/2012, 09:04
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Insertar consulta grande de SQL en variable de VB para Macro de Excel

Una disculpa, el StringBuilder es una clase que está implementada en ASP.NET tanto para VB como para C#... pero creo que tú estás trabajando con VB 6.0, por lo tanto ahí no existe el objeto StringBuilder.

Me alegra que hayas podido resolver tu problema, pero insisto en la parte del procedimiento almacenado. Platica con tu DBA.

Saludos
Leo.

Etiquetas: excel, grande, macro, select, sql, vb, variables
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:12.