在DBEdit中判断输入的内容是否重复的问题。 还是做不出来,怎么办?难道每次新建的时候都必须复制一个原表来进行查询?我不是太相信,肯定有更简单的方法。做过的人

  • 主题发起人 主题发起人 puzzle_he
  • 开始时间 开始时间
P

puzzle_he

Unregistered / Unconfirmed
GUEST, unregistred user!
在DBEdit中判断输入的内容是否重复的问题。 还是做不出来,怎么办?难道每次新建的时候都必须复制一个原表来进行查询?我不是太相信,肯定有更简单的方法。做过的人请告诉我吧。我等了两天了! (10分)<br />在新建状态下(即append),DBEdit中判断输入的内容怎样判断用户输入的
内容是否跟数据表中的内容重复?
没有办法用纪录指针来遍历表,怎么办呢?
各位高手是怎样解决这个问题的?帮帮我!
先谢谢各位高手了!
 
在onchange事件中控制
失去焦点事件onexit
 
我在OnExit和OnChange中分别写了类似下面的代码,但没有程序没有一点反应。
再请高手指教!
procedure TForm1.DBEdit7Exit(Sender: TObject);
var
i,n:integer;
begin
if flag //flag为T,则处于新建状态。
then n:=form1.Table1.RecordCount-1
else n:=form1.Table1.RecordCount;
if form1.DBEdit8.Text<>''
then
begin
for i:=1 to n do
begin
form1.Table1.MoveBy(i);
if form1.Table1.FieldByName('loan_no').AsString=form1.DBEdit8.Text
then showmessage('已存在该贷款编号,请重新输入!');
end;
end;
end;
 
在onkeypress里写
var
s1,s2: String;
i : Integer;
begin
if Trim(edit1.Text) = '' then
exit;
s1 := Copy(Trim(Edit1.Text),Length(Trim(Edit1.text)),Length(Trim(Edit1.text))+1);
for i := 0 to Length(Trim(Edit1.Text)) do
begin
s2 := Copy(Trim(Edit1.text),i,i+1);
if s2 = s1 then
begin
showmessage('重复');
end;
end;
end;
 
调试一下,看你的程序在哪一句跳过你的比较代码的
 
我错了,我错了,不要打我呀~
 
kenny.hu:
我在OnExit中调试了一次,
输入字符a后用鼠标选择其它控件,发现OnExit中if的判断判断条件为假,
程序直接就退出去了。
不知是什么原因。
 
阿西喊佛:
我怎么会打你呢?
你错在哪里?能说明白一些吗?
你又有什么好的法子呢?
 
是哪个IF
 
if form1.DBEdit8.Text<>''
执行到这一步,然后就跳出去了。
不知何故?
请教!
 
呵呵,也没你这么干的呀,这是数据库啊,不用locate找,一个一个记录比较.....
 
我也不想这么干啊,只是用locate之后,纪录指针会变化了,
我要回到刚才输入的那个状态,只好出此下策了。
 
反正我的思路就是这样的。
做一个循环,判断最后写的字符是否在前面的字符里面出现过。
如果有就showmessage,就是这样。
写在onkeypress事件里面。

呵呵,就是这样的了。
 
procedure TForm1.DBEdit7Exit(Sender: TObject);///DBEdit7Exit
var
i,n:integer;
begin
if flag //flag为T,则处于新建状态。
then n:=form1.Table1.RecordCount-1
else n:=form1.Table1.RecordCount;
if form1.DBEdit8.Text<>''///DBEdit8.Text?????
then
begin
for i:=1 to n do
begin
form1.Table1.MoveBy(i);
if form1.Table1.FieldByName('loan_no').AsString=form1.DBEdit8.Text
then showmessage('已存在该贷款编号,请重新输入!');
end;
end;
end;
 
kenny.hu:
DBEdit8.Text就是当前输入的edit,就是要限制该输入框的内容重复!
有好法子吗?
 
procedure TForm1.DBEdit7Exit(Sender: TObject);///DBEdit7Exit?????
 
你判断edit8怎么写在edit7的onexit事件里了?
 
用sql语句多好,如果查询结果不为空就是存在嘛。
 
kenny.hu:
眼睛好厉害!我的一个控件名写错了,你也看出来了。佩服!
我改回去了,还是用OnExit这个事件。但失去焦点时有反应了,但出现下面的提示:
Project Project1.exe raised exception class EDBEngineError with message
'Key voilation'. Process stopped. Use step or Run to continue.
错误指在if form1.Table1.FieldByName('loan_no').AsString=form1.DBEdit7.Text
我现在明白了错误的根本原因了:
在新建的状态下,纪录指针应该在最后,而我的循环语句却改变了这个状态,
这肯定导致非法操作的!必死无疑!
原来避开了findkey和locate,同样的问题还是会出现。
现在该怎么办呢?
有谁做过呢?

 
南宫吹云:
能说说详细的做法吗?
程序处于新建状态,纪录已经增加了一条,虽然没有用post(用“确定”来完成),
但是在edit中已写入内容,用sql来查肯定就不为空的。
是这样吗?
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
913
SUNSTONE的Delphi笔记
S
D
回复
0
查看
878
DelphiTeacher的专栏
D
D
回复
0
查看
847
DelphiTeacher的专栏
D
后退
顶部