有没有办法使用delphi firedac工具的TFDMetaInfoQuery向sql数据库添加或更改约束(如主键,外键,索引等),或者我唯一能做的就是提取这些信息?
类似于:TFDMetaInfoQuery.AddConstraint或TFDMetaInfoQuery.AddPrimaryKey或TFDMetaInfoQuery.AddIndex - 你明白了.
我有一个50个线程的应用程序做某事我希望我的程序(btnTestClick)等待所有线程终止.我已经尝试使用全局变量作为计数器,WaitForMultipleObjects(threadCount, @threadArr, True, INFINITE);但是程序永远不会等待所有线程终止.这就是我的线程的样子:
TClientThread = class(TThread)
protected
procedure Execute; override;
public
constructor create(isSuspended : Boolean = False);
end;
Run Code Online (Sandbox Code Playgroud)
这里是构造函数和执行过程:
constructor TClientThread.create(isSuspended : Boolean);
begin
inherited Create(isSuspended);
FreeOnTerminate := True;
end;
procedure TClientThread.Execute;
var
begin
inherited;
criticalSection.Enter;
try
Inc(globalThreadCounter);
finally
criticalSection.Leave;
end;
end;
Run Code Online (Sandbox Code Playgroud)
我的OnButtonClick是这样的:
procedure TMainForm.btnTestClick(Sender: TObject);
var
clientThreads : array of TClientThread;
i, clientThreadsNum : Integer;
begin
clientThreadsNum := 50;
SetLength(clientThreads, clientThreadsNum);
for i := 0 to Length(clientThreads) - 1 do begin // …Run Code Online (Sandbox Code Playgroud) 我有一个myStringList大约100个值的字符串列表,我正在对它进行异步访问.我想知道它是否是线程安全的:
currentIndex := myStringList.IndexOf(wantedValue);
Run Code Online (Sandbox Code Playgroud)
或者我总是这样做:
criticalS.Enter;
try
currentIndex := myStringList.IndexOf(wantedValue);
finally
criticalS.Leave;
end;
Run Code Online (Sandbox Code Playgroud) 我有一个应用程序使用TIdHTTPServer,并TIdHTTP在Delphi和我有这样的代码:
// This is for activating the HTTPServer - works as expected
HTTPServer1.Bindings.Add.IP := '127.0.0.1';
HTTPServer1.Bindings.Add.Port := 50001;
HTTPServer1.Active := True;
Run Code Online (Sandbox Code Playgroud)
这是OnCommandGet我的HTTPServer 的过程:
procedure TDataForm.HttpServer1CommandGet(AContext: TIdContext;
ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
begin
AResponseInfo.ContentText := 'Hello, user';
end;
Run Code Online (Sandbox Code Playgroud)
我只是不知道为什么这个程序不起作用:
procedure TDataForm.btnHTTPSendGetClick(Sender: TObject);
var
HTTPClient : TIdHTTP;
responseStream : TMemoryStream;
begin
HTTPClient := TIdHTTP.Create;
responseStream := TMemoryStream.Create;
try
try
HTTPClient.Get('http://127.0.0.1:50001', responseStream);
except on e : Exception do begin
showmessage('Could not send get request to localhost, port 50001'); …Run Code Online (Sandbox Code Playgroud) 我有一个附加到它的TIdPop3Server应用程序IdServerIOHandlerSSLOpenSSL1并检索电子邮件并将它们发送到TIdPop3另一个应用程序中的客户端(已TIdSSLIOHandlerSocketOpenSSL连接到它).当使用端口110使连接不安全时,一切都很好.但是当我尝试SSL通过端口995 使用连接时Connection Closed Gracefully,在客户端的连接尝试失败后,我收到错误.这是我的Pop3SeverOnConnect活动:
procedure TMainForm.Pop3ServerConnect(AContext: TIdContext);
begin
if (AContext.Connection.IOHandler is TIdSSLIOHandlerSocketBase) then
TIdSSLIOHandlerSocketBase(AContext.Connection.IOHandler).PassThrough :=
(AContext.Binding.Port <> 995);
showmessage('SSL connection made!');
end;
Run Code Online (Sandbox Code Playgroud)
这是客户端:
procedure TMainForm.btnCheckMailBoxClick(Sender: TObject);
begin
IdSSLIOHandlerSocketOpenSSL1.PassThrough := False;
POP3Client.IOHandler := IdSSLIOHandlerSocketOpenSSL1;
with POP3Client do begin
AuthType := patUserPass;
Host := myHost;
UserName := myUserName;
Password := myPass;
Port := myPort;
end;
try
POP3Client.Connect;
Except on e : Exception do
showmessage('error=' + e.Message);
end;
// …Run Code Online (Sandbox Code Playgroud) 我想使用带有4个参数的谓词生成几何级数列表 - 生成进展的列表,此列表的长度,开始元素和进度的乘数.到目前为止我所做的只是一个3参数谓词来生成几何级数而不停止:
gengeom([X],X,_).
gengeom([H|Tail],H,Q):-X is H*Q,gengeom(Tail,X,Q).
Run Code Online (Sandbox Code Playgroud)
此查询为我提供了start元素1和乘数2的所有进度:
?-gengeom(L,1,2),write(L),nl,fail.
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮我写一个我真正想要的4参数谓词(在列表长度变成某个数字后停止生成更多数字)?
我在delphi(indy)中遇到POP3 Client问题.连接到POP3Server后,我只能使用一些功能 - 我第一次输入:
POP3Client.Connect
(用户名,密码等..)一切都很好.但是第二次我收到消息'已经连接'而且没有像checkmessages,retrieveHeader,检索工作.如果我尝试
POP3Client.Disconnect
它给了我一个错误'连接正常关闭'.谁能帮我这个 ?
我想编写一个附加到Integer数组的过程,但Delphi IDE给出了编译时错误'Incompatyble types'.这是我的代码:
procedure appendToIntegerArray(var intArr : array of Integer; valueToAppend : Integer);
var
counter : Integer;
begin
counter := Length(intArr);
SetLength(intArr, counter + 1); // This is where it gives me the compile-time error
intArr[counter] := valueToAppend;
end;
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮我修复手术吗?
我可能已经在网上阅读了许多答案和主题,但是为了解决此错误,我仍然缺少一些内容。我有一个TIdPop3Server和一个TIdSMTPServer,我想激活它们,但是我做不到。我已经将ReuseSocket两者的属性都设置为,rsTrue而Bindings当我尝试将它们都设置为时我并没有留空。.Active := True;这就是我的代码的样子:
with POP3Server do begin
ReuseSocket := rsTrue;
Active := False;
Bindings.Clear;
DefaultPort := 110;
Bindings.Add.IP := myIpAddr;
end;
with SMTPServer do begin
ReuseSocket := rsTrue;
Active := False;
Bindings.Clear;
DefaultPort := 25;
Bindings.Add.IP := myIpAddr;
end;
Run Code Online (Sandbox Code Playgroud)
我有一个TButton单击的地方:
SMTPServer.Active := True;
Pop3Server.Acive := True;
Run Code Online (Sandbox Code Playgroud)
如果有人已经解决了这个问题,他可以告诉我他是如何做到的(希望我没有在其他地方读过他的答案...)
我正在尝试运行邮件服务器,我想跟踪登录、连接等事件。我想将此数据保存在日志 .txt 文件中。但由于它必须异步完成,我不知道如何锁定当前数据附加的文件,然后释放它以供下次使用。所以基本上我正在寻求一个名为的程序的帮助asyncAppendToFile(fileName : String; textToAppend : String)
procedure SMTPServerUserLogin(ASender: TIdSMTPServerContext;
const AUsername, APassword: String; var VAuthenticated: Boolean);
begin
asyncAppendToFile(myFile, 'User ' + AUserName + ' attempts a login');
end;
Run Code Online (Sandbox Code Playgroud) 我有一个TIdBytes变量myBytesArray,我想在它的开头添加一个字节.我尝试了一个循环(虽然我肯定更喜欢非循环解决方案),但它仍然无效:
myBytesArray : TIdBytes;
// ...
len := Length(myBytesArray);
SetLength(myBytesArray, len + 1);
for i := len downto 1 do begin
myBytesArray[i] := myBytesArray[i-1];
end;
myBytesArray[0] := myNewByte;
Run Code Online (Sandbox Code Playgroud) delphi ×10
indy ×4
pop3 ×3
asynchronous ×1
bytearray ×1
email ×1
firedac ×1
httpserver ×1
list ×1
metadata ×1
prolog ×1
smtp ×1
ssl ×1
text-files ×1