【发布时间】:2013-02-14 21:20:05
【问题描述】:
我有一个名为t_codemeaning 的表的 ADO 数据库,下面是表结构:
t_codemeaning
codemenaing_code AS Text
codemenaing_title AS Text
codemenaing_description AS Text
我在ADOQuery1 中添加了所有表格。
我用这个 Delphi 脚本点击一个按钮:
ADOQuery1.edit;
ADOQuery1codemeaning_title.value := edit1.text;
ADOQuery1codemeaning_description.value := memo1.lines.text;
ADOQuery1.post;
当我在备忘录中添加单行时,一切都很好。
但是当我在 memo1 中添加很多多行文本时,它会显示一个错误:
多步操作产生错误。检查每个状态值。
如何解决这个问题?
我的最后一个进展,我创建了一个新的字符串变量 aValue 并将 memo1.lines.text 添加到其中:
aValue:=memo1.lines.text;
aValue := StringReplace(StringReplace(aValue, '#10', '', [rfReplaceAll]), '#13', '', [rfReplaceAll]);
我将 ADOQuery1codemeaning_description.value .... 的脚本更改为:
ADOQuery1codemeaning_description.value := aValue;
还是出现同样的错误...
【问题讨论】:
-
这是由代码中的“CRLF”行结尾引起的。当您分配行时,它会被编码为一个字符串。您需要以 ADO 机器预期的格式转义行尾。换句话说,多行备忘录字符串正在向 ADO 传递无效字符。
-
“CRLF”是指#13#10 吗?
-
aValue:=memo1.lines.text; aValue := StringReplace(StringReplace(aValue, '#10', '', [rfReplaceAll]), '#13', '', [rfReplaceAll]);
-
是的。在 Linux 上它只是 LF 或 #10 但 windows 使用 #13#10 但 windows 中的许多程序也理解普通的 #10。仔细检查 ADO 函数预期的格式。充其量完全按照您在之前的commect 中指定的操作是的!那应该行得通。也许用空格字符替换?
-
你使用什么数据库?描述字段可能需要是
Memo的类型。并且您的持久ADOQuery1codemeaning_description字段类型应该是ftMemo而不是ftString。没有必要逃避任何事情。
标签: delphi ms-access delphi-2010 memo tadoquery