RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / user-19954

Konstantin78's questions

Martin Hope
Konstantin78
Asked: 2023-02-12 17:53:02 +0000 UTC

加入子查询时查询执行非常慢

  • 5

有一个要求

select
eq.ID, …, c_CALIBRATION_INTERVAL
 from EQUIPMENT eq
 left join LABORATORY l on l.id = eq.EQUIPMENT_LABORATORY_ID
 left join LABORATORY ld on ld.id = eq.LABORATORY_DOC_ID
 left join CERTIFICATE c on c.DEVICE_ID_CL = eq.ID
 and c.DISPLAY = 1 
  left join USERS_DATA u on u.ID = eq.EQUIPMENT_PARENT_USER_ID
  left join USERS_DATA ud on ud.ID = eq.USER_DOC_ID
    where eq.ARCHIVE in (1)
  and (((eq.CONTROL_MIN_DATE < '06.02.2023' and not eq.CONTROL_MIN_DATE is null)  or (eq.CONTROL_MIN_DATE is null and eq.COUNT_CERT <> -1)  or (eq.CONTROL_MIN_DATE is null and eq.COUNT_CERT >= 0)  or (eq.COUNT_CERT_REQUIRE <> eq.COUNT_CERT))
  and ((eq.CONTROL_MIN_DATE < '06.02.2023' and not eq.CONTROL_MIN_DATE is null)  or (eq.CONTROL_MIN_DATE is null and eq.COUNT_CERT <> -1)  or (eq.CONTROL_MIN_DATE is null and eq.COUNT_CERT >= 0)  or (eq.COUNT_CERT_REQUIRE <> eq.COUNT_CERT)))
  and ((c.CONTROL = 1 and eq.PASSPORT = 0) or ((c.CONTROL is null or c.CONTROL=1) and eq.PASSPORT = 1))
  order by eq.EQUIPMENT_PARENT_USER_ID, eq.NAME, eq.TYPE, eq.NUMBER, eq.NEMBER_INVENTORY

, 但它几乎可以正常工作,我不得不用一个子查询来补充它,我把它塞进了VIEW:

CREATE OR ALTER VIEW V_CERTIFICATE_SIGNAL(
    DEVICE_ID_CL,
    CERTIFICATE_ID)
AS
select gr0.DEVICE_ID_CL, (case when gr1.id is null then gr0.id else gr1.id end) as CERTIFICATE_ID
  from (select max(c.ID) as ID, c.DEVICE_ID_CL
          from CERTIFICATE c
            where c.CONTROL = 1
              group by c.DEVICE_ID_CL) gr0
  left join (select c.id, c.DEVICE_ID_CL
               from CERTIFICATE c
                 where c.CONTROL = 1 and c."DISPLAY" = 1) gr1 on gr0.DEVICE_ID_CL = gr1.DEVICE_ID_CL    ;

在此处输入图像描述- CERTIFICATE
表的一部分 分别提出的两个查询都可以快速运行。但是当我将第一个请求与VIEW结合起来时,它开始变慢很多。

select
eq.ID, eq.NAME,  eq.CONTROL_MIN_DATE, eq."TYPE", eq.NUMBER, eq.NEMBER_INVENTORY, eq.PRODUCER, eq.YEAR_BEGIN, eq.NAME_TEST, eq.REMARK, eq.USER_ID,  eq.DEPARTMENT_ID, eq.TIME_EDIT,
 eq.ARCHIVE, eq.SPECIFICATION, eq.DEVICE_DEPARTMENT_ID, eq.TYPE_SERIES, eq.DISLOCATION, eq.TYPE_EQUIP, eq.PASSPORT, eq.WARNING,  eq.EQUIPMENT_LABORATORY_ID, eq.COUNT_CERT_REQUIRE,
 eq.CONTROL_MIN_DOC,  eq.EQUIPMENT_PARENT_USER_ID, eq.COUNT_CERT, l.NAME_SHORT as l_NAME_SHORT_LAB,   eq.LABORATORY_DOC_ID, eq.FIND_TALLY, eq.DISLOCATION_ORG, eq.USER_DOC_ID,
 u.FULL_NAME as u_EQUIPMENT_USER, ld.NAME_SHORT as l_LABORATORY_DOC, ud.FULL_NAME as u_USER_DOC
, (case when c.NUMBER_CERT = '-1' then '' else c.NUMBER_CERT end) as c_NUMBER_CERT,  c.DATE_OPERATION as c_DATE_OPERATION, c.CALIBRATION_INTERVAL as c_CALIBRATION_INTERVAL
 from EQUIPMENT eq
 left join LABORATORY l on l.id = eq.EQUIPMENT_LABORATORY_ID
 left join LABORATORY ld on ld.id = eq.LABORATORY_DOC_ID
 left join V_CERTIFICATE_SIGNAL vcs on vcs.DEVICE_ID_CL = eq.ID   -- "VIEW"
 left join CERTIFICATE c on vcs.CERTIFICATE_ID = c.ID
  left join USERS_DATA u on u.ID = eq.EQUIPMENT_PARENT_USER_ID
  left join USERS_DATA ud on ud.ID = eq.USER_DOC_ID
    where eq.ARCHIVE in (1)
  and (((eq.CONTROL_MIN_DATE < '07.02.2023' and not eq.CONTROL_MIN_DATE is null)  or (eq.CONTROL_MIN_DATE is null and eq.COUNT_CERT <> -1)  or (eq.CONTROL_MIN_DATE is null and eq.COUNT_CERT >= 0)  or (eq.COUNT_CERT_REQUIRE <> eq.COUNT_CERT))
  and ((eq.CONTROL_MIN_DATE < '07.02.2023' and not eq.CONTROL_MIN_DATE is null)  or (eq.CONTROL_MIN_DATE is null and eq.COUNT_CERT <> -1)  or (eq.CONTROL_MIN_DATE is null and eq.COUNT_CERT >= 0)  or (eq.COUNT_CERT_REQUIRE <> eq.COUNT_CERT)))
  and ((c.CONTROL = 1 and eq.PASSPORT = 0) or ((c.CONTROL is null or c.CONTROL=1) and eq.PASSPORT = 1))
  order by eq.EQUIPMENT_PARENT_USER_ID, eq.NAME, eq.TYPE, eq.NUMBER, eq.NEMBER_INVENTORY

大约 30 秒,从可能的
344 条记录中选择 94 条 以常规表格的形式呈现VIEW的结果,并将其替换为VIEW,一切都进行得很快,没有刹车。

使用VIEW可以看到什么以及在哪里挖掘以加速查询?先感谢您。

sql
  • 1 个回答
  • 45 Views
Martin Hope
Konstantin78
Asked: 2023-01-07 20:29:23 +0000 UTC

花式按条件排序(一个查询超过300个条件)

  • 6

表 1(在DataSet1中)有一个完整的查询,其中每一行(并且有超过 300 行)都有一个ID。具有ID的行未按顺序排列(在用户排序后)。
有一个表 2,其中的行链接到表 1(通过ID),即 一对多的关系。
问题:
如何在不对表 1(在DataSet1中)中提取新查询的情况下从表 2(DataSet2 )中进行选择,以便DataSet2中的记录按照ID字段(DataSet1)的顺序排序). (要在 Word 中显示信息,基于两个DataSet中的结果)。
“ order by ”或“ union all ”结构没有帮助,因为 它们最多只计算 255 个参数(结果列),即发生错误。结果我有 300 多行。

当然,您可以不进行排序,但随后我将不得不在DataSet2中执行 300 次循环(以关联来自两个DataSet的行),不知何故我真的不喜欢它......

mysql
  • 1 个回答
  • 40 Views
Martin Hope
Konstantin78
Asked: 2020-11-06 07:45:10 +0000 UTC

在运行应用程序之前使用两个数据库

  • 0

一天中的好时光,论坛用户,
这样的情况:
有一个应用程序(Delphi 10.2)使用数据库(在firebird3上),其中有一个带有密码的用户表(“ user_data ”)。
有一个库管理对应用程序的登录访问,即 在启动应用程序之前,会启动一个库,该库从注册表读取数据库的路径,然后从表中取出密码(“ user_data ”)和 2 个选项启动应用程序(密码正确)或显示一条消息密码不正确。

有一种情况是创建第二个数据库(与第一个数据库在同一目录中),其用户与第一个数据库中的用户相同。我立即想将一张表用于 2 个数据库。
应用程序本身可以使用两个数据库(只有几个TIBDataBase)。但是图书馆不知道如何使用多个数据库。
也许FB3已经有能力在一个数据库中从另一个数据库进行VIEW 。我阅读了FB3上的手册- 我没有找到它。想要从第一个数据库到第二个数据库创建一个VIEW “ user_data ”。

或者也许还有另一种选择?
我只是不想改造图书馆。

firebird
  • 1 个回答
  • 10 Views
Martin Hope
Konstantin78
Asked: 2020-06-04 06:56:55 +0000 UTC

SQL:将查询结果与另一个表结果合并

  • 1

美好的一天,我
有一个要求:

select distinct n.ACCOUNTANCY_ID
from NC n
where n.DEVICE_ID in (
    select d.ID
    from DEVICES d
    where d.PROPOSAL_ID in (
        select distinct(ct.PROPOSAL_ID)
        from CROSS_T ct
        where ct.CONTRACT_ID in (
            select ct.CONTRACT_ID
            from CROSS_T ct
            where ct.PROPOSAL_ID in (
                select ct.PROPOSAL_ID
                from CROSS_T ct
                where ct.CONTRACT_ID = 49
            ) and ct.CONTRACT_ID is not null
        )
    ) and d.IN_ACCOUNTANCY = 2 and d.DEVICES_CL_ID <> -1
)

它返回ACCOUNTANCY表中的行ID列表,但该表可能没有包含所有ID的行(由查询生成)。问题: 如何找出ID不在“ACCOUNTANCY”表中的行数? 感谢你的回答。 PS: 最平庸的解决方案是发出 2 个请求,第一个:请求 - 如上所示,第二个:请求:




select count(distinct a.ACT_NUMBER)
    from ACCOUNTANCY a
      where a.ID in (‘запрос который представлен выше’)

然后做减法......但这似乎不太正确。
例如,可以进行某种“左连接”,但表的结果和查询的结果并不是很“连接”。

sql
  • 1 个回答
  • 10 Views
Martin Hope
Konstantin78
Asked: 2020-04-23 16:54:36 +0000 UTC

触发器错误

  • 0

有触发器

CREATE OR ALTER TRIGGER AU_CONTRACT_EXTRA FOR CONTRACT_EXTRA
ACTIVE AFTER UPDATE POSITION 0
AS
begin
  if (((new.EXECUTE_BEGIN <> old.EXECUTE_BEGIN)
    or (old.EXECUTE_BEGIN is null))
    or ((new.EXECUTE_END <> old.EXECUTE_END)
    or (old.EXECUTE_END is null))) then
    execute procedure SP_PROPOSAL_ADD_TO_CONTRACT(-1, old.CONTRACT_ID, 2);
end

其中,当更新两个字段“ EXECUTE_BEGIN ”和“ EXECUTE_END ”时,调用一个过程,该过程(根据自己的条件)更新此表中的相同 2 个字段,仅在其他行中。当您更新这两个字段中的记录时,该表中的特定记录也会更新。
但是这些行干扰了我 (old.EXECUTE_BEGIN is null)-(old.EXECUTE_END is null)事实是,在更新此表中的其他字段时,还会调用过程“ SP_PROPOSAL_ADD_TO_CONTRACT ”并且错误:

同一请求的并发执行次数过多。

但是如果触发器中没有这两行,如果字段为“null”,则不会调用“SP_PROPOSAL_ADD_TO_CONTRACT”过程

或者编写一个触发器来更新您自己的表的字段是一个坏主意?

如何进行?

sql
  • 1 个回答
  • 10 Views
Martin Hope
Konstantin78
Asked: 2020-04-16 11:29:03 +0000 UTC

根据要求获得所需结果的问题

  • 0

有 2 个表(CROSS_T和PLAN_D)(见图)在此处输入图像描述和合同摘要视图。
我无法从这两个表中获得结果,即:通过字段“ PROPOSAL_ID ”从“ PLAN_D ”中获取“ CROSS_T ”中具有合同编号“ NUMBER_CONTRACT ”的
所有唯一“ CONTRACT_ID ”。 那些。 在“ CROSS_T ”中有不同的“ CONTRACT_ID ”值,它们都通过字段“ PROPOSAL_ID ”进行联合。


"CONTRACT_ID" "NUMBER_CONTRACT"  
    45           123/15-19 
    47           бп1/47-19  
    48           бп1/47-19  
    49           бп1/47-19 
    50           бп1/47-19

2)还有关于合约的总结视图

AS
select
c.ID, ct.CLIENT_ID, cl.NAME_ORGANIZATION_FULL as NAME_ORGANIZATION_FULL, cl.TYPE_NP || cl.CITY as NP,
list(distinct(sw.NAME_SORT_WORK), ', ') as LIST_SORT_WORK,
count(distinct(sw.NAME_SORT_WORK)) as COUNT_SORT_WORK,
list(distinct(dp.NAME_SHORT), ', ') as LIST_DEPARTMENT_EXECUTE,
count(distinct(n.DEPARTMENT_ID_EXECUTE)) as COUNT_DEPARTMENT_EXECUTE,
list(distinct(p.NUMBER_IN), ', ') as LIST_PROPOSAL_NUMBER_IN,
list(distinct(p.ID), ', ') as LIST_PROPOSAL_ID
from CONTRACT c
  join CROSS_T ct on ct.CONTRACT_ID = c.ID
  join CLIENT cl on ct.CLIENT_ID = cl.ID
  left join NC n on n.CONTRACT_ID = c.ID
  left join DEVICES d on n.DEVICE_ID = d.ID
  left join SORT_WORK sw on d.SORT_WORK_ID = sw.ID
  left join DEPARTMENT dp on dp.ID = n.DEPARTMENT_ID_EXECUTE
  left join PROPOSAL p on p.ID = ct.PROPOSAL_ID
group by c.ID, ct.CLIENT_ID, cl.NAME_ORGANIZATION_FULL, cl.TYPE_NP, cl.CITY
;

将第一个问题(2 个字段)的结果连接到此视图(其中“ CONTRACT_ID ”(来自第一个问题)=“ с.ID ”(来自第二个问题))也不错。
PS这个观点也有“加入CROSS_T ”

提前致谢。

sql
  • 1 个回答
  • 10 Views
Martin Hope
Konstantin78
Asked: 2020-03-27 21:43:10 +0000 UTC

无需其他工具即可逐行读取 pdf 中的元数据

  • 0

有一个pdf,有一个元数据字段“ /NC_ID( ”。我可以在记事本中看到它。我想让我把它读成txt,然后搜索“/NC_ID(”

var
  LFileCertificate: TextFile;
  LIndex, L_Length, LInd: integer;
begin
  if OpenDialog1.Execute then
  begin
  AssignFile(LFileCertificate, OpenDialog1.FileName);
  Reset(LFileCertificate);
  while not Eof(LFileCertificate) do
   begin
   Readln(LFileCertificate, S);
    if Pos('/NC_ID(', S) <> 0 then
    begin
      LInd := Pos('/NC_ID(', S);
      showmessage(Copy(S, LInd, 20));
      abort;
    end;
   //ShowMessage(S);
   end;
   ShowMessage('close file');
   CloseFile(LFileCertificate);
  end;
end; 

它不存在,它
找到了这个字段,但条件是我删除了 blocknet 中的一半数据,但这不适合我。
为什么pos不能处理完整的文件。最大长度为“ string =2 GB ”。此设置位于文件末尾。

delphi
  • 1 个回答
  • 10 Views
Martin Hope
Konstantin78
Asked: 2020-02-08 06:09:30 +0000 UTC

ShellExecute 具有不同数量的参数

  • 0

在 Delphi 10.2 中,我使用ShellExecute带有 6 个参数的 API 函数
(http://kbyte.ru/ru/Programming/Guides.aspx?id=193&mode=show)
,但我遇到了相同的ShellExecuteAPI 函数,但有 5 个参数
(https: //autoit-script.ru/autoit3_docs/functions/ShellExecute.htm )

这是一个什么样的功能?两个 API 都像

delphi
  • 1 个回答
  • 10 Views
Martin Hope
Konstantin78
Asked: 2020-12-23 06:45:14 +0000 UTC

TZipFile,可以用密码存档,但是如何用密码解压

  • 0

通过从这里下载“ EncryptedZipFile ”模块,您可以使用密码进行存档。例如,使用密码“ 1 ”:

var
  ef: TEncryptedZipFile;
begin
  try
    ef := TEncryptedZipFile.Create('1');
    try
      ef.Open('d:\test.zip', zmWrite);
      ef.Add('d:\test.bin', 'd:\test.bin', zcDeflate);
    finally
      ef.Free;
    end;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end;

我尝试解压缩:

 var
  ef: TEncryptedZipFile;
begin
  try
    ef := TEncryptedZipFile.Create('1');
    try
      ef.Open('d:\test.zip', zmRead);
      ef.Extract('test.bin', 'd:\test.bin', true);
      ef.Close;
    finally
      ef.Free;
    end;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end;

但在我的线上:

ef.Extract('test.bin', 'd:\', true);

给出错误信息:

Project PrArch.exe raised exception class EZipException with message
'The specified file was not found'.

也许我错过了档案。

delphi
  • 1 个回答
  • 10 Views
Martin Hope
Konstantin78
Asked: 2020-12-12 02:45:27 +0000 UTC

Firebird 看不到 udf

  • 0

我有FireBird 3.0 x64 写了一个简单的dll,扔到c Firebird UDF目录(c:\Program Files\Software development\Firebird_3_0\UDF)

library my;

uses
  SysUtils,
  Classes;

{$R *.res}

function mm: integer; cdecl; export;
begin
  result := 1+1;
end;

exports
  mm;

begin
  isMultiThread:=True;
end.

在 Delphi 上调试 - 它可以
在数据库中声明它:

DECLARE EXTERNAL FUNCTION "mm"
RETURNS INTEGER BY VALUE
ENTRY_POINT 'mm' MODULE_NAME 'my';

在 IBExpert 中(我正在尝试将函数的结果写入该字段):

update SERVICES_TABLE
set field6 = "mm"()
where DESCRIPTION = 'user manual'

错误:

无法格式化消息 13:896 -- 消息系统代码 -4。偏移量 39 处的无效请求 BLR。未定义函数 mm。找不到模块名称或入口点。

已经尝试将 udf 移动到另一个目录,“ firebird.conf ”

UdfAccess = 限制 D:\MyUDF

无济于事
一切都是从第三方 dll 开始的,但错误相同

可能是什么?

通过试用方法:我将此库转移到具有 x86 架构的 PC 上,一切正常。
但是我有一个x64上的数据库
怎么办?

firebird
  • 1 个回答
  • 10 Views
Martin Hope
Konstantin78
Asked: 2020-08-31 18:55:12 +0000 UTC

我遇到了“gds32.dll”、Firebird3 和 Delphi10.2 的问题

  • 0

我的程序(DB)(由Delphi7 编写)在Firebird下工作。在 PC 上还有Delphi10.2(带有它的Client InterBase)。
该程序使用“ IBBackupService1 ”组件,该组件使用“ GetNextLine 方法”。
一段时间以来,此方法一直在抛出错误:

“…… 异常类 EIBInterBaseError 与消息“不可用的数据库未知 ISC 错误 336330835”

我读到这是由于gds32.dll程序错误拾取。没错,我的 PC 上已经有4 个“ gds32.dll ”库,大小不一,见图。在此处输入图像描述

是的,在这台 PC 上,我安装或卸载了FB。(而且我在system32中只有FB的“ gds32.dll ” )

在另一台只有FB和一个“ gds32.dll ”的PC上(我删除了所有额外的“ gds32.dll ”,曾经还有InterBase),没有这样的问题。我现在在Delphi10.2中需要什么来拆除“ Client InterBase ”?

是的,我还为 Delphi7 更新了“IBXDP705.EXE”和“IBXDP708.EXE”——但那是很久以前的事了。

windows
  • 3 个回答
  • 10 Views
Martin Hope
Konstantin78
Asked: 2020-08-05 05:36:11 +0000 UTC

在服务器上托管用户文档

  • 0

FireBird上有一个服务器和客户端。
最好不要共享服务器上的任何文件夹。
我想将文档 (*.rtf) 放在服务器上,以免分发给每个客户端。在客户端应用程序上,我计划制作“打开文档”按钮。

这可以以某种方式完成吗?

当然,您可以将文档上传到数据库(类型 field blob),但您不希望这样做。

база-данных
  • 1 个回答
  • 10 Views
Martin Hope
Konstantin78
Asked: 2020-07-04 23:07:30 +0000 UTC

声明时模块重叠模块的问题

  • 1

有一个组件StringGrid1,它有一个事件

StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect;
State: TGridDrawState);

Vcl.Grids.TGridDrawState中描述了它的“ State ”参数。

我也在程序中使用了EhLib库,它的声明(GridsEh)当然位于Vcl.Grids之后。因此,这个事件当然不能正常工作,它从“ GridsEh ”(GridEh.TGridDrawState)获取数据。

然后我专门写了路径:

过程 TFMain.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: Vcl.Grids.TGridDrawState );

但是上线了

if gdFixed in State then

同样,现在弹出一个错误:

E2008 不兼容类型

我究竟做错了什么?

一般来说, ORIGINAL过程如下所示:

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
    Rect: TRect; State: TGridDrawState);
var
  Format : Word;
  s : string;
begin
  with Sender as TStringGrid do
    if gdFixed in State then
    begin
      if ACol < FHeaders.Count then
        s := FHeaders[ACol];

      Format := DT_LEFT or DT_WORDBREAK;
      OffsetRect(Rect, 2, 2);
      DrawText(Canvas.Handle, s, Length(s), Rect, Format);
    end;

end;
delphi
  • 1 个回答
  • 10 Views
Martin Hope
Konstantin78
Asked: 2020-06-17 21:15:26 +0000 UTC

使用掩码时在 TDBEditEh 中显示丑陋的值

  • 0

我在 Firebird 数据库中有一个表,其字段类型为“NUMERIC (9,1)”。
对我来说,在应用程序中,用户不能在整数部分输入超过两位数,在小数部分输入 1。
为此,我使用“TDBEditEh”组件,因为 它有一个属性“EditMask”,我设置为“99.9;_”

一切都会好的,但是当光标放在“TDBEditEh”窗口时,它看起来不是很好,显示的值,见图。 在此处输入图像描述

你能以某种方式修复它吗?那些。这样“8”就不会向左移动并且看起来不像“8_”。
老实说,我认为属性http://www.ehlib.com/online-help/frames.html?frmname=topic&frmfile=index.html可能会解决这种情况 - 但它没有帮助。

delphi
  • 1 个回答
  • 10 Views
Martin Hope
Konstantin78
Asked: 2020-05-31 21:35:23 +0000 UTC

无法正确拼写“if”块,带有其他形式

  • 1

我在数据库中有很多表,每个表中(它自己的DataSet是连接的)都有相同的字段,例如:' USER_ID '和' DEPARTMENT_ID ',还有一个' ARCHIVE '字段,不是在所有表格中。
在程序中,有几个模块,并不是所有的DataSet都在同一个表单上。每当我在任何DataSet中编辑记录时,我都必须不断填写“ USER_ID ”和“ DEPARTMENT_ID ”、“ ARCHIVE ”。
为此,我在主模块中创建了一个单独的过程,我用任何 DataSet 的每个 Post 调用它:

procedure TFMain.SET_IDENTIFICATOR(ADataSet: TIBDataSet);
begin
  if (ADataSet <> ibdsContractPays)
    or ((FDeviceNC <> nil)
        and (ADataSet <> FDeviceNC.ibdsNC)) then
    ADataSet.FieldByName('ARCHIVE').AsInteger := 1;

  ADataSet.FieldByName('USER_ID').AsInteger := Pu_UserIDEntry;
  ADataSet.FieldByName('DEPARTMENT_ID').AsInteger := Pu_DepartmentID_Entry;
end;

一切都很好,直到其中一个DataSet ( ibdsNC ) 被捕获,它不在主窗体上,而是在辅助FDeviceNC上,并且在没有“ ARCHIVE ”字段的表中。我无法正确编写“ if
” 块。 事实证明,它要么有效,要么无效(当然,对于每个 NOT 操作,它都会写“

未找到字段“存档”。

»

delphi
  • 2 个回答
  • 10 Views
Martin Hope
Konstantin78
Asked: 2020-04-17 02:07:28 +0000 UTC

更新 TIBDataSet 时出现问题

  • 1

大家可能都知道,要更新 IBDataSet 中的数据,只需要重新打开它,即 使“关闭”和“打开”。

  1. 但如果是应用程序/客户端,分散在两台机器上。
    Dataset1(第一台机器)编辑记录 - 一个字段(使用 DBNavigator)。在DataSetAfterPost事件中,它花费IBTransaction.CommitRetaining。之后,数据库本身的记录被更新。

Dataset2(第二台机器)已经打开并且在“ BeforeRefresh ”事件中我做了Close和Open,即

    ADataSet.Close;

    ADataSet.SelectSQL.Clear;
    ADataSet.SelectSQL.Add(ARequire);
    ADataSet.Open;

    ADataSet.FetchAll;

Dataset2中的记录未更新
我忘记了什么?

  1. Delphi10.2,将请求传递给字符串变量ARequire,在调试中我看到(在行尾)“'*select * from CONTRACT where ARCHIVE = 1*'#**$**D#$A” -这个废话被转移到 DataSet 。
    • 虽然,这 5 行,我一直在使用,请求从来没有任何问题
    • 好吧,像往常一样,他们在这里写,在 IBDataBase.Connected 假和真之后 - 一切都很好
база-данных
  • 1 个回答
  • 10 Views
Martin Hope
Konstantin78
Asked: 2020-03-25 05:08:52 +0000 UTC

库中组件的问题(也许)

  • 1

有几个表格的图书馆。
在其中一种形式(FAuthentication)上,“ IBDatabase2 ”位于(这是一个新组件,即没有任何东西连接到它,等等。只配置了“用户名”“密码”和“字符集”)在调用其中一个之后库函数

function BACKUP_DB(AFBackupCreate: boolean;
                   var APathDB: string): string; export; stdcall; far;
var
  LNameDB: string;
begin
  if AFBackupCreate then
  begin
    FAuthentication := TFAuthentication.Create(nil);
  FAuthentication.IBDatabase2.DatabaseName := APathDB;
  FAuthentication.IBDatabase2.Connected := true;  <-- ошибка

  end;

if AFBackupCreate then
  begin
    FreeAndNil(FAuthentication);
  end;

并关闭导致内存中 dll 错误的应用程序

异常类 $C0000005 与消息“访问冲突在 0x04eda150:读取地址 0x0563e844

'。

它来自行“ FAuthentication.IBDatabase2.Connected := true”

我不知道错误可能出在哪里......
PS
- 虽然在调用同一库的其他函数时,它们工作正常
- - 向 dll 添加了一个新表单并将 IBDatabase2 扔在上面 - 效果是一样的

delphi
  • 1 个回答
  • 10 Views
Martin Hope
Konstantin78
Asked: 2020-02-12 02:56:13 +0000 UTC

Delphi 10.2 - 设计时的经典风格?

  • 4

在查看
了 Delphi XE 10.2 中 Classic Program Style 和 ProgressBar color change not working after project transition from Delphi 6 to Delphi 10.2的答案后,出现了以下问题:

  1. 是否可以在 Delphi 10.2 中做“经典风格”(Delphi 7 风格),仍然在表单的设计阶段,而不是在“exe”运行时(例如,让 Label.Color 在更改后立即更改颜色它在对象检查器中)。
  2. 尽可能地将Delphi 10.2界面带入Delphi 7风格(“爬过”所有设置(“工具->选项”)),我无法摆脱“表单设计器”窗口(表单位于位于),即 删除“表单设计器”窗口,但保留表单,当然。如果,当然,你可以。

PS
好吧,我找到了第一个问题的答案(更准确地说,他们建议这样做):您需要“透明”属性,例如“标签”,设置为“假”。
有趣的是,现在事实证明,在所有旧项目(来自 Delphi 7)中,我需要跑来跑去设置“透明”(“标签”)=“假”,以便所有组件在设计期间都有特定的颜色?

delphi
  • 1 个回答
  • 10 Views
Martin Hope
Konstantin78
Asked: 2020-12-21 08:09:03 +0000 UTC

系统分隔符“点”导致无法理解的结果

  • 2

一天中的美好时光,我
将 Windows 10 中的系统DecimalSeparator从更改,为.

我检查了下一个选项,我有点不明白:为什么它会发出falseif q=0.01?

在此处输入图像描述

为了正确解决这个例子,我必须编写以下函数,例如:

function TFMain.RETURN_VALUE(ANumber: double):double;
begin
  Result := ANumber;
end;

procedure TFMain.Button1Click(Sender: TObject);
var
  q: double;
begin
  q := 0.02 - 0.01;
  if q = RETURN_VALUE(0.01) then
    showmessage('=')
  else showmessage('><')  ;
end;

这会产生正确的结果(系统分隔符左“逗号”)。

可以更容易吗?

delphi
  • 1 个回答
  • 10 Views
Martin Hope
Konstantin78
Asked: 2020-12-18 09:21:59 +0000 UTC

将鼠标悬停在标签上(而不是单击)时,TChart 会显示提示

  • 2

有一个 TChart及其自己的方法/事件,当鼠标单击标签时显示提示(标签附近)

procedure TForm.Series1Click(Sender: TChartSeries; ValueIndex: Integer;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  Chart1.ShowHint := true;
  Chart1.Hint := DateToStr(Series1.XValue[ValueIndex]);
end;

事件

过程 TFDigram.Series1MouseLeave(Sender: TObject); 开始
Chart1.ShowHint := false;
结尾;

当光标不在图表上的某个点上时,防止工具提示退出。

我需要通过在标签上按下鼠标按钮而不是通过将鼠标光标移动到标签来显示工具提示

我试过了

procedure TForm. Chart1MouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);
  var
  Button: TMouseButton;
begin
  Series1.OnClick(nil, 1, Button, Shift, x, y); - не подходит
end;

但它不适合,因为 到 OnClick 事件,您需要传递标签/索引号

我应该怎么办?

delphi
  • 1 个回答
  • 10 Views

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5