是否可以在Delphi中进行面向方面编程?我会对原生支持以及第三方解决方案感兴趣.
我没有想要用AOP解决的具体问题,但我只是对学习AOP感兴趣.
我有一个非常简单的SQL需要执行.
我有一个ProcessUser,Role和ProcessUserRole表.一个直截了当的多对多
我想选择所有ProcessUser也有管理员角色的人.
但是我的JPQL失败是因为我的用户也有角色官,因此在列表中检索它.
这是JPQL:
entityManager.createQuery("SELECT p FROM " + ProcessUser.class.getName()
+ " p join p.roles role WHERE role.name NOT IN ('sysadmin')").getResultList();
Run Code Online (Sandbox Code Playgroud)
生成的SQL是:
select
distinct processuse0_.id as id8_,
processuse0_.position as position8_,
processuse0_.username as username8_,
processuse0_.organization_id as organiza9_8_,
processuse0_.passwordHash as password4_8_,
processuse0_.fromEmail as fromEmail8_,
processuse0_.firstname as firstname8_,
processuse0_.lastname as lastname8_,
processuse0_.processes as processes8_
from
ProcessUser processuse0_
inner join
ProcessUserRoles roles1_
on processuse0_.id=roles1_.userId
inner join
Role role2_
on roles1_.roleId=role2_.id
where
(
role2_.name not in … 我想在编辑视图中插入一个区域,然后折叠该区域.
// fEditView: IOTAEditView;
var
writer: IOTAEditWriter;
begin
writer := fEditView.Buffer.CreateUndoableWriter;
//...
writer.Insert('{$REGION ''Documentation''}'#13#10'{$ENDREGION}');
writer := nil; // Flush the buffer
fEditView.Position.GotoLine(lineNo); // go to the line number of the region
fEditView.Paint;
end;
Run Code Online (Sandbox Code Playgroud)
此代码段将在代码编辑器中插入一个区域.但IDE需要一些操作才能在代码编辑器中生成这样的区域.
有没有办法强制IDE执行此操作然后我可以使用
(fEditView as IOTAElideActions).ElideNearestBlock;
Run Code Online (Sandbox Code Playgroud)
折叠吗?
例如,拥有:
<script type="text/javascript"
src="http://somedomain.com/js/somejs.js?14">
</script>
Run Code Online (Sandbox Code Playgroud)
那么"?14"在这里意味着什么呢?
我有两张桌子,categories和movies.
在movies表格中我有一个专栏categories.该列包含电影适合的类别.类别是以逗号分隔的ID.
这是一个例子:
Table categories {
-id- -name-
1 Action
2 Comedy
4 Drama
5 Dance
}
Table movies {
-id- -categories- (and some more columns ofc)
1 2,4
2 1,4
4 3,5
}
Run Code Online (Sandbox Code Playgroud)
现在回答实际问题:是否可以执行从电影表中排除类别列的查询,而是从类别表中选择匹配的类别并将它们返回到数组中?就像一个连接,但问题是有多个用逗号分隔的类别,是否有可能做某种正则表达式?
我有大型数据库(数百万行),我正在尝试为2个字段的数据类型做出最佳选择.我做的大部分都是varchar或INT.然而,2个领域我想知道Enum是否是最好的方式.
字段1 第一个字段是性别,我的数据目前是"男性"或"女性",或者可能是空白.我最初设置如下:
GENDER VARCHAR(6) NOT NULL
Run Code Online (Sandbox Code Playgroud)
这是最好的方式,还是最好将其设置为:
GENDER ENUM ('Male', 'Female') NOT NULL
Run Code Online (Sandbox Code Playgroud)
我是否需要将其设为NOT NULL以允许空白,或者我是否需要添加空白,即
GENDER ENUM ('Male', 'Female', '') NOT NULL
Run Code Online (Sandbox Code Playgroud)
更何况,我正在考虑将整个领域转换为M或F.
第2场: 除了状态字段外,我还有很多相同的事情要考虑,其中可能包含52个值(50个状态,DC,加空白).
我想最大的问题是 - 所有这些Enum的东西都值得吗?我的数据库有数百万行,所以一切都是一个因素,但我应该只使用VARCHAR(2)作为状态而不是ENUM.
我正在使用Embarcadero RAD Studio 2010(C++).项目文件(.cbproj)有五个不同的标记,包含.bpis或.libs列表.我想了解一些关于链接器如何使用这些库文件列表的信息(使用或不使用运行时包构建时).
LinkPackageImports
LinkPackageStatics
AllPackageLibs
PackageLibs
PackageImports
我想我已经理解了最后一个.它包含可以从IDE中的"项目属性"设置的运行时包列表.
这个问题的动机是我试图从我的应用程序中消除不必要的依赖项..cbproj中的这五个标签似乎都包含各种不同的lib和bpis.我知道我不需要的一些库,以及我认为我不需要的一些库.从某些列表中删除某些库似乎没有任何效果,而从其他列表中删除其他库会导致表单的链接器错误[ILINK32 Error] Fatal: Unable to open file 'FILENAME.OBJ'
我正在慢慢解决所有链接器问题,但是当我在这五个列表中的一个中包含库名称时,确切地知道我告诉链接器要做什么将非常有帮助.
我最近从D2010迁移到了DXE2,并在XE2和XE3(在我的朋友XE3中测试)中发现了与类内TBytes字段的RTTI生成相关的showstopper bug(或功能?).
我发现从不生成类中TBytes变量的RTTI信息.
以下代码在D2010中运行良好,但在XE2/XE3中显示消息"Error"
有没有人有任何线索?这将彻底打破我们所有的软件数据序列化实现
要测试代码,请将Rtti单位添加到使用声明中
type
TMyClass = class
public
Field1: Integer;
Field2: TBytes;
end;
procedure TForm2.Button1Click(Sender: TObject);
var
i: Integer;
Data: TMyClass;
Rtti: TRttiContext;
RttiClassType: TRttiInstanceType;
begin
Data := TMyClass.Create;
try
// Get the context
Rtti := TRttiContext.Create;
try
// Get the type for the class
RttiClassType := TRttiInstanceType(Rtti.GetType(Data.ClassInfo));
// Check the fields
for i := 0 to High(RttiClassType.GetFields) do
begin
// Check the field type
if not Assigned(RttiClassType.GetFields[i].FieldType) then
ShowMessage('Error');
end;
finally
Rtti.Free;
end;
finally
Data.Free;
end; …Run Code Online (Sandbox Code Playgroud) 我正在使用JPAContainer + Hibernate,加载需要很长时间.例如,SQLContainer加载60ms的页面和JPA Container加载1.30s的相同页面.
在控制台中使用JPAContainer,我看到许多SQL查询 - 对于每个实体 - 查询; 实体人员没有其他表格的链接;
使用jpacontainer的代码:
JPAContainer<Person> container = JPAContainerFactory.make(Person.class,
"persistence-unit");
table.setContainerDataSource(container);
Run Code Online (Sandbox Code Playgroud)
使用SQLContainer的代码:
JDBCConnectionPool pool = null;
try {
pool = new SimpleJDBCConnectionPool("org.postgresql.Driver",
"jdbc:postgresql://127.0.0.1:5432/postgres", "postgres",
"pwd");
} catch (SQLException e) {
e.printStackTrace();
}
TableQuery tq = new TableQuery("Person", pool);
SQLContainer sqlContainer = null;
try {
sqlContainer = new SQLContainer(tq);
} catch (SQLException e) {
e.printStackTrace();
}
table.setContainerDataSource(sqlContainer);
Run Code Online (Sandbox Code Playgroud)
我的persistence.xml文件:
<persistence-unit name="persistence-unit" transaction-type="RESOURCE_LOCAL">
<jta-data-source>java:jboss/datasources/mfc-frontendDS</jta-data-source>
<properties>
<!-- Properties for Hibernate -->
<property name="hibernate.archive.autodetection" value="class"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>
<property …Run Code Online (Sandbox Code Playgroud) 一个愚蠢的问题.当我从RAD Studio XE2退出然后再次启动它时,我发现现在所有以前打开的东西都已关闭,我必须手动恢复它们.
我想找到已经公开的
所以我可以继续工作而不记住一切.
Eclipse和Visual Studio执行此操作.如何让RAD Studio 在启动时恢复所有这些(或其中一些)?
delphi ×4
mysql ×2
aop ×1
breakpoints ×1
c++builder ×1
csv ×1
database ×1
delphi-2010 ×1
delphi-xe2 ×1
delphi-xe3 ×1
filenames ×1
hibernate ×1
ide ×1
javascript ×1
join ×1
jpa ×1
jpql ×1
linker ×1
region ×1
toolsapi ×1
vaadin ×1