小编Vik*_*sov的帖子

使用firedac添加/更改sql元数据

有没有办法使用delphi firedac工具的TFDMetaInfoQuery向sql数据库添加或更改约束(如主键,外键,索引等),或者我唯一能做的就是提取这些信息?

类似于:TFDMetaInfoQuery.AddConstraint或TFDMetaInfoQuery.AddPrimaryKey或TFDMetaInfoQuery.AddIndex - 你明白了.

delphi metadata firedac

5
推荐指数
1
解决办法
704
查看次数

如何等待多个线程在delphi中终止?

我有一个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)

delphi multithreading

5
推荐指数
1
解决办法
3377
查看次数

我是否需要一个关键部分来获取字符串列表中值的索引?

我有一个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)

delphi multithreading critical-section

5
推荐指数
1
解决办法
313
查看次数

无法从delphi中的TIdHTTP连接到TIdHTTPServer

我有一个应用程序使用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)

delphi indy httpserver

3
推荐指数
1
解决办法
1750
查看次数

无法通过SSL将IdPop3连接到IdPop3Server

我有一个附加到它的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)

delphi email ssl pop3 indy

3
推荐指数
1
解决办法
1313
查看次数

生成列表 - 几何级数

我想使用带有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参数谓词(在列表长度变成某个数字后停止生成更多数字)?

list prolog

3
推荐指数
2
解决办法
307
查看次数

POP3断开连接无法正常工作

我在delphi(indy)中遇到POP3 Client问题.连接到POP3Server后,我只能使用一些功能 - 我第一次输入:

POP3Client.Connect

(用户名,密码等..)一切都很好.但是第二次我收到消息'已经连接'而且没有像checkmessages,retrieveHeader,检索工作.如果我尝试

POP3Client.Disconnect

它给了我一个错误'连接正常关闭'.谁能帮我这个 ?

delphi pop3 indy

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

Delphi SetLength用于Integer数组

我想编写一个附加到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)

任何人都可以帮我修复手术吗?

delphi

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

无法绑定套接字。地址和端口已在使用中-使用TIdSMTPServer和TIdPop3Server

我可能已经在网上阅读了许多答案和主题,但是为了解决此错误,我仍然缺少一些内容。我有一个TIdPop3Server和一个TIdSMTPServer,我想激活它们,但是我做不到。我已经将ReuseSocket两者的属性都设置为,rsTrueBindings当我尝试将它们都设置为时我并没有留空。.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)

如果有人已经解决了这个问题,他可以告诉我他是如何做到的(希望我没有在其他地方读过他的答案...)

delphi pop3 smtp indy

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

在delphi中异步追加到.txt文件

我正在尝试运行邮件服务器,我想跟踪登录、连接等事件。我想将此数据保存在日志 .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)

delphi asynchronous text-files

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

有没有办法在没有循环的delphi中将字节添加到TIdBytes变量的开头?

我有一个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 bytearray

0
推荐指数
2
解决办法
861
查看次数