if not table1.Locate('a', "0001"[loCaseInsensitive]) then
Application.MessageBox ('没有符合条件的运单号!','提示',
MB_ICONWARNING+MB_OK+MB_DEFBUTTON2);我用一个dbgrid 连接到table1上
table1中加入了过滤条件
table1.Filter := str;
table1.Filtered := true;我在查询中录入‘0001’那么只要找到这条记录 DBgrid 就自动跳到这条记录上,‘0001’在数据库中可能有重复记录,但是 DBgrid 中保证只显示一条‘0001’记录现在问题是:查询时有的编号能查到,有的却不行。是不是它找到其它相同编号记录了?可是那些同号的记录已经被过滤掉了啊?
Application.MessageBox ('没有符合条件的运单号!','提示',
MB_ICONWARNING+MB_OK+MB_DEFBUTTON2);我用一个dbgrid 连接到table1上
table1中加入了过滤条件
table1.Filter := str;
table1.Filtered := true;我在查询中录入‘0001’那么只要找到这条记录 DBgrid 就自动跳到这条记录上,‘0001’在数据库中可能有重复记录,但是 DBgrid 中保证只显示一条‘0001’记录现在问题是:查询时有的编号能查到,有的却不行。是不是它找到其它相同编号记录了?可是那些同号的记录已经被过滤掉了啊?
那被过滤器过滤掉的记录也会被查出来吗???
我不太明白比如说,现在有三条记录
a b
001 0
001 1
002 1
过滤后剩下
a b
001 1
002 1
现在查询 table1.Locate('a', "0001"[loCaseInsensitive])
可是 DBgrid 却指向 002
我真晕了!!!
你
table1.Filtered := false;
table1.Filter := 001;
table1.Filtered := true;
过虑以后,记录变为
a b
002 1
你这个时候在locate 001
当然找不到001了,指针指向最后一条记录
不是的
table1.Filtered := false;
table1.Filter := “b=1”;
table1.Filtered := true;
过虑以后,记录变为
a b
001 1
002 1
table1.Locate('a', '001', [loCaseInsensitive]) 这句话有错吗?我照着帮助的格式写的
KeyValues:Variant;Options:TLocateOptions):Boolean;virtual;第一个参数是要搜索的字段名称,第二个是搜索的数据,第三个是搜索的选项
我详细的再说一次一个表
id b dl
1 001 0
2 002 1
3 003 1
4 001 1用记录集打开后,再加上过滤
table1.Filtered := false;
table1.Filter := “dl=1”;
table1.Filtered := true;
dbgrid1.datasource = datasource1;
现在记录为
id b dl
2 002 1
3 003 1
4 001 1用下面的语句定位记录
table1.Locate('b', "001"[loCaseInsensitive])
可是 dbgrid1 不是指向
4 001 1
而是指向
2 002 1 (并不报错)因为locate还是定位到了第一条记录,就好象过滤器不存在一样
1 001 0
现在问当有两条‘001’记录,并且过滤掉一个的时候,我怎么定位到现存的‘001’记录???
说的够明白了吧 !!! 谁能帮我,我再开帖给100分
4 001 1
如果001後面多一個空格,就找不到)你可以把locate的結果showmessage看看,看是否為true.
另外,我剛寫了一個小程序測試了一下,locate和filter是沒有沖突的。filtered:=true之後,再locate的話,指針還是定位在filter後的結果集內的。
procedure TForm1.FormCreate(Sender: TObject);
begin
table1.Filtered:=false;
table1.Filter:='state=''St. Croix''';
table1.Filtered:=true;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
table1.Locate('zip','02800',[loCaseInsensitive])
end;執行結果沒問題
1.PAS文件:
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, Grids, DBGrids, DBTables, StdCtrls;type
TForm1 = class(TForm)
Database1: TDatabase;
Table1: TTable;
DBGrid1: TDBGrid;
DataSource1: TDataSource;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
begin
table1.Filtered := false;
table1.Filter := 'd1=1';
table1.Filtered := true;
dbgrid1.datasource := datasource1;end;2.DFM文件:
object Form1: TForm1
Left = 192
Top = 107
Width = 544
Height = 375
Caption = 'Form1'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object DBGrid1: TDBGrid
Left = 40
Top = 120
Width = 320
Height = 120
DataSource = DataSource1
TabOrder = 0
TitleFont.Charset = DEFAULT_CHARSET
TitleFont.Color = clWindowText
TitleFont.Height = -11
TitleFont.Name = 'MS Sans Serif'
TitleFont.Style = []
end
object Button1: TButton
Left = 192
Top = 264
Width = 75
Height = 25
Caption = 'Button1'
TabOrder = 1
OnClick = Button1Click
end
object Button2: TButton
Left = 328
Top = 288
Width = 75
Height = 25
Caption = 'Button2'
TabOrder = 2
OnClick = Button2Click
end
object Database1: TDatabase
Connected = True
DatabaseName = 'BOOK'
DriverName = 'MSSQL'
LoginPrompt = False
Params.Strings = (
'DATABASE NAME=book'
'SERVER NAME=JOEHUANG'
'USER NAME=sa'
'OPEN MODE=READ/WRITE'
'SCHEMA CACHE SIZE=8'
'BLOB EDIT LOGGING='
'LANGDRIVER='
'SQLQRYMODE='
'SQLPASSTHRU MODE=SHARED AUTOCOMMIT'
'DATE MODE=0'
'SCHEMA CACHE TIME=-1'
'MAX QUERY TIME=300'
'MAX ROWS=-1'
'BATCH COUNT=200'
'ENABLE SCHEMA CACHE=FALSE'
'SCHEMA CACHE DIR='
'HOST NAME='
'APPLICATION NAME='
'NATIONAL LANG NAME='
'ENABLE BCD=FALSE'
'TDS PACKET SIZE=4096'
'BLOBS TO CACHE=64'
'BLOB SIZE=32'
'PASSWORD=whole183')
SessionName = 'Default'
Left = 40
Top = 40
end
object Table1: TTable
Active = True
DatabaseName = 'BOOK'
TableName = 'dbo.TestTable'
Left = 96
Top = 48
end
object DataSource1: TDataSource
DataSet = Table1
Left = 168
Top = 40
end
end
procedure TForm1.Button2Click(Sender: TObject);
begin
table1.Locate('b', '001', [loCaseInsensitive])
end;end.
forgot2000(忘记2000年)
thatsummer(no reason)
suton(suton)
和各位朋友帮忙我最后把记录重新排序就可以了,但是过滤出来的数据还是不能用locate定位,可能是我的D6是盗版吧