function CheckSame(TableName, FieldName, FieldValue: string): Boolean;
begin
  try
    with Alldata.QyTemp do
    begin
      Close;
      SQL.Clear;
      SQl.Add('select * from ' + TableName + ' where ' + FieldName + '=' + '''' + FieldValue + '''');
      Open;
      if RecordCount > 0 then
        result := true
      else
        Result := false;
    end;
  except
    application.MessageBox('读取数据出错!', '系统提示', MB_OK + MB_ICONinformation);
    exit;
  end;
end;
以上是小弟初学delphi写的关于判断是否有重复记录的,但如果是刚好在第一条记录找到的话,就很快,但是如果数据库记录n多的话,有刚好在最后一条找到,岂不是很慢,有没有什么好的算法啊??请教大家一下!!◎◎

解决方案 »

  1.   

    把*换成FieldName,速度会快一点
      

  2.   

    如果FieldName上有索引的话,不会很慢的。
      

  3.   

    function CheckSame(TableName, FieldName, FieldValue: string): Boolean;
    begin
      try
        with Alldata.QyTemp do
        begin
          SQL.Clear;
          SQl.Add('select Count(*) from ' + TableName + ' where ' + FieldName + '=' + '''' + FieldValue + '''');
          Open; //交换一下
          Result := Fields[0].AsInteger > 0;
          Close; //交换一下,否则浪费内存
        end;
      except
        application.MessageBox('读取数据出错!', '系统提示', MB_OK + MB_ICONinformation);
        exit;
      end;
    end;