小编Joh*_*ica的帖子

在where子句中使用select语句中的用户定义变量

我有这个选择语句正常工作:

SELECT 
  pre, dict.char, post, score
  , (SELECT @res := MatchPre(pre, 'test') AS var) AS mpre 
FROM dict;
Run Code Online (Sandbox Code Playgroud)

它会正确返回所有数据,其中MatchPre的结果位于标有"mpre"的列中.但是,我想只得到mpre> 0的结果.所以,从逻辑上讲,我试过这个:

SELECT 
  pre, dict.char, post, score
  , (SELECT @res := MatchPre(pre, 'test') AS var) AS mpre 
FROM dict 
WHERE mpre > 0;
Run Code Online (Sandbox Code Playgroud)

但无济于事.我尝试用"WHERE @res> 0","WHERE @ res.mpre> 0","WHERE mpre.@ res> 0"等交换"WHERE mpre> 0",但它会抛出错误或返回尽管原始的where-less查询给出了mpre值大于0的行,但结果集为空.

这个的正确语法是什么?

mysql

4
推荐指数
1
解决办法
1167
查看次数

断点命中时单元源代码与代码执行路径不匹配

我正在调试我使用 Delphi 6 Pro 使用 DSPACK 代码库创建的 DirectShow 过滤器。当我在名为 BaseClass.pas 的特定单元中设置的断点被击中时,我开始跟踪,执行点跳转到源代码中的奇怪位置。这通常表示被跟踪的源代码与编译成 Delphi 应用程序使用的包之一的源代码不匹配。奇怪的是,它只是 BaseClass 单元,因为我已经跟踪了属于 DSPACK 代码库的其他单元并且它们没有出现这个问题。我没有使用运行时包。

我扫描了我的磁盘,发现只有一份 BaseClass.dcu 的修改日期等于我上次构建程序的时间。我没有修改该单元或任何其他属于 DSPACK 的源。由于我的过滤器是主应用程序的一部分,这表明 BaseClass.pas 将受到双重使用情况的影响,因为它用于构建 DSPACK 组件包 (dpk),并且我的主应用程序也通过 TBCSource 对象直接引用它我的过滤器来自。请注意,我确实尝试将单元 PAS 文件直接添加到我的项目中,但这并没有解决任何问题。

我还返回并重新打开每个 DSPACK 包文件并进行了完整的重新构建。这些都没有帮助。还有什么我可以尝试使源与 BaseClass 单元的编译图像同步的吗?或者是一个完全不同的问题,如果是,它是什么,我该如何解决?

delphi debugging breakpoints

4
推荐指数
2
解决办法
2198
查看次数

提升后代类中方法可见性的最佳方法

详细阐述这个问题的最好方法是举例说明我正在尝试做什么......

我定义了一个"基类":

TMyBaseClass = class(TPersistent)
protected
  procedure Foo(const AValue: String); virtual;
  // more methods here (many more in fact)
end;
Run Code Online (Sandbox Code Playgroud)

我现在定义一个后代类:

TMyDescendantClass = class(TMyBaseClass)
public
  procedure Foo(const AValue: String); override;
  // etc. for all desired methods I wish to elevate into Public
end;
Run Code Online (Sandbox Code Playgroud)

这里的问题是我必须重新定义TMyDescendantClass的方法"Foo"以将链调用传递给TMyBaseClass:

procedure TMyDescendantClass.Foo(const AValue: String);
begin
  inherited;
end;
Run Code Online (Sandbox Code Playgroud)

这是浪费空间!我想知道是否有人知道任何方式来否定重新实现该方法的需要并且"继承".

一个理想的解决方案看起来像:

TMyDescendantClass = class(TMyBaseClass)
public
  procedure Foo(const AValue: String); elevated;
  // etc. for all desired methods
end;
Run Code Online (Sandbox Code Playgroud)

显然这是假设的,我知道Delphi语言中不存在关键字"已提升".是否有一个关键字具有相同的效果,我只是不知道?

谢谢!

delphi

4
推荐指数
1
解决办法
1836
查看次数

当应用程序包含很多数据集时,如何整理表单

在Delphi中一个中等复杂的数据库应用程序中,很容易在表单上拥有数十个数据集(表和查询)和相关的数据源.
所有这些都混乱了屏幕.
当您的表单具有pagecontrol每个页面都有自己的数据源集等的情况时,情况会变得更糟.

如果表和数据源是可视控件,那么至少它们只能在适用的选项卡上显示.
我已经考虑过创建一些可以容纳许多数据集和数据源的容器对象,但是从来没有得到它.

我还cnPack添加了选项来隐藏设计器中视图的非可视组件.但是这没有用,因为它很难选择它们.

什么是解决窗体设计器的同时仍然可以选择数据访问组件的解决方案?

(对于我在Delphi 2007和XE2中工作的价值)

delphi design-time dataset

4
推荐指数
1
解决办法
554
查看次数

XE2的VirtualTreeView组件

我在哪里可以获得Delphi XE2的VirtualTreeView组件?
我可以在这里看到VirtualTreeView的下载链接:http://www.soft-gems.net/index.php? option = com_content&task = view&id = 30& Itemid = 35

但是没有Delphi XE2的软件包,安装程序也不支持XE2.
仅源代码包仅支持Delphi 2007(前Unicode).

delphi virtualtreeview delphi-xe2

4
推荐指数
1
解决办法
3527
查看次数

相当于php的mysql_real_escape_string

我需要一些动态SQL来将大量值插入到数据库中.

INSERT INTO table1 (a,b,c,d) VALUES (1,2,3,'string with possible quotes'),....
Run Code Online (Sandbox Code Playgroud)

因为我想每批插入大约1,000行,所以参数实际上不是一个选项.
在php中我会使用mysql_lib并mysql_real_escape_string防止错误和SQL注入.

如何在Delphi中转义字符串值?

delphi escaping dynamic-sql

4
推荐指数
1
解决办法
3304
查看次数

是否可以修改已加载的资源?

我正在使用TResourceStream类来读取资源,知道我想修改内存中的资源,但上面类的Write方法的文档说:

应用程序不应使用TResourceStream来编写正在运行的应用程序的资源.当应用程序尝试写入应用程序的资源时,Write会覆盖继承的方法以引发EStreamError异常.

由于TResourceStream(WriteBuffer,WriteComponent)的所有其他数据写入方法都调用Write来进行实际写入,因此调用TResourceStream的任何数据写入方法都会引发异常.

问题是,有没有办法使用任何WinApi函数修改正在运行的应用程序中的资源?或者资源是否只读?

delphi resources winapi

4
推荐指数
1
解决办法
723
查看次数

Delphi Pascal XE4编译器错误?

我想知道我是否找到了Embarcadero编译器错误...

问题看起来与泛型有关.

这是我的源代码

unit u_DateCount;

interface

uses
  SysUtils,
  u_JavaScriptable
  ;

type
  TDateCount = class (TJavaScriptable)
    strict private
    public
      NoOfSamples : Integer;
      TheDate : TDate;
      function ToString():String; override;
  end;

implementation

function TDateCount.ToString():String;
var
    myYear, myMonth, myDay : Word;
begin
    DecodeDate(TheDate, myYear, myMonth, myDay);
    Result := Format('[new Date(%d, %d ,0), %d]', [myYear, myMonth, NoOfSamples]);
end;

end.
Run Code Online (Sandbox Code Playgroud)
unit u_Javascriptable;

interface

type
  TJavaScriptable = class
    strict private
    public
      function ToString:String; override;
  end;

implementation

function TJavaScriptable.ToString:String;
begin
    Result := '';
end;

end.
Run Code Online (Sandbox Code Playgroud)
unit u_LineChart;

interface …
Run Code Online (Sandbox Code Playgroud)

delphi generics delphi-xe4

4
推荐指数
1
解决办法
463
查看次数

我可以将类型参数传递给 DUnitx 中的测试用例吗?

我正在为我的 FastCode 项目编写测试用例。

我写了一个通用测试器,如下所示:

  TTest<T> = record
  private
    class var Def: System.Generics.Defaults.IComparer<T>;
    class var F: FastDefaults.TComparison<T>;
  strict private
    class function Slow(const Left, Right: T): integer; static;
    class function Fast(const Left, Right: T): integer; static;
    class constructor Init;
  public
    class procedure Test(const Left, Right: T); static;
  end;
Run Code Online (Sandbox Code Playgroud)

典型的测试用例如下所示:

[Test]
[TestCase('Single', '100.0,100.0')]
...many more testcases...
procedure TestSingle(const L,R: Single);
[Test]
[TestCase('Double', '100.0,100.0')]
...many more testcases... (identical to the one above).
procedure TestDouble(const L,R: double);
Run Code Online (Sandbox Code Playgroud)

测试代码通常如下(对每种类型重复):

procedure TestDefault.TestSingle(const L, R: Single);
begin
  TTest<Single>.Test(L,R); …
Run Code Online (Sandbox Code Playgroud)

delphi generics unit-testing dunitx

4
推荐指数
1
解决办法
1003
查看次数

如何保证RDTSC是准确的?

我读过 RDTSC 可以给出错误的读数,不应依赖。
这是真的吗?如果是这样,可以做些什么?

x86 x86-64 rdtsc cpuid

4
推荐指数
1
解决办法
1335
查看次数