CLR: .Net / Mono / Boo / Otros CLR > ASP .NET
Error De Insertado En Tabla Access
(1/1)
Moy:
Yo que estoy ya acostumbrado a manejar tablas, datarows y datasets en el .Net, me voy al ASP.Net y tengo que pedir lo tipico, los datos de un tipo para registrarle en un foro (o enviarle correo basura por un tubo) y al intentar hacer el update con el data adapter me revienta el código diciendo que le tengo que pasar una consulta actualizable.
¿Qué coño es eso?
Veamos, yo tengo una base de datos Access llamada Perfiles en el directorio virtual donde estoy trabajando.
La conexión, rellenado del dataset Datos y la creación de los comandos de inserción lo hago así.
--- Código: Text --- Dim Ruta As StringDim CustomCB As OleDbCommandBuilder Ruta = Server.MapPath("/formulario/Perfiles.mdb")Cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & RutaAdapt = New OleDbDataAdapter("SELECT id_usuario, nombre, apellidos, password, fecha, email, localidad, genero, foto, permiso FROM T_perfil", Cn)Datos = New DataSetCn.Open()Adapt.Fill(Datos, "T_Perfil")TablaPerfil = Datos.Tables("T_perfil") 'Generación de los códigos de modificaciónCustomCB = New OleDbCommandBuilder(Adapt)CustomCB.QuotePrefix = "["CustomCB.QuoteSuffix = "]"CustomCB.RefreshSchema()Cn.Close() Hasta ahí todo correcto, espero.
Ahora veamos como creo una nueva fila, la relleno y se la inserto al dataset por donde le quepa.
--- Código: Text --- Cn.Open() Ficha = Datos.Tables("T_perfil").NewRow()Ficha("nombre") = Me.TNombre.TextFicha("apellidos") = Me.TApellido.TextFicha("password") = Me.TPassword.TextFicha("email") = Me.TEmail.TextFicha("genero") = Me.RBGenero.SelectedValueFicha("localidad") = Me.TLocalidad.TextIf Me.CTerminos.Checked Then Ficha("permiso") = TrueElse : Ficha("permiso") = FalseEnd If Datos.Tables("T_perfil").Rows.Add(Ficha)Adapt.Update(Datos, "T_perfil") Datos.AcceptChanges()Cn.Close() Esto sería lo básico, ya me preocuparé de filtrar los errores y demás pasteles cuando funcione, porque al llegar al adapt.update me dice que no le sale de los comandos hacerlo y me suelta el mensaje de que quiere una consulta actualizable.
Yo estoy ya que no veo, asi que por favor, ¿alguno de vosotros logra ver en qué me he equivocado y me puede dar la colleja salvadora que me dirija por el camino correcto?
Moy:
Nada, que sigo sin poder insertar nada en la tabla Access.
¿Qué puede estar fallando?
¿Hay que tener algo en cuenta a la hora de trabajar cin una base de datos access localizada en el servidor?
En vez de insertar he probado meter a mano un par de lineas y de mostrarlas por pantalla, y funciona, por lo que la cadena de conexión no debería ser el problema.
¿Podría ser por la generación automatica de los comandos?
Por si acaso estoy intentando hacer la inserción por medio de comandos, pero tambien me falla y me dice que hay un error en la sentencia Insert into.
Esto es lo que he hecho
--- Código: Text --- Dim sql As StringDim loquesalga as integer Try sql = "insert into T_perfil(nombre,apellidos,password,email,localidad) " sql = sql + "Values('Paco','Garcia','11234','algarroba@hotmail.com','Cuenca')" Dim Cmd As New OleDbCommand(sql, Cn) Cn.Open() loquesalga=Cmd.ExecuteNonQuery() Cn.Close() Catch ex As Exception Response.Write("Excepcion:" + ex.ToString()) End Try
La instruccion de sql que uso para insertar no debería ser el problema,ya que la he usado tambien a mano en un editor sql y funciona perfectamente.
¿Puede ser porque uso un autonumerico como clave principal?
Güorker:
Hola,
Lo del autonumerico no creo que sea, ya que no intentas establecer ese valor a traves de la insert.
No se lo que te puede estar pasando, pero si puedes postea el mensaje de error que te da, a ver si así podemos ayudarte.
Saludos y suerte.
Moy:
Diox... El que no sabe es como el que no ve...
Ya descubrí cual era el fallo que me ha tenido 3 días estancado en la misma linea de código.
El error que me saltaba me decía "La consulta debe ser actualizable", cuando lo que los kpullos de microsoft deberían haber puesto era "Mira, que la base de datos Access está puesta como solo lectura para los usuarios y así solo te va a dejar hacer selects." <_<
Quitándole el "solo lectura" funciona, pero supongo que si en la cadena de conexión me identifico como administrador me dejará sin tener que dejar la base tan desprotegida.
Ke duro es ser programador... :oops:
Navegación
Ir a la versión completa