要实现的目的就是填写地址,例如**省**市**区(县)**乡(镇)我的数据库里面用的是一个‘全称’字段,吧这些信息全部存到一起,然后截取字段,取出需要的字符(要求这么建立数据库,没办法。)
问题一:去掉combobox里面的重复值
for i:=0 to combobox1.items.count-1
begin
for j:=i+1 to combobox1.items.count-1
begin
if combobo1.items[i]=combobox1.items[j] then
combobox1.items.delete(j);
end;
end;
为什么这样删除不全重复的值,只能删掉一部分,现在我用combobox1.Items.IndexOf(s)<0这种方法
问题二:
function TFrmDiqu.Panduan(e: string): integer;
//因为有的地名比较特殊,例如:市南区,我要的是‘市南’,所以,要判断一下
var
n,m,x:integer;
s:string;
begin
x:=0;
s:=e;
if pos('区',s)>0 then
begin
n:=pos('区',s);
m:=Length(trim(s));
s:=RightStr(s,m-n);
//showmessage(s);
x:=Panduan(s);
if x>0 then
n:=x;
end;
if pos('县',s)>0 then
begin
n:=pos('县',s);
m:=Length(trim(s));
s:=RightStr(s,m-n);
//showmessage(s);
x:=Panduan(s);
if x>0 then
n:=x;
end;
if pos('市',s)>0 then
begin
n:=pos('市',s);
m:=Length(trim(s));
s:=RightStr(s,m-n);
//showmessage(s);
x:=Panduan(s);
if x>0 then
n:=x;
end;
Result:=n; //返回区县最后一个字节的位置
end;
procedure TFrmDiqu.QuxianBrush;
var
i,m,n:integer;
s,ss:string;
begin
//这个是查询出前面填上的的省、市,然后检索出类似的数据,肯定没有问题
try
DMDiqu.QueryCSelect(trim(DBshengfen.Text)+'省'+trim(DBchengshi.Text)+'市');
except
Application.MessageBox('数据加载失败',sysinfo,mb_ok+MB_ICONERROR);
exit;
end;
//这个是查询出前面填上的省、市,然后检索出类似的数据,肯定没有问题 for i := 0 to DMDiqu.QueryC.RecordCount-1 do//循环
begin
n:=pos('市',DMDiqu.QueryC.FieldByName('全称').AsString);
m:=Length(Trim(DMDiqu.QueryC.FieldByName('全称').AsString));
ss:=RightStr(DMDiqu.QueryC.FieldByName('全称').AsString,m-n);
n:=Panduan(ss);
s:=copy(ss,0,n-1);
if (s<>'') and (DBchengshi.Items.IndexOf(s)<0) then
begin
if PageControl1.ActivePage=TabSheet1 then
DBquxian.Items.Add(s)
else
DBComboBox6.Items.Add(s);
end;
DMJiezhongdanganEdit.QueryC.Next;
end;
end;
看到第一个的函数里面有showmessage语句了吧,如果我屏蔽掉这个语句,那么,有的数据就会显示‘市南区’、‘市北区’有的显示‘市南’这样的效果;如果不屏蔽掉,就全部显示‘市南’、‘市北’,为什么?很不理解。实在研究 不明白了,求高手解答。
s:=RightStr(s,m-n);
//showmessage(s);
x:=Panduan(s);
最多只能给100,少了点,见谅。ComboBox字符串截取
问题一:去掉combobox里面的重复值
for i:=0 to combobox1.items.count-1
begin
for j:=i+1 to combobox1.items.count-1
begin
if combobo1.items[i]=combobox1.items[j] then
combobox1.items.delete(j);
end;
end;
为什么这样删除不全重复的值,只能删掉一部分,现在我用combobox1.Items.IndexOf(s)<0这种方法
问题二:
function TFrmDiqu.Panduan(e: string): integer;
//因为有的地名比较特殊,例如:市南区,我要的是‘市南’,所以,要判断一下
var
n,m,x:integer;
s:string;
begin
x:=0;
s:=e;
if pos('区',s)>0 then
begin
n:=pos('区',s);
m:=Length(trim(s));
s:=RightStr(s,m-n);
//showmessage(s);
x:=Panduan(s);
if x>0 then
n:=x;
end;
if pos('县',s)>0 then
begin
n:=pos('县',s);
m:=Length(trim(s));
s:=RightStr(s,m-n);
//showmessage(s);
x:=Panduan(s);
if x>0 then
n:=x;
end;
if pos('市',s)>0 then
begin
n:=pos('市',s);
m:=Length(trim(s));
s:=RightStr(s,m-n);
//showmessage(s);
x:=Panduan(s);
if x>0 then
n:=x;
end;
Result:=n; //返回区县最后一个字节的位置
end;
procedure TFrmDiqu.QuxianBrush;
var
i,m,n:integer;
s,ss:string;
begin
//这个是查询出前面填上的的省、市,然后检索出类似的数据,肯定没有问题
try
DMDiqu.QueryCSelect(trim(DBshengfen.Text)+'省'+trim(DBchengshi.Text)+'市');
except
Application.MessageBox('数据加载失败',sysinfo,mb_ok+MB_ICONERROR);
exit;
end;
//这个是查询出前面填上的省、市,然后检索出类似的数据,肯定没有问题 for i := 0 to DMDiqu.QueryC.RecordCount-1 do//循环
begin
n:=pos('市',DMDiqu.QueryC.FieldByName('全称').AsString);
m:=Length(Trim(DMDiqu.QueryC.FieldByName('全称').AsString));
ss:=RightStr(DMDiqu.QueryC.FieldByName('全称').AsString,m-n);
n:=Panduan(ss);
s:=copy(ss,0,n-1);
if (s<>'') and (DBchengshi.Items.IndexOf(s)<0) then
begin
if PageControl1.ActivePage=TabSheet1 then
DBquxian.Items.Add(s)
else
DBComboBox6.Items.Add(s);
end;
DMJiezhongdanganEdit.QueryC.Next;
end;
end;
看到第一个的函数里面有showmessage语句了吧,如果我屏蔽掉这个语句,那么,有的数据就会显示‘市南区’、‘市北区’有的显示‘市南’这样的效果;如果不屏蔽掉,就全部显示‘市南’、‘市北’,为什么?很不理解。实在研究 不明白了,求高手解答。
s:=RightStr(s,m-n);
//showmessage(s);
x:=Panduan(s);
最多只能给100,少了点,见谅。ComboBox字符串截取
应该是DBquxian,不过不影响大家看。
for i:=0 to combobox1.items.count-1
begin
for j:=i+1 to combobox1.items.count-1
begin
if combobo1.items[i]=combobox1.items[j] then
combobox1.items.delete(j);
end;
end;
为什么这样删除不全重复的值,只能删掉一部分,现在我用combobox1.Items.IndexOf(s)<0这种方法因为你Delete(j)之后,combobox1.items就少了一笔记录了,本来下一笔是j+1的,你删除之后序号j+1实际就变成现在的j了
不要用for循环,用while
function TFrmDiqu.Panduan(e: string): integer;
//因为有的地名比较特殊,例如:市南区,我要的是‘市南’,所以,要判断一下
var
n,m,x:integer;
//s:string;
begin
x:=0;
//s:=e;
if pos('区',e)>0 then
begin
n:=pos('区',e);
m:=Length(trim(e));
//s:=RightStr(s,m-n);
//showmessage(s);
x:=Panduan(RightStr(e,m-n));
if x>0 then
n:=x;
end;
.......
//因为有的地名比较特殊,例如:市南区,我要的是‘市南’,所以,要判断一下
var
n,m,x:integer;
s:string;
begin
x:=0;
s:=e;
if pos('区',s)>0 then
begin
n:=pos('区',s);
m:=Length(trim(s));
s:=RightStr(s,m-n);
//showmessage(s);
x:=Panduan(s);
if x>0 then
n:=x;
exit;
end;
if pos('县',s)>0 then
begin
n:=pos('县',s);
m:=Length(trim(s));
s:=RightStr(s,m-n);
//showmessage(s);
x:=Panduan(s);
if x>0 then
n:=x;
exit;
end;
{if pos('市',s)>0 then//市你已经在前面过滤掉了,这里不需要再判断,要不然,市南区的第一个市字会被处理
begin
n:=pos('市',s);
m:=Length(trim(s));
s:=RightStr(s,m-n);
//showmessage(s);
x:=Panduan(s);
if x>0 then
n:=x;
end;}
Result:=n; //返回区县最后一个字节的位置
end;
begin
n:=pos('市',s);
m:=Length(trim(s));
s:=RightStr(s,m-n);
//showmessage(s);
x:=Panduan(s);
if x>0 then
n:=x;
end;}