我在插入查询之前检查备忘录的内容。防止插入空白备忘录
if memo1.lines.Text = '' then begin
showmessage('Warning:Missing data!');
abort;
end else ....
只要备忘录1中没有任何内容,它就可以正常工作。 但是,当用户点击进入空白备忘录内部并且光标移动到第二行时,运行查询,在没有警告消息的情况下触发插入, 尽管备注中没有任何内容。 有没有办法来防止这种情况?
我在插入查询之前检查备忘录的内容。防止插入空白备忘录
if memo1.lines.Text = '' then begin
showmessage('Warning:Missing data!');
abort;
end else ....
只要备忘录1中没有任何内容,它就可以正常工作。 但是,当用户点击进入空白备忘录内部并且光标移动到第二行时,运行查询,在没有警告消息的情况下触发插入, 尽管备注中没有任何内容。 有没有办法来防止这种情况?
用户点击后输入您的备忘录的文本包含空白(线返回),因此它不等于''。
您需要先修剪文本。 http://docwiki.embarcadero.com/Libraries/XE2/en/System.SysUtils.Trim
var
memoText : String;
...
memoText := Trim(memo1.lines.Text);
if memoText = '' then
begin
showmessage('Warning:Missing data!');
abort;
end else ....
如果用户按下回车是导致该备忘录的附加导线,那么你必须有WantReturns属性设置为TRUE ,和OnKeyPress或OnKeyDown处理#13键的事件或VK_RETURN虚拟键码。
如果设置WantReturns为FALSE,则用户必须使用CTRL + ENTER插入新行,和回车键的简单醒目将不插入一个空行。
但是,如果你很高兴与您的用户界面目前的行为方式,只是要检查的备忘录是否包含只有空白,那么你将不得不单独验证此使用TRIM(Memo.Text)或其他一些用于测试备忘录内容的机制以满足您的应用程序定义“不为空”。
正如其他人指出,使用TRIM()上Memo.Text只是为了测试的非空白字符的存在可能是非常低效的,但如何关心的与其说这是你的情况将取决于您申请中备忘录的预期内容。
甲以测试非空白串更加有效的方式将是:
function ContainsOnlyWhitespace(const aString: String): Boolean;
var
i: Integer;
begin
result := FALSE;
for i := 1 to Length(aString) do
if (aString[i] > ' ') then
EXIT;
result := TRUE;
end;
这将是如此使用:
if ContainsOnlyWhitespace(Memo.Text) then
begin
// show warning message etc...
end;
这将是显著比修剪更有效(),因为它不涉及生成任何新字符串或修改正在测试的字符串。
请原谅我的好奇心,但是请不要将备忘录写到数据库字段中,如果是这样,为什么不使用TDBMemo? – MartynA 2014-09-02 06:34:11
@MartynA对于很多人来说,Databound控件是一个很大的禁忌。他们中的大多数人对数据库进行了公开交易,在大多数情况下,这是非常不明智的。 – mg30rg 2014-09-02 07:53:36
@ mg30rg好点。我很习惯做我忽视的三层/ CDS方式。请注意,从前面的问题来看,我认为OP在使用DBX或FD,这与从服务器进程隔离客户端方面几乎是一回事。 – MartynA 2014-09-02 07:58:46