Problema con una clase heredada.

23/03/2006 - 19:43 por David Sans | Informe spam
Hola grupo.

Tengo el siguiente problema con el VB 2005.

Quiero una clase de acceso a datos y quería tener clase común para todas las
tablas y una clase para cada tabla.

Pongo el ejemplo:

Public Class AccesoDatos
Public Sub New(ByVal NombreServidor as string, ByVal NombreBaseDatos as
string)
' Abrir la conexión
End Sub
End Class


La otra clase seria Provincias

Public Class Provincias
Inherits AccesoDatos
.
.
End Class

El problema me sale cuando heredo de la clase AccesoDatos, que en tiempo de
diseño al dar el intro a Inherits AccesoDatos, me sale el siguiente error
La clase Provincias debe declarar un 'Sub New' porque su clase base
'AccesoDatos' no dispone de un 'Sub new' accesible al que se pueda llamar
sin argumentos.

El error es correcto y la explicación del error también. Pero yo quiero que
no se pueda declarar en otra clase esto:
Dim oProvincia as new Provincias
Quiero que se tenga que declarar así:
Dim oProvincia as new Provincias("SERVER","NORTWHIND")

Como lo puedo solucionar?

Muchas gracias.
David Sans

Preguntas similare

Leer las respuestas

#16 David Sans
28/03/2006 - 19:17 | Informe spam
Gracias por la información y sigo dando la lata.

Más dudas.

En este ejemplo la modificación no tiene en cuenta ni concurrencia ni nada. Como se implanta el control de concurrencia? Tengo que
usar DataSets?
Si la sentencia sql no se realiza porque la ID no existe, simplemente ActualizarProvincia me devuelve un cero, pero no se el porque
no se ha hecho el update. Me pasa lo mismo con el delete, por ejemplo si hay varios clientes que tienen asignada una provincia y
anulo la provincia, no me va ha dejar dar de baja pero no se el motivo, podría ser porque no existiera o por el caso que te cuento.

Como se puede solucionar?

Muchas gracias por vuestro tiempo.
David Sans


Public Shared Function ActualizarProvincia(ByVal id As String, ByVal nombre As String) As integer

Dim idParam1 As PsqlParameter = DataHelper.CreateParameter("ID_Provincia")
Dim idParam2 As PsqlParameter = DataHelper.CreateParameter("Nombre")

idParam1.Value = id
idParam2.Value = nombre

Return DataHelper.ExecuteNonQuery("UPDATE Provincias SET Nombre = ? WHERE ID_Provincia = ?", idParam2, idParam1)

End Function

Eduardo A. Morcillo [MS MVP VB]
Respuesta Responder a este mensaje
#17 Eduardo A. Morcillo [MS MVP VB]
29/03/2006 - 16:49 | Informe spam
En este ejemplo la modificación no tiene en cuenta ni concurrencia ni
nada. Como se implanta el control de concurrencia? Tengo que usar
DataSets?



Para controlar la concurrencia en el WHERE debes colocar todos los campos,
pasando los valores que tenian al momento que los trajiste de la BD. Si la
actualizacion devuelve 0 es que el registro fue modificado.

Me pasa lo mismo con el delete, por ejemplo si
hay varios clientes que tienen asignada una provincia y anulo la
provincia, no me va ha dejar dar de baja pero no se el motivo, podría
ser porque no existiera o por el caso que te cuento.



Si el registro no existe te va a devolver una cuenta de registros
modificados igual 0, pero si el problema fue que no se puede eliminar por
las relaciones se generaria una excepcion. Solo deberas verificar el numero
de error devuelto en la excepcion para saber el motivo del error.

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
http://mvp.support.microsoft.com/pr...4EF5A4191C
Respuesta Responder a este mensaje
#18 David Sans
29/03/2006 - 17:56 | Informe spam
Hola grupo.

Muchas gracias por todos los consejos.
Despues de toda la información he seguido investigando y he encontrado varios enlaces que hablan de todo esto.
Los dejo aquí por si alguien mas tiene dudas.

http://www.c-sharpcorner.com/Upload...ement.aspx
http://fawx.com/software/datatools/...mbers.html
http://www.codersource.net/microsof..._azam.html
http://builder.com.com/5100-6386-1050690.html
http://www.microsoft.com/spanish/ms...ingthedaab

Saludos.
David Sans
Respuesta Responder a este mensaje
#19 David Sans
15/05/2006 - 19:44 | Informe spam
Hola Eduardo y Grupo.

En el ejemplo que me mandaste en la clase Provincia, cuando crea la colección con todas la provincias, las columnas quedan ordenadas
alfabéticamente, no en el orden de la base de datos. Como se puede modificar para que se ordenen las columnas por el orden de la
base de datos?

En la clase provincia sale correctamente por el orden alfabético coincide con los campos Id , Nombre.

Es que datagridview salen en ese orden osea alfa.

provs = ProvinciaTable.GetAll()
grid.DataSource = provs


Muchas gracias.
David Sans

"Eduardo A. Morcillo [MS MVP VB]" <emorcillo .AT. mvps.org> escribió en el mensaje news:
Siguiendo mi modelo seria como el ejemplo que envio adjunto. Esta en VB2005 y hay que tener en cuenta que faltan varias cosas
porque solo es un ejemplo, aunque funciona.

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
http://mvp.support.microsoft.com/pr...4EF5A4191C


Respuesta Responder a este mensaje
#20 Leonardo Azpurua [mvp vb]
15/05/2006 - 19:56 | Informe spam
"David Sans" <listas@[QUITAESTO]socaqui.com> escribió en el mensaje
news:
Hola Eduardo y Grupo.

En el ejemplo que me mandaste en la clase Provincia, cuando crea la
colección con todas la provincias, las columnas quedan ordenadas
alfabéticamente, no en el orden de la base de datos. Como se puede
modificar para que se ordenen las columnas por el orden de la
base de datos?

En la clase provincia sale correctamente por el orden alfabético coincide
con los campos Id , Nombre.

Es que datagridview salen en ese orden osea alfa.



Hola, David:

Eso que llamas "el orden de la base de datos" no existe.

Puede que los registroa ahora esten dispuestos de una manera, tal vez en
orden cronologico, tal vez por regiones. Pero ese ordenamiento es frágil. En
cualquier momento, alguna opcion de mantenimiento podría dar al traste con
él.

No recuerdo el ejemplo de Eduardo, pero si los campos estan ordenados
probablemente sea porque o bien se ordenaron en la consulta mediante la cual
se obtuvieron, o bien se especificó algun ordenamiento al cargarlos al
control.

En cualquier caso, lo recomendable es que agregues al diseño de la tabla una
columna, con la posición que quieres que tenga cada registro (si actualmente
estan ordenados, puedes probar a agregar una columna de tipo int con el
atributo IDENTITY), y especificar la clausla ORDER BY al momento de traer
los registros.

Y si alguna propiedad del cntrol especifica que los valores deben ordenarse,
desactivala.

Salud!
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida