crear un informe TXT a partir de una par de tablas

13/04/2004 - 15:44 por antidesco | Informe spam
Hola

puede ser un poco tonta la consulta pero quiero generar un informe en
formato txt,

texto descriptivo XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXxxxxxx (este varía
según condiciones)
encabezado XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXxxxx
descripción
campo1 campo2 campo3
xxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxx

encabezado XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXxxxx
descripción
campo1 campo2 campo3
xxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxx

encabezado XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXxxxx
descripción
campo1 campo2 campo3
xxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxx

el encabezado es una tabla relacionada de 1 a N a la descripción, esto lo
quiero para formar el cuerpo de un correo automático estoy usando el
XPSMTP.DLL que permite mandar correos SMTP parametrizados (por si alguien le
interesa el tema http://www.sqldev.net/xp/xpsmtp.htm) lo quiero meter en una
DTS en que analice varias variables y mande automáticamente el correo,
supongo que se puede hacer con un activex script, ¿alguien tiene algún
ejemplo de algo así? estoy usando SQL 7.0, desde ya un agradecimiento si me
pueden ayudar.

Preguntas similare

Leer las respuestas

#6 antidesco
13/04/2004 - 21:33 | Informe spam
Hola
bueno como yo soy aun más polémico ;) y tengo un carácter medio tozudo y
generalmente no me quedo con la primera opinión hice un par de
averiguaciones y llegué a al siguiente código de prueba, que realiza lo que
quiero se los adjunto si a alguien le sirve.

Function Main()
dim oFSO
dim x
set oFSO = CreateObject("Scripting.FileSystemObject")
Const ForReading = 1, ForWriting = 2, ForAppending = 8

' habrir el archivo y generar el encabezado
set x = oFSO.OpenTextFile("C:\test.txt", ForWriting, True)
x.Write "Srs. "+chr(13)+chr(10)
x.Write "Se ha recibido del sistema automatico de ingreso de pedidos el
o los pedidos siguientes "+chr(13)+chr(10)
x.Write chr(13)+chr(10)
' habro la base y busco los datos que necesito
set myConn = CreateObject("ADODB.Connection")
set myRecordset = CreateObject("ADODB.Recordset")
dim countr
Const adOpenForwardOnly = 0
Const adOpenKeyset = 1
Const adOpenDynamic = 2
Const adOpenStatic = 3

Const adCmdUnknown = &H0008
Const adCmdText = &H0001
Const adCmdTable = &H0002
Const adCmdStoredProc = &H0004
set mySourceConn = CreateObject("ADODB.Connection")
set mySourceRecordset = CreateObject("ADODB.Recordset")
mySourceConn.Open = "Provider=SQLOLEDB.1;Data SourceÍ-SIPSA; Initial
Catalog=AUTOCOR;user id = 'xx';password='xxx'"

mySQLCmdText = "Select * from test"
mySourceRecordset.Open mySQLCmdText, mySourceConn, adOpenKeyset
If mySourceRecordset.RecordCount < 1 Then
MsgBox " No hay registros"
Main = DTSTaskExecResult_Failure
Else
dim EmpID, TerrID, myDestSQL
set myDestConn CreateObject("ADODB.Connection")
myDestConn.Open = "Provider=SQLOLEDB.1;Data
SourceÍ-SIPSA; Initial Catalog=AUTOCOR;user id = 'xxxx';password='xxxx'"
for countr = 1 to
mySourceRecordset.RecordCount
EmpID mySourceRecordset.Fields("t1").value
TerrID mySourceRecordset.Fields("t2").value
'grabo en el txt un
registro
x.Write " "+
EmpID+" "+ TerrID + chr(13)+chr(10)

mySourceRecordset.MoveNext
Next

end if
x.Close

Main = DTSTaskExecResult_Success

End Function


********************************
ahora bien esto se ejecuta casi en un parpadeo, no creo que sea de alto
requerimiento como para no hacerlo acá , mi idea siempre es dejar lo más
claro posible lo que hago en la base por ende a mi modo de ver este tipo de
cosas debe estar en la DTS y no en algo exógeno como Crystal report, además
es SQL 7 y no tengo Report Services de 2000 como para ocupar esa capacidad,
no se que opinan


"Víctor Rafael Bocanegra Arias" escribió en
el mensaje news:
Como siempre YO creando polemica. Tienen toda la razon (quizas, no estoy


muy
seguro) al decir que no se debe implementar ello en el motor, pero si yo
solo tengo el motor de BD y por A,B,C motivos no cuento con otro


aplicativo
ya sea para crear un objeto COM o para crear un reporte Crystal Report,
Report Service... Creo que lo deberia hacer en lo que tengo. Ese es mi


punto
de vista, hay que usar lo que se tiene.

Victor Rafael Bocanegra Arias
Lima, Peru


"Jose Mariano Alvarez (MUG)" <jose.alvarez * *Arroba* * mug.org.ar>


escribió
en el mensaje news:
> O Report Services si tienes 2000
>
> Jose Mariano Alvarez
> Comunidad de base de datos
> Grupo de Usuarios Microsoft
> www.mug.org.ar
>
>
>
> "Isaías" wrote in message
> news:1bf1201c4217c$51b6eae0$
> > Totalmente de acuerdo con Max, aunque se podria, aplicando
> > algunos trucos, no es recomendable, es mejor acudir a
> > herramientas como CRYSTAL REPORT
>
>


Respuesta Responder a este mensaje
#7 Jose Mariano Alvarez \(MUG\)
13/04/2004 - 21:43 | Informe spam
Si pero precisas VS.NET para sacarle provecho a Report Services.

Si lo que quiere hacer son reportes, de esa forma, sugiero que uses cursores
FAST_FORWARD para armar los cortes de control y uses funciones por ejemplo.
(no me maten por la sugerencia de usar cursores). Los cursores son LO PEOR
que puedes usar en el SQL Server y suelen afectarlo muy negativamente pero
son faciles de programar para estos casos. Piensa tambien en hacer lecturas
sucias usando nolock si fuera necesario.

Jose Mariano Alvarez
Comunidad de base de datos
Grupo de Usuarios Microsoft
www.mug.org.ar



"Maximiliano D. A." wrote in message
news:%
Hola, .NET es Free, solo lo descargas y listo.

Ademas el Report Service si tienes las licencias de 2000 standard o
Entherprise, Microsoft te lo envia de forma gratuita!!

;-)

Bye


Salu2
Maxi

Buenos Aires Argentina
Desarrollador Microsoft 3 Estrellas .NET

MSN:
Nunca consideres el estudio como una obligación sino como
una oportunidad para penetrar en el bello y maravillosos
mundo del saber.
- Albert Einstein



"Víctor Rafael Bocanegra Arias" escribió en
el mensaje news:
> Como siempre YO creando polemica. Tienen toda la razon (quizas, no estoy
muy
> seguro) al decir que no se debe implementar ello en el motor, pero si yo
> solo tengo el motor de BD y por A,B,C motivos no cuento con otro
aplicativo
> ya sea para crear un objeto COM o para crear un reporte Crystal Report,
> Report Service... Creo que lo deberia hacer en lo que tengo. Ese es mi
punto
> de vista, hay que usar lo que se tiene.
>
> Victor Rafael Bocanegra Arias
> Lima, Peru
>
>
> "Jose Mariano Alvarez (MUG)" <jose.alvarez * *Arroba* * mug.org.ar>
escribió
> en el mensaje news:
> > O Report Services si tienes 2000
> >
> > Jose Mariano Alvarez
> > Comunidad de base de datos
> > Grupo de Usuarios Microsoft
> > www.mug.org.ar
> >
> >
> >
> > "Isaías" wrote in message
> > news:1bf1201c4217c$51b6eae0$
> > > Totalmente de acuerdo con Max, aunque se podria, aplicando
> > > algunos trucos, no es recomendable, es mejor acudir a
> > > herramientas como CRYSTAL REPORT
> >
> >
>
>



Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.655 / Virus Database: 420 - Release Date: 08/04/2004


Respuesta Responder a este mensaje
#8 Jose Mariano Alvarez \(MUG\)
13/04/2004 - 21:46 | Informe spam
Si puedes ejecutar FSO sin problemas por los antivirus o cosas asi es una
buena alternativa.

Jose Mariano Alvarez
Comunidad de base de datos
Grupo de Usuarios Microsoft
www.mug.org.ar



"antidesco" wrote in message
news:
Hola
bueno como yo soy aun más polémico ;) y tengo un carácter medio tozudo y
generalmente no me quedo con la primera opinión hice un par de
averiguaciones y llegué a al siguiente código de prueba, que realiza lo


que
quiero se los adjunto si a alguien le sirve.

Function Main()
dim oFSO
dim x
set oFSO = CreateObject("Scripting.FileSystemObject")
Const ForReading = 1, ForWriting = 2, ForAppending = 8

' habrir el archivo y generar el encabezado
set x = oFSO.OpenTextFile("C:\test.txt", ForWriting, True)
x.Write "Srs. "+chr(13)+chr(10)
x.Write "Se ha recibido del sistema automatico de ingreso de pedidos


el
o los pedidos siguientes "+chr(13)+chr(10)
x.Write chr(13)+chr(10)
' habro la base y busco los datos que necesito
set myConn = CreateObject("ADODB.Connection")
set myRecordset = CreateObject("ADODB.Recordset")
dim countr
Const adOpenForwardOnly = 0
Const adOpenKeyset = 1
Const adOpenDynamic = 2
Const adOpenStatic = 3

Const adCmdUnknown = &H0008
Const adCmdText = &H0001
Const adCmdTable = &H0002
Const adCmdStoredProc = &H0004
set mySourceConn = CreateObject("ADODB.Connection")
set mySourceRecordset = CreateObject("ADODB.Recordset")
mySourceConn.Open = "Provider=SQLOLEDB.1;Data SourceÍ-SIPSA; Initial
Catalog=AUTOCOR;user id = 'xx';password='xxx'"

mySQLCmdText = "Select * from test"
mySourceRecordset.Open mySQLCmdText, mySourceConn,


adOpenKeyset
If mySourceRecordset.RecordCount < 1 Then
MsgBox " No hay registros"
Main = DTSTaskExecResult_Failure
Else
dim EmpID, TerrID, myDestSQL
set myDestConn > CreateObject("ADODB.Connection")
myDestConn.Open "Provider=SQLOLEDB.1;Data
SourceÍ-SIPSA; Initial Catalog=AUTOCOR;user id = 'xxxx';password='xxxx'"
for countr = 1 to
mySourceRecordset.RecordCount
EmpID > mySourceRecordset.Fields("t1").value
TerrID > mySourceRecordset.Fields("t2").value
'grabo en el txt un
registro
x.Write " "+
EmpID+" "+ TerrID + chr(13)+chr(10)

mySourceRecordset.MoveNext
Next

end if
x.Close

Main = DTSTaskExecResult_Success

End Function


********************************
ahora bien esto se ejecuta casi en un parpadeo, no creo que sea de alto
requerimiento como para no hacerlo acá , mi idea siempre es dejar lo más
claro posible lo que hago en la base por ende a mi modo de ver este tipo


de
cosas debe estar en la DTS y no en algo exógeno como Crystal report,


además
es SQL 7 y no tengo Report Services de 2000 como para ocupar esa


capacidad,
no se que opinan


"Víctor Rafael Bocanegra Arias" escribió en
el mensaje news:
> Como siempre YO creando polemica. Tienen toda la razon (quizas, no estoy
muy
> seguro) al decir que no se debe implementar ello en el motor, pero si yo
> solo tengo el motor de BD y por A,B,C motivos no cuento con otro
aplicativo
> ya sea para crear un objeto COM o para crear un reporte Crystal Report,
> Report Service... Creo que lo deberia hacer en lo que tengo. Ese es mi
punto
> de vista, hay que usar lo que se tiene.
>
> Victor Rafael Bocanegra Arias
> Lima, Peru
>
>
> "Jose Mariano Alvarez (MUG)" <jose.alvarez * *Arroba* * mug.org.ar>
escribió
> en el mensaje news:
> > O Report Services si tienes 2000
> >
> > Jose Mariano Alvarez
> > Comunidad de base de datos
> > Grupo de Usuarios Microsoft
> > www.mug.org.ar
> >
> >
> >
> > "Isaías" wrote in message
> > news:1bf1201c4217c$51b6eae0$
> > > Totalmente de acuerdo con Max, aunque se podria, aplicando
> > > algunos trucos, no es recomendable, es mejor acudir a
> > > herramientas como CRYSTAL REPORT
> >
> >
>
>


Respuesta Responder a este mensaje
#9 Maximiliano D. A.
13/04/2004 - 21:46 | Informe spam
mmm no estoy para nada de acuerdo, pienso que debes usar RS, yo lo instale y
no vi la necesidad de VS para poderlo usar ni mucho menos!!

Bye


Salu2
Maxi

Buenos Aires Argentina
Desarrollador Microsoft 3 Estrellas .NET

MSN:
Nunca consideres el estudio como una obligación sino como
una oportunidad para penetrar en el bello y maravillosos
mundo del saber.
- Albert Einstein



"Jose Mariano Alvarez (MUG)" <jose.alvarez * *Arroba* * mug.org.ar> escribió
en el mensaje news:
Si pero precisas VS.NET para sacarle provecho a Report Services.

Si lo que quiere hacer son reportes, de esa forma, sugiero que uses


cursores
FAST_FORWARD para armar los cortes de control y uses funciones por


ejemplo.
(no me maten por la sugerencia de usar cursores). Los cursores son LO PEOR
que puedes usar en el SQL Server y suelen afectarlo muy negativamente pero
son faciles de programar para estos casos. Piensa tambien en hacer


lecturas
sucias usando nolock si fuera necesario.

Jose Mariano Alvarez
Comunidad de base de datos
Grupo de Usuarios Microsoft
www.mug.org.ar



"Maximiliano D. A." wrote in message
news:%
> Hola, .NET es Free, solo lo descargas y listo.
>
> Ademas el Report Service si tienes las licencias de 2000 standard o
> Entherprise, Microsoft te lo envia de forma gratuita!!
>
> ;-)
>
> Bye
>
>
> Salu2
> Maxi
>
> Buenos Aires Argentina
> Desarrollador Microsoft 3 Estrellas .NET
>
> MSN:
> Nunca consideres el estudio como una obligación sino como
> una oportunidad para penetrar en el bello y maravillosos
> mundo del saber.
> - Albert Einstein
>
>
>
> "Víctor Rafael Bocanegra Arias" escribió


en
> el mensaje news:
> > Como siempre YO creando polemica. Tienen toda la razon (quizas, no


estoy
> muy
> > seguro) al decir que no se debe implementar ello en el motor, pero si


yo
> > solo tengo el motor de BD y por A,B,C motivos no cuento con otro
> aplicativo
> > ya sea para crear un objeto COM o para crear un reporte Crystal


Report,
> > Report Service... Creo que lo deberia hacer en lo que tengo. Ese es mi
> punto
> > de vista, hay que usar lo que se tiene.
> >
> > Victor Rafael Bocanegra Arias
> > Lima, Peru
> >
> >
> > "Jose Mariano Alvarez (MUG)" <jose.alvarez * *Arroba* * mug.org.ar>
> escribió
> > en el mensaje news:
> > > O Report Services si tienes 2000
> > >
> > > Jose Mariano Alvarez
> > > Comunidad de base de datos
> > > Grupo de Usuarios Microsoft
> > > www.mug.org.ar
> > >
> > >
> > >
> > > "Isaías" wrote in message
> > > news:1bf1201c4217c$51b6eae0$
> > > > Totalmente de acuerdo con Max, aunque se podria, aplicando
> > > > algunos trucos, no es recomendable, es mejor acudir a
> > > > herramientas como CRYSTAL REPORT
> > >
> > >
> >
> >
>
>
>
> Outgoing mail is certified Virus Free.
> Checked by AVG anti-virus system (http://www.grisoft.com).
> Version: 6.0.655 / Virus Database: 420 - Release Date: 08/04/2004
>
>







Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.655 / Virus Database: 420 - Release Date: 08/04/2004
Respuesta Responder a este mensaje
#10 Manuel Etcheto
14/04/2004 - 06:40 | Informe spam
Hola
Si vas a hacerlo por medio de un script, probá esto que
debería ser mucho más eficiente que un bucle
(lo que no entendí es para qué es la segunda connection en
tu código)

Function Main()
Dim conSQL, Rs, strTabla, oFSO, x

set conSQL = CreateObject("ADODB.Connection")
conSQL.Open = "Provider=SQLOLEDB.."

Set Rs = conSQL.execute("SELECT t1, t2 FROM test")
With Rs
If Not .EOF Then
' toma los campos separados por Tab en una variable
strTabla = .GetString(2, , chr(9), chr(13) & chr(10))
End If
.Close
End With

conSQL.Close
Set conSQL = Nothing
Set Rs = Nothing

If not isEmpty(strTabla) Then
Const ForWriting = 2
set oFSO = CreateObject("Scripting.FileSystemObject")
set x = oFSO.OpenTextFile("C:\test.txt", ForWriting, True)
With x
.Write "Srs. "+chr(13)+chr(10)
.Write "Se ha recibido del sistema automatico de ingreso
de pedidos el o los pedidos siguientes"
.Write chr(13) & chr(10) & chr(13) & chr(10)
.Write strTabla
End With
Set oFSO = Nothing
Set x = Nothing
Main = DTSTaskExecResult_Success
Else
MsgBox " No hay registros"
Main = DTSTaskExecResult_Failure
End If

End Function

Suerte
Manuel



Hola
bueno como yo soy aun más polémico ;) y tengo un carácter


medio tozudo y
generalmente no me quedo con la primera opinión hice un


par de
averiguaciones y llegué a al siguiente código de prueba,


que realiza lo que
quiero se los adjunto si a alguien le sirve.

Function Main()
dim oFSO
dim x
set oFSO = CreateObject("Scripting.FileSystemObject")
Const ForReading = 1, ForWriting = 2, ForAppending = 8

' habrir el archivo y generar el encabezado
set x = oFSO.OpenTextFile("C:\test.txt", ForWriting,


True)
x.Write "Srs. "+chr(13)+chr(10)
x.Write "Se ha recibido del sistema automatico de


ingreso de pedidos el
o los pedidos siguientes "+chr(13)+chr(10)
x.Write chr(13)+chr(10)
' habro la base y busco los datos que necesito
set myConn = CreateObject("ADODB.Connection")
set myRecordset = CreateObject("ADODB.Recordset")
dim countr
Const adOpenForwardOnly = 0
Const adOpenKeyset = 1
Const adOpenDynamic = 2
Const adOpenStatic = 3

Const adCmdUnknown = &H0008
Const adCmdText = &H0001
Const adCmdTable = &H0002
Const adCmdStoredProc = &H0004
set mySourceConn = CreateObject("ADODB.Connection")
set mySourceRecordset = CreateObject


("ADODB.Recordset")
mySourceConn.Open = "Provider=SQLOLEDB.1;Data


SourceÍ-SIPSA; Initial
Catalog=AUTOCOR;user id = 'xx';password='xxx'"

mySQLCmdText = "Select * from test"
mySourceRecordset.Open mySQLCmdText,


mySourceConn, adOpenKeyset
If mySourceRecordset.RecordCount < 1 Then
MsgBox " No hay


registros"
Main = DTSTaskExecResult_Failure
Else
dim EmpID, TerrID,


myDestSQL
set myDestConn >CreateObject("ADODB.Connection")
myDestConn.Open


= "Provider=SQLOLEDB.1;Data
SourceÍ-SIPSA; Initial Catalog=AUTOCOR;user id


= 'xxxx';password='xxxx'"
for countr = 1 to
mySourceRecordset.RecordCount



EmpID >mySourceRecordset.Fields("t1").value



TerrID >mySourceRecordset.Fields("t2").value
'gra


bo en el txt un
registro



x.Write " "+
EmpID+" "+ TerrID + chr(13)+chr(10)

mySourceRecordset.MoveNext
Next

end if
x.Close

Main = DTSTaskExecResult_Success

End Function


********************************
ahora bien esto se ejecuta casi en un parpadeo, no creo


que sea de alto
requerimiento como para no hacerlo acá , mi idea siempre


es dejar lo más
claro posible lo que hago en la base por ende a mi modo


de ver este tipo de
cosas debe estar en la DTS y no en algo exógeno como


Crystal report, además
es SQL 7 y no tengo Report Services de 2000 como para


ocupar esa capacidad,
no se que opinan
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida