Foros del Web » Programación para mayores de 30 ;) » .NET »

"no se puedo eliminar nada de las tablas especificadas"

Estas en el tema de "no se puedo eliminar nada de las tablas especificadas" en el foro de .NET en Foros del Web. Hola de nuevo; Conseguí paginar sin problema...pero con el incoveniente de que las tablas que me han dado no tienen ningún campo autonumérico. De modo ...
  #1 (permalink)  
Antiguo 23/04/2004, 02:40
Avatar de luiscl  
Fecha de Ingreso: abril-2004
Ubicación: Zaragoza
Mensajes: 305
Antigüedad: 20 años
Puntos: 0
"no se puedo eliminar nada de las tablas especificadas"

Hola de nuevo;

Conseguí paginar sin problema...pero con el incoveniente de que las tablas que me han dado no tienen ningún campo autonumérico. De modo que si no selecciono todos los archivos, es decir, si cojo sólo los que me interesan, la paginación sale mal porque en una página aparecen 9, en otra 2, en otra ninguno...

Vale. Para solucionar esto (porque no encuentro ninguna manera alternativa), he decidido guardar en una tabla intermedia los datos que me interesan, insertando un campo autonumérico.

Para ello primero reseteo la tabla, para eliminar cuando hago el Sub Page_Load() lo que hubiese, de modo que me quede límpia. Pero me da el siguiente error

"no se puedo eliminar nada de las tablas especificadas"

La tabla no es de sólo lectura, y en la pestaña de seguridad le he añadido el grupo ASPNET, y les he puesto a todos los grupos "control total", y lo mismo con la carpeta que contiene la base de datos.

Ya no se me ocurre más...así que, de nuevo, agradecería una ayuda.

Además, ya que estoy suplicando , ¿me podíais poner un ejemplo de cómo recorrer la base de datos access original e ir guardando en la base de datos destino los registros que cumplan la condición, por ejemplo, que el campo 'discriminar = 1' y el campo 'registroválido = 0'.

Gracias por la atención...si el jefe no me hubiese cargado con el marrón de entregar esto antes de final de mes, les juro que buscaría la solución a base del método prueba-error...pero se me echa el tiempo encima
__________________
Pide lo que quieras...y luego paga por ello
  #2 (permalink)  
Antiguo 23/04/2004, 02:49
Avatar de luiscl  
Fecha de Ingreso: abril-2004
Ubicación: Zaragoza
Mensajes: 305
Antigüedad: 20 años
Puntos: 0
Este es el código que utilizo para borrar la tabla 'intermedia'. El If lo utilizo para controlar si la tabla está vacía, porque pensaba que ese era el fallo...

seleccionstringBintermedia = "Select Count(*) From intermedia"
conexionBintermedia.open()

seleccionBintermedia = New OledbCommand( "Select Count(*) From intermedia", conexionBintermedia)

contadorBintermedia = seleccionBintermedia.ExecuteScalar()
conexionBintermedia.close()


If contadorBintermedia <> "0" Then
seleccionB2intermedia = New OleDbCommand("Delete From intermedia", conexionB2intermedia)

conexionB2intermedia.open()
seleccionB2intermedia.ExecuteNonQuery()
conexionB2intermedia.close()

End If
__________________
Pide lo que quieras...y luego paga por ello
  #3 (permalink)  
Antiguo 23/04/2004, 04:14
Avatar de SunDarK  
Fecha de Ingreso: diciembre-2003
Ubicación: Jerez de la Frontera
Mensajes: 1.193
Antigüedad: 20 años, 5 meses
Puntos: 8
Jue estaba terminando de escribir el post y se me estropeo el FireFox y perdi todo lo escrito :(.Bueno lo escribo de nuevo.
Te voy a dar posibles ideas/soluciones:
1)No puedes en access añadir un campo autonumerico a la tabla inicial?asi te ahorras el procedimiento de tablas intermedias y demas
2)Respecto a lo de recorrer la tabla y añadir registros a otra tabla respecto a una condición haz esto:
Cita:
Dim odataset as new DataSet
Dim oconexion As New OleDbConnection

'NOTA: es importante poner la ruta relativa de mi origen de datos(Data Source)para evitar que al llevar
'la aplicacion a cualquier otra maquina no encuentre la ruta y se vaya directamente a la excepcion.

oconexion.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source= ..\TuBD.mdb"
Dim ds as new DataSet

Dim odataadapter As New OleDbDataAdapter("SELECT * FROM TU_TABLA WHERE WHERE (CONDICION1 = 'LOKESEA') AND (CONDICION2 = 'LOKESEA')",oconexion)

'Abrimos la conexion y llenamos el dataset

oconexion.Open()
odataadapter.Fill(odataset, "LOQUEQUIERAS")
oconexion.Close()

'Ahora que tenemos el dataset lleno con las condiciones que queremos lo unico que tenemos que hacer es pasar dichos datos a una tabla en la BD

Dim oconexiondestino As New OleDbConnection

'NOTA: es importante poner la ruta relativa de mi origen de datos(Data Source)para evitar que al llevar
'la aplicacion a cualquier otra maquina no encuentre la ruta y se vaya directamente a la excepcion.

oconexiondestino.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source= ..\TuBDDestino.mdb"

'Y a continuación actualizas la BD destino con el contenido del DataSet que llenamos antes,si no sabes hacerlo luego te lo hago que ahora debo de marcharme,lo siento,ya me contarás
Saludos y suerte
  #4 (permalink)  
Antiguo 26/04/2004, 02:12
Avatar de luiscl  
Fecha de Ingreso: abril-2004
Ubicación: Zaragoza
Mensajes: 305
Antigüedad: 20 años
Puntos: 0
Muchas gracias por tu ayuda, SunDark.

Como bien dices, lo más sencillo sería añadir una nueva columna a la base de datos original...pero no puedo.

Yo estoy creando la aplicación web, pero la base de datos es de un programa que están empleando en esa empresa. Tengo que utilizarla tal y como me la dan, y 'sólo' tiene 64 tablas relacionadas, con cientos y cientos de campos. Ya me ha llevado bastante tiempo destripar las tablas para coger los datos que me hacen falta, y salvo que haya manera de acceder con asp.net en tiempo de ejecucción y añadir dicha columna de valor autonumérico, a mí sólo se me ha ocurrido lo de la tabla intermedia. Se admiten alternativas...

De todas formas, lo voy pillando. Ya utilizaba un dataset para rellenar el datagrid y paginarlo, pero no para crear la tabla intermedia. Así que te he hecho caso y lo he hecho tal y como dices, salvo que en vez de coger todos los campos (select * from...), sólo he cogido los que me hacen falta, que son cinco.

La tabla intermedia está hecha a mano, y le he añadido a esos 5 campos iguales a los de la tabla original, un sexto campo autonumérico. por el tema de la paginación.

Pero vuelvo a estar atascado: Ni sé ni encuentro por ningún lado cómo rellenar la bd intermedia con el contenido del dataset. No sé si es problema de que no utilizo todos los campos, sino sólo los que me interesan.

Así que sigo necesitando tu ayuda. Te voy a poner el código de cómo relleno el dataset, por si te sirve de algo.

Un saludo y mil gracias.
__________________
Pide lo que quieras...y luego paga por ello
  #5 (permalink)  
Antiguo 26/04/2004, 02:14
Avatar de luiscl  
Fecha de Ingreso: abril-2004
Ubicación: Zaragoza
Mensajes: 305
Antigüedad: 20 años
Puntos: 0
Dim datasetLprincipal As New DataSet
Dim dataadapterLprincipal As New OleDbDataAdapter
seleccionstringLprincipal = "Select IdInmueble, DirecciónInmueble, Situación1, Eliminado, NúmeroExpediente, Precio1Euros, Precio1Pts From DAT_Inmueble Where DirecciónInmueble IS NOT NULL " & "And Situación1 IS NOT NULL " & "And Eliminado = 0 " & "And IdTipoInmueble = @tipoinmueble " & "And IdTipoOperación = 4"

datasetLprincipal = New OleDbDataAdapter( seleccionstringLprincipal, conexionLprincipal)

datasetLprincipal.SelectCommand.Parameters.Add( "@tipoinmueble", lblrespuesta.Text )
dataadapterLprincipal = New DataSet
datasetLprincipal.Fill( dataadapterLprincipal, "dtspisos" )

__________________
Pide lo que quieras...y luego paga por ello
  #6 (permalink)  
Antiguo 26/04/2004, 03:02
Avatar de luiscl  
Fecha de Ingreso: abril-2004
Ubicación: Zaragoza
Mensajes: 305
Antigüedad: 20 años
Puntos: 0
Lo de antes estaba equivocado. Esto es lo que he hecho para guardar los registros en el dataset y luego escribir estos en la base de datos intermedia.

Cuando lo ejecuto, no me hace nada de nada (ni siquiera un error). Esta página recibe datos de otra principal. Y cuando ejecuto la principal y le doy a enviar los datos a esta, me da un error de desbordamiento.


' Guardamos en un dataset los datos originales'

Dim datasetLprincipal As New DataSet
Dim dataadapterLprincipal As New OleDbDataAdapter
seleccionstringLprincipal = "Select IdInmueble, DirecciónInmueble, Situación1, NúmeroExpediente, Precio1Euros, Precio1Pts From DAT_Inmueble Where DirecciónInmueble IS NOT NULL " & "And Situación1 IS NOT NULL " & "And Eliminado = 0 " & "And IdTipoInmueble = @tipoinmueble " & "And IdTipoOperación = 4"

dataadapterLprincipal = New OleDbDataAdapter( seleccionstringLprincipal, conexionLprincipal)

dataadapterLprincipal.SelectCommand.Parameters.Add ( "@tipoinmueble", lblrespuesta.Text )

datasetLprincipal = New DataSet
dataadapterLprincipal.Fill( datasetLprincipal, "datasetpisos" )

' Ahora hay que pasar el contenido del dataset a la bd intermedia'
Dim myDataView as DataView = new DataView (datasetLprincipal.Tables("datasetpisos"))

Dim Cont As integer

conexionGintermedia.Open()

For cont = 0 to myDataView.Count -1

lblIdInmueble.Text = MyDataView(cont)("IdInmueble")
lblSituación1.Text = MyDataView(cont)("Situación1")
lblNúmeroExpediente.Text = MyDataView(cont)("NúmeroExpediente")
lblPrecio1Pts.Text = MyDataView(cont)("Precio1Pts")
lblPrecio1Euros.Text = MyDataView(cont)("Precio1Euros")

seleccionstringGintermedia = "Insert Into intermedia (IdInmueble, Situación1, NúmeroExpediente, Precio1Euros, Precio1Pts) Values (@idinmueble, @situacion1, @numeroexpediente, @precio1euros, @precio1pts)"

seleccionGintermedia = New OleDbCommand (seleccionstringGintermedia, conexionGintermedia)

seleccionGintermedia.Parameters.Add( "@idinmueble", lblIdInmueble.Text )

seleccionGintermedia.Parameters.Add( "@situacion1", lblSituación1.Text )

seleccionGintermedia.Parameters.Add( "@numeroexpediente", lblNúmeroExpediente.Text )

seleccionGintermedia.Parameters.Add( "@precio1pts", lblPrecio1Pts.Text )

seleccionGintermedia.Parameters.Add( "@precio1euros", lblPrecio1Euros.Text )

seleccionGintermedia.ExecuteNonQuery()

Next

conexionGintermedia.Close()
__________________
Pide lo que quieras...y luego paga por ello
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 07:36.