小编Bir*_*ger的帖子

使用Firebird和Delphi进行全文搜索

我正在考虑在我们的Firebird数据库上实现全文搜索.我们的要求是:

  1. 应该为几个表中的每个字段编制索引.找到结果后,我们应该能够找到原始表.
  2. 索引可以存储在数据库或文件系统中.
  3. 必须使用搜索结果(BigInt主键)与数据库中的原始记录连接,以显示表中的记录.

任何人都可以推荐一种体面的方式来实现我们的需求吗?我已经看过以某种方式将DotLucence集成到Delphi中,但是无法真正找到有关如何实现它的信息.

delphi firebird full-text-search sphinx

7
推荐指数
1
解决办法
6634
查看次数

从SQL Server更新链接MySQL表的查询

我有一个带有链接MySQL服务器的MS SQL Server.我需要在两个服务器之间部分同步一个表.这是基于以下三个步骤完成的:

  1. 删除MySQL表中不满足条件的所有行

  2. 在MySQL表中插入满足条件的所有新行

  3. 更新MySQL服务器中满足条件的所有行,并在MySQL和SQL Server之间具有不同的数据

步骤1和2始终没有问题.但如果有任何更新,第3步将无法运行.查询失败,出现以下异常:行集使用了乐观并发,并且在上次提取或重新同步包含行后,列的值已更改.

这是执行的查询:

update mysqlserver...subscribers
set Firstname = Voornaam, 
  Middlename = Tussenvoegsel, 
  Surname = Achternaam, 
  email = e-mail 
from mysqlserver...subscribers as b, tblkandidaat 
where (b.kandidaatid = tblkandidaat.kandidaatid) and
  (tblkandidaat.kandidaatid in (
    select subsc.kandidaatid
    from mysqlserver...subscribers subsc inner join tblKandidaat 
      on (subsc.kandidaatid=tblKandidaat.kandidaatid) 
    where (subsc.list=1) and
      ((subsc.firstname COLLATE Latin1_General_CI_AI <> Voornaam 
      or (subsc.middlename COLLATE Latin1_General_CI_AI <> Tussenvoegsel) 
      or (subsc.surname COLLATE Latin1_General_CI_AI <> tblKandidaat.Achternaam) 
      or (subsc.email COLLATE Latin1_General_CI_AI <> tblKandidaat.e-mail))
  ));
Run Code Online (Sandbox Code Playgroud)

有人知道如何防止这种情况吗?

mysql sql-server

6
推荐指数
1
解决办法
5085
查看次数

为通用对象列表创建对象

我不确定这在 Delphi 中是否可行。我环顾四周,似乎找不到答案(例如,不可能的示例或提示):

我有一个泛型列表类,我想创建一个泛型类型的实例。例如:

type
  TTypeA = class(TObject);

procedure Test;
var
  MyList: TobjectList<TTypeA>;
  NewListObject: TTypeA;
begin
  MyList := TObjectList<TTypeA>.Create;
  NewListObject := MyList.xxx //what to put on the xxx
end;
Run Code Online (Sandbox Code Playgroud)

是否可以创建一个函数 xxx 来创建 TTypeA 类型的新对象?

@jeroen:感谢下面的回答。但是,我忘记了问题中的一个重要细节:

我希望此代码也适用于任何其他类型,因此无需事先了解 TObjectList 的类型 T。我可能会创建以下列表:

MyList: TObjectList<TCar>;
MyList: TObjectList<TBike>;
Run Code Online (Sandbox Code Playgroud)

在不知道 MyList 是否包含 TCar 或 TBike(都从相同的基类和相等的构造函数派生)的情况下,我想向 MyList 添加一个新项目。

根据 Uwe Raabe 的建议,我遇到了下一个问题:

我修改了我的班级

TMyObjectList<T:class, constructor> = class(TMyBaseObjectList<T>)

其中 TMyBaseObjectList 定义为

TMyBaseObjectList<T:TMyBaseObject> = class(TObjectList)

现在我收到一个错误:类型参数 'T' 与类型 'T:TMyBaseObject' 不兼容

delphi oop generics

5
推荐指数
1
解决办法
3084
查看次数

如何获取自定义属性的属性类型名称?

在Delphi 2007中,我为项目添加了一个新的字符串类型:

type
  String40 = string;
Run Code Online (Sandbox Code Playgroud)

此属性用于类:

type
  TPerson = class
  private
    FFirstName = String40;
  published
    FirstName: string40 read FFirstName write FFirstName;
  end;
Run Code Online (Sandbox Code Playgroud)

在运行时,我想通过使用RTTI获取属性FirstName的名称.我希望它是String40:

var
  MyPropInfo: TPropInfo;
  PropTypeName: string;
  MyPerson: TPerson;
begin
  MyPerson := TPerson.Create;
  MyPropInfo := GetPropInfo(MyPerson, 'FirstName')^;
  PropTypeName := MyPropInfo.PropType^.Name;
Run Code Online (Sandbox Code Playgroud)

但是,在此示例中,PropTypeName是'string'.我需要做什么才能获得正确的属性类型名称'String40'?

delphi rtti

3
推荐指数
1
解决办法
6280
查看次数

检查对象是否继承自泛型类

我有一个通用的列表类:

TMyObjectlist<T: TMyObject> = class(TObjectList<T>);
Run Code Online (Sandbox Code Playgroud)

和派生列表类:

TMyDerivedObjectList = class(TMyObjectList<TMyDerivedObject>);
Run Code Online (Sandbox Code Playgroud)

我想检查TMyDerivedObjectList的实例MyList是否继承自TMyObjectList,但是:

MyList.InheritsFrom(TMyObjectlist<TMyObject>)
Run Code Online (Sandbox Code Playgroud)

返回False.

事实证明,MyList.Classparent属于类型TMyObjectList<TMyDerivedObject>.

在这种情况下,有谁知道如何检查InheritsFrom?

delphi generics inheritance

3
推荐指数
1
解决办法
2170
查看次数

IBquery在执行查询时冻结主窗体 - 如何防止冻结?

我在其中一个表单上有一个TIBquery对象,执行繁重的查询,表单冻结了一段时间.

  • 可以防止这种"冻结",以及如何?

delphi firebird

2
推荐指数
1
解决办法
1626
查看次数