Vb6 如何将大于32k的字符串写入longvarchar?
用VB6编写的应用程序。DB是v9.5的普及版 目前工作:Vb6 如何将大于32k的字符串写入longvarchar?,vb6,pervasive,Vb6,Pervasive,用VB6编写的应用程序。DB是v9.5的普及版 目前工作: Public Sub Save() if rs.State = adStateOpen Then rs.AddNew SetFields rs rs.Update End If end sub Public Sub SetFields(rs as ADODB.Recordset) rs!Name = strName StrToField str
Public Sub Save()
if rs.State = adStateOpen Then
rs.AddNew
SetFields rs
rs.Update
End If
end sub
Public Sub SetFields(rs as ADODB.Recordset)
rs!Name = strName
StrToField strReport rs!Report
StrToField strResponse rs!Response
end sub
Public Sub StrToField(ByVal str As String, fld As ADODB.Field)
Dim Data As String
Dim StrSize As Long, CharsRead As Long
' for field of LONVARCHAR type only
If fld.Type = adLongVarChar Then
StrSize = Len(str)
Do While StrSize <> CharsRead
If StrSize - CharsRead < BLOCK_SIZE_LONGVARCHAR Then
Data = Mid(str, CharsRead + 1, StrSize - CharsRead)
CharsRead = StrSize
Else
Data = Mid(str, CharsRead + 1, BLOCK_SIZE_LONGVARCHAR)
CharsRead = CharsRead + BLOCK_SIZE_LONGVARCHAR
End If
fld.AppendChunk Data
Loop
Else
' do something
End If
End Sub
Const BLOCK_SIZE_LONGVARCHAR = 4096
公共子存储()
如果rs.State=adStateOpen,则
艾德纽卢比
设置域
rs.更新
如果结束
端接头
公共子集合字段(作为ADODB.Recordset)
rs!Name=strName
斯特菲尔德报告!报告
strofield strResponse rs!回应
端接头
公共子strotfield(ByVal str作为字符串,fld作为ADODB.Field)
将数据设置为字符串
暗淡无光,字迹悠长
'仅适用于LONVARCHAR类型的字段
如果fld.Type=adLongVarChar,则
StrSize=Len(str)
做些什么呢
如果strize-CharsRead
在我的报告或响应变量大于32000个字符之前,这一切都可以正常工作。调用rs.update时,我收到此错误消息:
“[普及][ODBC客户端接口]字符串长度超过列长度参数#15。数据被截断。”
如果我遗漏了什么,谁能给我指出正确的方向或让我知道。通用Longvarchar最大大小应为2GB
谢谢,
Graham这段代码在我使用PSQLV11时运行(我没有v9.5)
基本上,您将使用参数化查询,而不是.AddNew方法 你是个天才,米瑟尔。谢谢
Dim conn As New ADODB.Connection
Set conn = New ADODB.Connection
conn.ConnectionString = "demodata"
conn.Open
Dim sql As String
Dim cmd As New ADODB.Command
cmd.ActiveConnection = conn
cmd.CommandText = "insert into lvc (f2) values (?)"
Dim parm As New ADODB.Parameter
parm.Name = "f2"
Dim longstring As String
Open "c:\longdata.txt" For Input As #1
Do While Not EOF(1)
Line Input #1, sNextLine
'do something with it
'add line numbers to it, in this case!
sText = sText & sNextLine
Loop
longstring = sText
parm.Value = longstring
cmd.Parameters.Append cmd.CreateParameter("param1", adLongVarChar, adParamInput, Len(longstring), longstring)
cmd.Execute
conn.Close
MsgBox "done"