Visual Basic - Modificar Campo Memo

Life is soft - evento anual de software empresarial
 
Vista:

Modificar Campo Memo

Publicado por Jhoby (28 intervenciones) el 16/08/2005 02:09:28
Tengo una base de datos en Access 2000 en la cual hay hay una tabla que contiene un campo tipo MEMO, pero cuando quiero actualizar la información mendiante conección ADO utilizando el UPDATE me sale un mensaje de error "system error in UPDATE statement"

Alguien sabe como puedo actualizar este campo desde VB.

Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Modificar Campo Memo

Publicado por Karlo (5 intervenciones) el 16/08/2005 03:14:37
Primero verifica el string de la instruccion SQL para hacer el update que esta contenga su estructura correcta.

SI el update lo vas a hacer desde el recordset tenes que hacer una instrucccion de seleccion SELECT.

Si por el contraririo vas a usar el .Execute revisa siempre la forma que escribiste la instruccion, ejemplo:
UPDATE TABLA SET CAMPO FROM TABLA.

Ojala te ayude.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Modificar Campo Memo

Publicado por Silomon Tolomeo (22 intervenciones) el 16/08/2005 15:46:13
Terricola modifica el campo memo en tiempo de ejecucion.. la conexion ADO te ayudara.. claro utilizando el UPDATE mejorara el sistema, y no saldra error..
o si no dedicate a otra vaina

Saludos Terricolas
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Modificar Campo Memo

Publicado por Esteban (1144 intervenciones) el 16/08/2005 17:13:02
Compañeros ADO no lo es todo en la vida, los campos Memo en Access, o los campos Text en motores de datos en ocaciones no pueden ser modificados directamente, sino que se deben tratar como campos de tipo largo, o sea, como si fueran campos binario o binario largo, ya que la capacidad es muy grande.

Adjunto un código que encontré hace un tiempo para adjuntar archivos a una BD, puede que sirva para los campos memo:

Option Explicit

Const BLOCK_SIZE = 1048576

Public Sub BlobToFile(fld As Object, ByVal FName As String, _
Optional FieldSize As Long = -1, _
Optional Threshold As Long = 1048576)
'
' Assumes file does not exist
' Data cannot exceed approx. 2Gb in size
'
Dim F As Long, bData() As Byte, sData As String
F = FreeFile
Open FName For Binary As #F
Select Case fld.Type
Case 205
If FieldSize = -1 Then ' blob field is of unknown size
WriteFromUnsizedBinary F, fld
Else ' blob field is of known size
If FieldSize > Threshold Then ' very large actual data
WriteFromBinary F, fld, FieldSize
Else ' smallish actual data
bData = fld.Value
Put #F, , bData ' PUT tacks on overhead if use fld.Value
End If
End If
Case 201, 203
If FieldSize = -1 Then
WriteFromUnsizedText F, fld
Else
If FieldSize > Threshold Then
WriteFromText F, fld, FieldSize
Else
sData = fld.Value
Put #F, , sData ' PUT tacks on overhead if use fld.Value
End If
End If
End Select
Close #F
End Sub

Private Sub WriteFromBinary(ByVal F As Long, fld As Object, _
ByVal FieldSize As Long)
Dim Data() As Byte, BytesRead As Long
Do While FieldSize <> BytesRead
If FieldSize - BytesRead < BLOCK_SIZE Then
Data = fld.GetChunk(FieldSize - BLOCK_SIZE)
BytesRead = FieldSize
Else
Data = fld.GetChunk(BLOCK_SIZE)
BytesRead = BytesRead + BLOCK_SIZE
End If
Put #F, , Data
Loop
End Sub

Private Sub WriteFromUnsizedBinary(ByVal F As Long, fld As Object)
Dim Data() As Byte, Temp As Variant
Do
Temp = fld.GetChunk(BLOCK_SIZE)
If IsNull(Temp) Then Exit Do
Data = Temp
Put #F, , Data
Loop While LenB(Temp) = BLOCK_SIZE
End Sub

Private Sub WriteFromText(ByVal F As Long, fld As Object, _
ByVal FieldSize As Long)
Dim Data As String, CharsRead As Long
Do While FieldSize <> CharsRead
If FieldSize - CharsRead < BLOCK_SIZE Then
Data = fld.GetChunk(FieldSize - BLOCK_SIZE)
CharsRead = FieldSize
Else
Data = fld.GetChunk(BLOCK_SIZE)
CharsRead = CharsRead + BLOCK_SIZE
End If
Put #F, , Data
Loop
End Sub

Private Sub WriteFromUnsizedText(ByVal F As Long, fld As Object)
Dim Data As String, Temp As Variant
Do
Temp = fld.GetChunk(BLOCK_SIZE)
If IsNull(Temp) Then Exit Do
Data = Temp
Put #F, , Data
Loop While Len(Temp) = BLOCK_SIZE
End Sub

Public Sub FileToBlob(ByVal FName As String, fld As Object, _
Optional Threshold As Long = 1048576)
'
' Assumes file exists
' Assumes calling routine does the UPDATE
' File cannot exceed approx. 2Gb in size
'
Dim F As Long, Data() As Byte, FileSize As Long
F = FreeFile
Open FName For Binary As #F
FileSize = LOF(F)
Select Case fld.Type
Case 205
If FileSize > Threshold Then
ReadToBinary F, fld, FileSize
Else
Data = InputB(FileSize, F)
fld.Value = Data
End If
Case 201, 203
If FileSize > Threshold Then
ReadToText F, fld, FileSize
Else
fld.Value = Input(FileSize, F)
End If
End Select
Close #F
End Sub

Private Sub ReadToBinary(ByVal F As Long, fld As Object, _
ByVal FileSize As Long)
Dim Data() As Byte, BytesRead As Long
Do While FileSize <> BytesRead
If FileSize - BytesRead < BLOCK_SIZE Then
Data = InputB(FileSize - BytesRead, F)
BytesRead = FileSize
Else
Data = InputB(BLOCK_SIZE, F)
BytesRead = BytesRead + BLOCK_SIZE
End If
fld.AppendChunk Data
Loop
End Sub

Private Sub ReadToText(ByVal F As Long, fld As Object, _
ByVal FileSize As Long)
Dim Data As String, CharsRead As Long
Do While FileSize <> CharsRead
If FileSize - CharsRead < BLOCK_SIZE Then
Data = Input(FileSize - CharsRead, F)
CharsRead = FileSize
Else
Data = Input(BLOCK_SIZE, F)
CharsRead = CharsRead + BLOCK_SIZE
End If
fld.AppendChunk Data
Loop
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar