我正在考虑在我们的Firebird数据库上实现全文搜索.我们的要求是:
任何人都可以推荐一种体面的方式来实现我们的需求吗?我已经看过以某种方式将DotLucence集成到Delphi中,但是无法真正找到有关如何实现它的信息.
我有一个带有链接MySQL服务器的MS SQL Server.我需要在两个服务器之间部分同步一个表.这是基于以下三个步骤完成的:
删除MySQL表中不满足条件的所有行
在MySQL表中插入满足条件的所有新行
更新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)
有人知道如何防止这种情况吗?
我不确定这在 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 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'?
我有一个通用的列表类:
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?
我在其中一个表单上有一个TIBquery对象,执行繁重的查询,表单冻结了一段时间.
delphi ×5
firebird ×2
generics ×2
inheritance ×1
mysql ×1
oop ×1
rtti ×1
sphinx ×1
sql-server ×1