【问题标题】:How to add multiple lines from a TMemo component to a MS Access database?如何将 TMemo 组件中的多行添加到 MS Access 数据库?
【发布时间】: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


【解决方案1】:

在数据库中将description 字段定义为Memo(而不是Text),然后从ADOQuery1 中删除所有持久字段,然后再次添加它们,使ADOQuery1codemeaning_description 类型为ftMemo .

无需转义或替换CRLF

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-20
    • 1970-01-01
    • 2019-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多