我有一个用简单的verion创建的ole对象
obj := CreateOleObject('foo.bar');
obj.OnResult := DoOnResult;
procedure TMyDM.DoOnResult(Res: olevariant);
Run Code Online (Sandbox Code Playgroud)
这一切都有效,res变量有一个函数String [] GetAns() 我就是这样调用的
var
ans: array of string;
begin
ans := Res.GetAns;
end;
Run Code Online (Sandbox Code Playgroud)
它再次有效..除非有时没有返回数组,然后抛出异常.
作为一个临时的解决方案我把它包裹在一个空的尝试,除了块,我知道是坏的.我已经尝试过 VarIsArray(Res.GetAns), 但如果结果为null,它仍然无法工作
检查正确结果的正确方法是什么?
ps我无法控制ole对象
我需要帮助理解为什么我的SQL不起作用.或者,如果我需要以不同的方式编写它以获得我需要的结果.正如标题所示,我使用的是Delphi 7,ADO组件和MS Access 2000数据库.您可以在此处查看第I部分中的表结构:
帮助Delphi 7,ADO和MS Access SQL语句
我目前用来获取基于关键字的所有知识的SQL如下:
select*from(知识K
内连接knowledge_keywords KKW on KKW.knowledgeid = K.id)
内连接关键字KW on KW.id = KKW.keywordid
where(KW.keyword ='job')AND(KW.keyword ='task' )
然而,当知识id中具有相同知识id的那两个单词中显然存在这两个单词时,这不会返回并产生结果.
但是,如果我使用OR而不是AND执行相同的SQL,我会得到我预期的两条记录
select*from(知识K
内连接knowledge_keywords KKW on KKW.knowledgeid = K.id)
内连接关键字KW on KW.id = KKW.keywordid
where(KW.keyword ='job')AND(KW.keyword ='task' )
谢谢你的帮助
如果我使用Oracle的SQL Developer运行以下SQL.
select payee_id, to_char(check_date,'d') as DOW,
(cmcl_bank_cleared - check_date) as DateDiff from AP_Master
where (cmcl_bank_cleared is not null) AND ((cmcl_bank_cleared - check_date) >=1)
order by payee_address_zip, DOW, DateDiff
Run Code Online (Sandbox Code Playgroud)
它工作正常,但是当我尝试使用Delphi时
SQL.Add('select payee_id, to_char(check_date, ' + QuotedStr('d') + ') as DOW, ');
SQL.Add('(cmcl_bank_cleared - check_date) as DateDiff from AP_Master ');
SQL.Add('where (cmcl_bank_cleared is not null) AND ((cmcl_bank_cleared - check_date) >=:DaysParam))');
SQL.Add('order by payee_id, DOW, DateDiff;');
Run Code Online (Sandbox Code Playgroud)
我收到"ORA-00933:SQL命令也未正确结束"错误消息
我正在尝试为Interbase编写一个SQL语句.
这个SQL怎么了?
md_master(trm)=主表cd_Med(cdt)=详细信息表
SELECT trm.seq_no, trm.recipient_id, trm.payee_fullname, trm.payee_address1, trm.payee_address2, trm.payee_address3, trm.payee_address_city, trm.payee_address_state, trm.recip_zip, trm.recip_zip_4, trm.recip_zip_4_2, trm.check_no, trm.check_date, trm.check_amount,
cdt.com_ss_source_sys, cdt.cd_pay_date, cdt.com_set_amount,
bnk.name, bnk.address, bnk.transit_routing,
act.acct_no
FROM md_master trm, cd_med cdt, accounts act, banks bnk
join cd_med on cdt.master_id = trm.id
join accounts on act.acct_id = trm.account_tag
join banks on bnk.bank_id = act.bank_id
ORDER BY cdt.master_id
Run Code Online (Sandbox Code Playgroud)
我没有收到错误,计算机只是不停地嘎吱嘎吱地挂起来.
我有一对自定义的客户端/服务器套接字(TJDServerSocket和TJDClientSocket),它们将TServerSocket和TClientSocket包装在ScktComp单元中.我没有任何问题要解决,但想知道一些事情.我想在客户端添加一项功能,以自动搜索网络中任何服务器套接字实例(特别是我的服务器组件).
我对任何建议持开放态度,但必须具体使用Delphi 7中的ScktComp单元.
我必须在Delphi 7中实现一个决策矩阵.该函数是
CalcNewStatus(actionCode:string; reportType:string; currentStatus:string):string;
例如,在C#中我会使用字典.我怎么能在Delphi 7中做到这一点?
我对编程很陌生,这还不够糟糕; 本周我做了更多的谷歌搜索,而不是谷歌的发现.
Delphi v7
我已经想出如何在我的richedit控件中创建项目符号.我无法找到的是当用户创建它们时如何缩进它们.
有任何想法吗?
我的程序运行时创建的对象有问题
首先我创建n个对象(假设n:= 3)
for i:=0 to n-1 do
begin
With TGauge.Create(Form1) do
begin
Parent := Form1; // this is important
Left := 20; // X coordinate
Top := 20+i*45; // Y coordinate
Width := 250;
Height := 20;
Kind := gkHorizontalBar;
Name := 'MyGauge'+IntToStr(i);
//....
Visible := True;
end;
end;
Run Code Online (Sandbox Code Playgroud)
这三个对象在表单中创建并可见.现在我想改变它的'属性,但每当我尝试访问这些创建的对象时,我只会得到它
EAccessViolation
Run Code Online (Sandbox Code Playgroud)
例如,当我尝试获取一个对象的名称时
g := Form1.FindComponent('MyGauge0') as TGauge;
Form1.Label1.Caption:=g.Name;
Run Code Online (Sandbox Code Playgroud) 我做了:
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
DataTable.qOrders.Next;
end;
Run Code Online (Sandbox Code Playgroud)
它的工作原理,但问题是当我点击按钮到达最后一条记录时,按钮没有被禁用,就像在a TDBNavigator.
我是如何进行TSpeedButton禁用并自动启用的TDBNavigator?
我搜索了很多,但我找不到正确的答案.
目录:
Project(此文件夹包含delphi代码和名为"RunThis"的文件夹
RunThis
Run.bat代码
start %cd%\RandomApp.exe
pause
Run Code Online (Sandbox Code Playgroud)
Delphi 7(单击按钮执行此代码.)
ShellExecute (application.handle, 'open', 'cmd', PChar('cmd.exe /c RunThis\Run.bat'), nil, SW_MAXIMIZE
Run Code Online (Sandbox Code Playgroud)
如果我没有为目录添加'cmd.exe/c'部分,Delphi将打开一个没有任何代码的cmd.类似于是否必须运行cmd.exe.但是,如果我添加'cmd.exe/c',则它会正确打开Run.bat.
Windows给我这个错误:Windows无法找到'C:\ Project\RunThis\RandomApp.exe'.请确保您正确键入名称,然后再试一次.
有趣的是,如果我只是双击Run.bat,它就会完美无缺.但是,当我通过Delphi打开它时,它给了我这个错误.我想也许Run.bat当前地址有问题.所以不要说:
start RandomApp.exe
Run Code Online (Sandbox Code Playgroud)
我使用了完整的当前目录:
start %cd%\RandomApp.exe
Run Code Online (Sandbox Code Playgroud)
只是补充一下,当我让Delphi 7直接打开程序时,例如:
ShellExecute(Handle, 'open', PChar('RunThis\RandomApp.exe'),null, null, SW_SHOWNORMAL) ;
Run Code Online (Sandbox Code Playgroud)
该程序给了我一个错误,它无法找到"Config.txt".RandomApp.exe使用存储其所有设置的文本文件.
同样,如果我只是单击Run.bat或RandomApp.exe,它们都会完美执行.问题是当我尝试用代码打开它时.我觉得它与目录有关,但我不太清楚.
非常感谢你.
PS:运行Windows 10.
delphi ×10
delphi-7 ×10
sql ×2
ado ×1
algorithm ×1
arrays ×1
batch-file ×1
cmd ×1
components ×1
delphi-2010 ×1
delphi-xe2 ×1
dictionary ×1
interbase ×1
ms-access ×1
networking ×1
ole ×1
ora-00933 ×1
oracle ×1
reference ×1
runtime ×1
sockets ×1
variant ×1
windows ×1
winsock ×1