necesito opiniones sobre este tema

28/09/2006 - 09:28 por Sonia | Informe spam
a ver si podeis solucionar mi duda.
cuando entre a trabajar en una empresa (editorial) habia u programa hecho en
vb6 q usaban 20 operadoras y la bd es acces97 y estaba en un pc servidor.
todos los ordenadores son xp menos el servidor q es win 2000.

cuando llegue querian hacer mejoras en esa aplicacion q basicamente consiste
en consultar colegios, hacer pedidos...en definitiva consultar y modificar
la bd acces y mostrar la informacion a traves de textbox, datagrids y
listview

en vez de seguir con esta aplicacion en vb6 , como no la habia hecho yo y
cada uno entiende lo q hace, empeze a hacerla de nuevo con el microsoft
visual studio .net 2003 y asi he hecho las mejoras incluso otra aplicacion q
consiste en ampliar la q tenia para tratar los temas de facturacion,
albaranes control de stock, etiquetas en crystal, control de acceso de las
operadoras etc

el problema llego cuando se ponen todas en la aplicacion ya q si la comparo
con la del vb6, esta del .net es bastante mas lenta. al hacer alguna
modificacion, se actueliza el listview o lo q sea y eso lleva unos segundos.
sobretodo el formulario principal q ponen un codigo de un colegio y se
tienen q llenar 4 datagrids y un registro(10 textbox)

entonces ahora me planteo como es posible si se supone q el .net tiene
bastantes mejoras y teoricamente va bastante mas rapido, como es en mi caso
totalmente contrario. ya se q lo ideal seria hacer la bd sql pero eso de
momento no es posible.

puede ser q no haya exprimido el .net y q no haya hecho la aplicacion de la
forma mas eficaz? (la verdad es q es mi primera aplicacion)

y otra cosa:
puede ser tb la forma de conexion a la bd? yo lo q hago es conectar a la bd
una vez entro en la aplicacion. eso lo he puesto en un modulo donde pongo
mas funciones como las vaiables globales, el llenar un datagrid...etc

no se si seria mejor y si se puede hacer la conexion en cada formulario y/o
solo conectar las tablas q te hicieran falta para ese form. no se si esto
sera posible.
esto ultimo me vendria bien para q las tablas referentes a la facturacion
solo se conectaran a la bd en la 2º aplicacion, ya q al generar la factura
tengo q ir guardando todas las lineas de un listview y cuesta bastante si
son muchas.

queria saber, aparte de opiniones sobre pq puede ir mas lento en vb .net q
envb6, si es posible q al hacer la conexion no influya en todas las tablas
para asi ir mas rapido o si para cada cambio q se haya de la bd solo se
active/conecte la tabla en cuestion en vez de toda la bd hago casi todas las
coenxiones usando estas funciones(os las pongo x si sabeis mejoras o si
se puede cambiar lo de la conexion), ya q casi todos los ejemplos q veo son
usando sql
Gracias!

Imports System.Data.OleDb
Sub main()
Path1 = System.IO.Path.GetFullPath("\\Equipo3\C\DYLR\")
ArchivoDatos = path1 & "dyla.mdb"
CadenaConexion = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" &
ArchivoDatos & ";Persist Security Info=False"
Dim frm As New principal
frm.ShowDialog()
End Sub

'funciones
Public Sub Gestionar(ByVal sql As String)
Dim conexion As New OleDb.OleDbConnection
conexion.ConnectionString = CadenaConexion
conexion.Open()
Dim Comando As OleDbCommand = New OleDbCommand
Comando.Connection = conexion
Comando.Transaction = conexion.BeginTransaction
Try
Comando.CommandText = sql
Comando.ExecuteNonQuery()
Comando.Transaction.Commit()
Correcto = True
Catch Errorcito As Exception
Comando.Transaction.Rollback()
Correcto = False
MsgBox("Operación no realizada", MsgBoxStyle.Critical, "Error de
la aplicación")
Finally
conexion.Close()
conexion.Dispose()
End Try
End Sub

Public Sub CrearMiOleDbCommand(ByVal myExecuteQuery As String, ByVal
myConnectionString As String)
Try
Dim myConnection As New OleDbConnection(myConnectionString)
Dim myCommand As New OleDbCommand(myExecuteQuery, myConnection)

myCommand.Connection.Open()
myCommand.ExecuteNonQuery()
myConnection.Close()
myConnection.Dispose()
Catch ee As Exception
MessageBox.Show(ee.Message)
End Try
End Sub

Preguntas similare

Leer las respuestas

#11 Sonia
02/10/2006 - 13:02 | Informe spam
gracias. si q funciona
para llenar los textbox no hay ningun truco de esos? pq ahora en el form
principal se llenan antes los 4 listview q los 12 textbox q relleno con una
funcion leer_registro q hace esto: (no se si habra tb una forma mas
eficiente)

Private Sub leer_registro(ByVal colegio As String)
Dim x As Int16
Dim tb As System.Windows.Forms.Control
ReDim registro(12)
mysql = "SELECT CENTROS1.NOMBR, CENTROS1.DIREC, CENTROS1.LOCALIDAD,
CENTROS1.PROVI, CENTROS1.DPOST, CENTROS1.TELEF, CENTROS1.EMAIL,
CENTROS1.NUFAX, CENTROS1.CLASE, CENTROS1.AULAS_CURSO, CENTROS1.PREFERENTE,
CENTROS1.CONGREGACION, CENTROS1.REEMBOLSO"
mysql = mysql & " FROM CENTROS1 where centros1.KLAVE = '" &
Clave.Text & "';"
Dim myReader As OleDbDataReader
Dim myConnection As New OleDbConnection(CadenaConexion)
Dim myCommand As New OleDbCommand(mysql, myConnection)
myCommand.Connection.Open()
myReader = myCommand.ExecuteReader(CommandBehavior.CloseConnection)
While myReader.Read()
For x = 0 To 12 ' El bucle ha de ser = a la dimensión del
registro
registro(x) = myReader.Item(x).ToString
Next
End While
myReader.Close() : myConnection.Close() : myCommand.Dispose() ':
myConnection.Dispose() '*****

For Each tb In Me.Controls
If TypeOf tb Is TextBox Then
If tb.TabIndex <= 12 Then
tb.Text = registro(tb.TabIndex)
End If
End If
Next
End Sub


"Eduardo Alvarado Meza" <ealvarado_15@(eliminarestetexto)hotmail.com>
escribió en el mensaje news:
Sonia, si quieres ver un amento de velocidad en el llenado de velocidad
quita todos los doevents y antes de llenar el listview escribes:
Milistview.BeginUpdate

y cuando lo llenes todo completamente escribe:
Milistview.EndUpdate



Respuesta Responder a este mensaje
#12 floyd303
02/10/2006 - 15:13 | Informe spam
Hola Sonia!

No entiendo porque no haces lo siguiente:

Private Sub leer_registro(ByVal colegio As String)
mysql = "SELECT CENTROS1.NOMBR, CENTROS1.DIREC,
CENTROS1.LOCALIDAD,
CENTROS1.PROVI, CENTROS1.DPOST, CENTROS1.TELEF, CENTROS1.EMAIL,
CENTROS1.NUFAX, CENTROS1.CLASE, CENTROS1.AULAS_CURSO,
CENTROS1.PREFERENTE,
CENTROS1.CONGREGACION, CENTROS1.REEMBOLSO"
mysql = mysql & " FROM CENTROS1 where centros1.KLAVE = '" &
Clave.Text & "';"
Dim myReader As OleDbDataReader
Dim myConnection As New OleDbConnection(CadenaConexion)
Dim myCommand As New OleDbCommand(mysql, myConnection)
myCommand.Connection.Open()
myReader myCommand.ExecuteReader(CommandBehavior.CloseConnection)
if myReader.Read()
txtNombreCentro.Text = myReader.Item("NOMBR");
txtDireccionCentro.Text = myReader.Item("DIREC");
txtLocalidadCentro.Text = myReader.Item("LOCALIDAD");
txtProvinciaCentro.Text = myReader.Item("PROVI");
txtDPostCentro.Text = myReader.Item("DPOST");
txtTelefonoCentro.Text = myReader.Item("TELEF");
txtEmailCentro.Text = myReader.Item("EMAIL");
txtFaxCentro.Text = myReader.Item("NUFAX");
txtClaseCentro.Text = myReader.Item("CLASE");
txtCursoCentro.Text = myReader.Item("AULAS_CURSO");
txtPreferenteCentro.Text = myReader.Item("PREFERENTE");
txtCongregacionCentro.Text = myReader.Item("CONGREGACION");
txtReembolsoCentro.Text = myReader.Item("REEMBOLSO");
End While
myReader.Close() : myConnection.Close() : myCommand.Dispose()
':
myConnection.Dispose() '*****
End Sub

Teniendo en cuenta que has nombrado cada uno de los 13 textboxes como
te he indicado: txtNombreCentro, txtDireccionCentro, etc...

Saludos
Roberto M. Oliva

Sonia ha escrito:

gracias. si q funciona
para llenar los textbox no hay ningun truco de esos? pq ahora en el form
principal se llenan antes los 4 listview q los 12 textbox q relleno con una
funcion leer_registro q hace esto: (no se si habra tb una forma mas
eficiente)

Private Sub leer_registro(ByVal colegio As String)
Dim x As Int16
Dim tb As System.Windows.Forms.Control
ReDim registro(12)
mysql = "SELECT CENTROS1.NOMBR, CENTROS1.DIREC, CENTROS1.LOCALIDAD,
CENTROS1.PROVI, CENTROS1.DPOST, CENTROS1.TELEF, CENTROS1.EMAIL,
CENTROS1.NUFAX, CENTROS1.CLASE, CENTROS1.AULAS_CURSO, CENTROS1.PREFERENTE,
CENTROS1.CONGREGACION, CENTROS1.REEMBOLSO"
mysql = mysql & " FROM CENTROS1 where centros1.KLAVE = '" &
Clave.Text & "';"
Dim myReader As OleDbDataReader
Dim myConnection As New OleDbConnection(CadenaConexion)
Dim myCommand As New OleDbCommand(mysql, myConnection)
myCommand.Connection.Open()
myReader = myCommand.ExecuteReader(CommandBehavior.CloseConnection)
While myReader.Read()
For x = 0 To 12 ' El bucle ha de ser = a la dimensión del
registro
registro(x) = myReader.Item(x).ToString
Next
End While
myReader.Close() : myConnection.Close() : myCommand.Dispose() ':
myConnection.Dispose() '*****

For Each tb In Me.Controls
If TypeOf tb Is TextBox Then
If tb.TabIndex <= 12 Then
tb.Text = registro(tb.TabIndex)
End If
End If
Next
End Sub


"Eduardo Alvarado Meza" <ealvarado_15@(eliminarestetexto)hotmail.com>
escribió en el mensaje news:
> Sonia, si quieres ver un amento de velocidad en el llenado de velocidad
> quita todos los doevents y antes de llenar el listview escribes:
> Milistview.BeginUpdate
>
> y cuando lo llenes todo completamente escribe:
> Milistview.EndUpdate
>
>
>
Respuesta Responder a este mensaje
#13 Eduardo Alvarado Meza
02/10/2006 - 16:15 | Informe spam
Que bueno que te haya funcionado, veras traer datos no es tan lento a como
te parecia a ti, para poder experimentar una lentitud de muchos segundos
habria que traer talvez cientos de miles de registros de tamaño promedio y
lo que te escribi no es un truco pero si que te debio haber funcionado bien.
;-)

Quita el arreglo, y como es un solo registro no creo que el datareader sea
mejor que un simple fill del adaptador, pero en fin, has una asignación
directa a los textboxes como te explicó el compañero floyd.
Respuesta Responder a este mensaje
#14 Sonia
02/10/2006 - 17:02 | Informe spam
gracias a los 2. hay bastante mejora
una ultima cosa.
puedo controlar de alguna forma el orden en q se rellenan? es decir. yo
pongo en el codigo 1º q se llenen los textbox y despues los 4 listview, pero
sucede al contrario. salen 1º los listview y luego los textbox q son
casualmente lo q 1º kiero ver: los datos principales.
se puede controlar esto?
gracias a los 2!!

"Eduardo Alvarado Meza" <ealvarado_15(EliminarEsto)@hotmail.com> escribió en
el mensaje news:
Que bueno que te haya funcionado, veras traer datos no es tan lento a como
te parecia a ti, para poder experimentar una lentitud de muchos segundos
habria que traer talvez cientos de miles de registros de tamaño promedio y
lo que te escribi no es un truco pero si que te debio haber funcionado


bien.
;-)

Quita el arreglo, y como es un solo registro no creo que el datareader sea
mejor que un simple fill del adaptador, pero en fin, has una asignación
directa a los textboxes como te explicó el compañero floyd.


Respuesta Responder a este mensaje
#15 Eduardo Alvarado Meza
02/10/2006 - 20:17 | Informe spam
Probablemente lo mas sencillo seria (sin garantias) hacerlo en este orden:

Llenar_Textboxes()
Doevents
Llenar_ListViews

Otra forma aunque no lo puedo garantizar sin probarlo, es que llenes los
listviews en otro hilo de ejecucion para que no "retrase" el pintado del
contenido de los textboxes.
http://msdn.microsoft.com/library/d...sTopic.asp


"Sonia" wrote in message
news:
gracias a los 2. hay bastante mejora
una ultima cosa.
puedo controlar de alguna forma el orden en q se rellenan? es decir. yo
pongo en el codigo 1º q se llenen los textbox y despues los 4 listview,
pero
sucede al contrario. salen 1º los listview y luego los textbox q son
casualmente lo q 1º kiero ver: los datos principales.
se puede controlar esto?
gracias a los 2!!

"Eduardo Alvarado Meza" <ealvarado_15(EliminarEsto)@hotmail.com> escribió
en
el mensaje news:
Que bueno que te haya funcionado, veras traer datos no es tan lento a
como
te parecia a ti, para poder experimentar una lentitud de muchos segundos
habria que traer talvez cientos de miles de registros de tamaño promedio
y
lo que te escribi no es un truco pero si que te debio haber funcionado


bien.
;-)

Quita el arreglo, y como es un solo registro no creo que el datareader
sea
mejor que un simple fill del adaptador, pero en fin, has una asignación
directa a los textboxes como te explicó el compañero floyd.







email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida