小编Kie*_*ran的帖子

在Delphi调试中移动程序计数器

在Visual Studio中,当您使用断点进行调试时,您可以通过将执行光标拖动到另一行来更改下一行代码.这可以让你跳过IF语句等.

我在想知道Delphi中是否有类似的功能,有人知道吗?

我一直在CPU窗口(Delphi 2006)中查看,但您似乎只能按顺序运行说明,而不是跳过它们.

delphi debugging program-counter

6
推荐指数
2
解决办法
587
查看次数

Delphi:关闭应用程序时如何调试访问冲突?

我正在使用Delphi 6,我有一个应用程序,当关闭时会产生访问冲突错误.我们使用EurekaLog,因此我得到了用于调试的堆栈跟踪,但错误似乎每次都在不同的单元中随机出现,但总是在最终化部分中释放某些内容时.

我怎样才能调试这个以查看导致问题的原因?我不确定如何开始调试应用程序最终确定时发生的事情.

[编辑:]对不起,如果我不清楚,或许更好的问题是:如果我只想完成最终确定部分,那么开始使用断点进行调试的最佳位置是什么?这些错误似乎出现在我们使用的第三方组件(devexpress dx/cxgrid库)中,所以我想在Delphi开始在其他单元中调用finalize例程之前的最后一点开始调试我的代码.

delphi access-violation

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

Oracle Pl/SQL通过SQL*PLUS触发编译错误

我在通过SQL*PLUS编译Oracle触发器时遇到问题 - 我不认为我是愚蠢的但是我看不出问题是什么.

我们有一个安装程序脚本,它本质上是一个批处理文件,它通过在多个脚本上调用SQLPLUS来创建/刷新数据库中的所有对象,每个脚本包含一个视图,触发器等.首先创建表和视图,然后触发.此时V_BS_GRIDFIELDS可能会创建或不创建下面的视图,也可能稍后由其他过程创建.视图是一个可更新的视图,因此我们在其上放置了一个触发器以将更新推送到不同的表,如下所示:

CREATE OR REPLACE FORCE TRIGGER TR_INSTUPD_BS
  INSTEAD OF INSERT OR UPDATE OR DELETE 
  ON V_BS_GRIDFIELDS
FOR EACH ROW
BEGIN

  IF INSERTING OR DELETING THEN
    NULL;
  END IF;

  IF UPDATING THEN
    -- Can only change these fields
    IF (:OLD.VISIBLE <> :NEW.VISIBLE) OR (:OLD.COMPULSORY <> :NEW.COMPULSORY) THEN 

      -- Source Table = BS_GRIDFIELDS
      IF (:OLD.SOURCE_TYPE = 0) THEN

        UPDATE BS_GRIDFIELDS BS_GF
           SET BS_GF.VISIBLE    = :NEW.VISIBLE,
               BS_GF.COMPULSORY = :NEW.COMPULSORY
         WHERE BS_GF.FIELD_NAME = :OLD.FIELD_NAME;

      END IF;
    END IF;
  END …
Run Code Online (Sandbox Code Playgroud)

oracle triggers view

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

Delphi:你能在DLL中有一个组件类定义,并在运行时加载并创建它吗?

对不起,如果这是一个愚蠢的问题,但这不是我以前必须做的事情.

是否可以在DLL中创建一个组件类,比如TPanel或TDBGrid的后代,然后在运行时将该DLL加载到另一个应用程序中,然后创建这些控件并像普通的Delphi组件一样使用它们?

如果是这样,你可以给我任何指示,看看从哪里开始这样做?

delphi dll components

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

从数据库读取整数返回浮点数

我们在Oracle DB中有一个表定义为:

CREATE TABLE AVALUES
(
  ACODE   VARCHAR2(4) NOT NULL,
  ATYPE   NUMBER NOT NULL,
  ANAME   VARCHAR2(50),
  CREATED DATE DEFAULT SYSDATE
)
Run Code Online (Sandbox Code Playgroud)

在Delphi中,我们在类似于此的ADOQuery组件中有一个查询,它将值返回给我们的应用程序:

with qryComp do
begin
  Close;
  SQL.Text := 
    'SELECT ATYPE FROM AVALUES ORDER BY CREATED';
  Open;
  while not EOF do
  begin
    AddComponents('NAME' + FieldByName('ATYPE').AsString);
    Next;
  end;
  Close;
end;
Run Code Online (Sandbox Code Playgroud)

部署在许多不同的客户端PC上已经运行了好几年,我们的代码中没有任何内容发生变化.然而,在一些客户端PC上它最近开始返回,例如1.999999999969而不是2,这会导致应用程序崩溃.我们已经尝试寻找问题,但它是非常间歇性的 - 通过远程桌面连接到客户端计算机,我们根本无法复制它.

我可以采取哪些建议来进一步调查此事?因为它是间歇性的,只发生在几台计算机上,所以很难调试.我认为这可能是Oracle客户端的一个问题,但我不确定我们如何才能真正验证它.

谢谢你的帮助.

delphi oracle floating-point

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

如何确定Oracle Package中的子程序类型

最好用一个例子来解释.给出以下数据库对象:

CREATE OR REPLACE PROCEDURE TEST_PROCEDURE IS
BEGIN
  NULL;
END;
/

CREATE OR REPLACE FUNCTION TEST_FUNCTION RETURN NUMBER IS
BEGIN
  RETURN NULL;
END;
/

CREATE OR REPLACE PACKAGE TEST_PACKAGE IS

  PROCEDURE TEST_PROCEDURE;
  FUNCTION TEST_FUNCTION RETURN NUMBER;

END TEST_PACKAGE;
/

CREATE OR REPLACE PACKAGE BODY TEST_PACKAGE IS

  PROCEDURE TEST_PROCEDURE IS
  BEGIN
    NULL;
  END;

  FUNCTION TEST_FUNCTION RETURN NUMBER IS
  BEGIN
    RETURN NULL;
  END;

END TEST_PACKAGE;
/
Run Code Online (Sandbox Code Playgroud)

如果我们在USERPROCEDURES中查询未打包的子程序,我们会在OBJECT_TYPE列中报告它们的类型:

但是,如果我们查询包中的子程序,我们只得到一个OBJECT_TYPE包装,这是不是特别有用:

是否可以查询以找出实际类型而无需像通过USER_SOURCE挖掘一样?我查看了数据字典,但没有发现任何有用的东西.

谢谢你的帮助!

oracle plsql oracle11g

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