msd
Members-
Content Count
79 -
Joined
-
Last visited
Community Reputation
5 NeutralAbout msd
- Birthday May 18
Technical Information
-
Delphi-Version
Delphi 12 Athens
Recent Profile Visitors
The recent visitors block is disabled and is not being shown to other users.
-
With UniqueString(CmdLine); + removing PChar, everything is working fine, but without a service call...
-
// FileName - full path to executable // Params - command line parameters or use empty string // Folder - working folder for called program - if empty path will be extracted from FileName // WaitUntilTerminated - if true function will wait for process to finish execution // WaitUntilIdle - if true function will call WaitForInputIdle function and wait until the specified process has finished processing its initial input and until there is no user input pending // RunMinimized - if true process will be run minimized // ErrorCode - if function fails this will contain encountered Windows Error Code function ExecuteProcess(const FileName, Params: string; Folder: string; WaitUntilTerminated, WaitUntilIdle, RunMinimized: boolean; var ErrorCode: integer): boolean; var CmdLine: string; WorkingDirP: PChar; StartupInfo: TStartupInfo; ProcessInfo: TProcessInformation; begin Result := true; CmdLine := '"' + FileName + '" ' + Params; if Folder = '' then Folder := ExcludeTrailingPathDelimiter(ExtractFilePath(FileName)); ZeroMemory(@StartupInfo, SizeOf(StartupInfo)); StartupInfo.cb := SizeOf(StartupInfo); if RunMinimized then begin StartupInfo.dwFlags := STARTF_USESHOWWINDOW; StartupInfo.wShowWindow := SW_SHOWMINIMIZED; end; if Folder <> '' then WorkingDirP := PChar(Folder) else WorkingDirP := nil; if not CreateProcess(nil, PChar(CmdLine), nil, nil, false, 0, nil, WorkingDirP, StartupInfo, ProcessInfo) then begin Result := false; ErrorCode := GetLastError; exit; end; with ProcessInfo do begin CloseHandle(hThread); if WaitUntilIdle then WaitForInputIdle(hProcess, INFINITE); if WaitUntilTerminated then repeat Application.ProcessMessages; until MsgWaitForMultipleObjects(1, hProcess, false, INFINITE, QS_ALLINPUT) <> WAIT_OBJECT_0 + 1; CloseHandle(hProcess); end; end; FileName := Server.libPath + 'gbak.exe'; WorkingFolder := Server.libPath; Parameters := PChar(' -b -par 9 -se ' + PChar(Server.dbHost + ':gds_db') + ' -user SYSDBA -pass masterkey ' + PChar(db.fdbPath + db.fdbFile) + ' stdout > ' + PChar(db.fbkFile)); OK := ExecuteProcess(FileName, Parameters, WorkingFolder, true, true, true, Error);
-
Hello, I have client tools on the server and client side, and the backup command is working fine when I call it from Windows cmd. When I call the over function from the Delphi app, I just get cmd blink, and there are no backup files or any kind of errors. Command is working fine from cmd but fails from Delphi.
-
This code is OK; I made some modifications, but I have one small problem. When I call a command from Windows cmd everything is working fine, but over this function there are no executions; just blink the app, and nothing happens. What can be wrong? P.S. I chanced working folder to Firebird execution and run as administrator but nothing over the app; over Windows cmd works fine with the same command.
-
I give a sample with FireDAC; it is not mandatory to be with FireDAC. I have UniDAC, FibPlus, and UIB, all full-source x32/x64. If there is some experience about this subject, it will be nice 🙂
-
Hello, This is nice advice, but I need to solve it over my Delphi app, so I need to make some class that will make backups from the remote server to the local machine, zip it, and copy it to the FTP backup location.
-
Hello. I found a few Firebird/Interbase managers have the option to backup databases from a remote server (for example, a Linux server) locally in some directory. When I set all properties to FireDAC Firebid Backup Component, everything is working fine. If I choose a remote instance, I don't have any errors, but there is no locally backup file. Do I miss something? Thanks for the assistance in advance...
-
Hello, I have custom managed type for example: TvatIndividual = record DocumentNumber: string; TurnoverDate: TDate; PaymentDate: TDate; DocumentType: string; Year: integer; TurnoverDescription: string; TurnoverAmount: Currency; end; I need to iterate over this record type and access its fields. For example, if I have 7 items, how can I retrieve the field names and their types using a loop in Delphi? Thanks in advance!
-
It is much clear now how Delphi works with complex XML files... Thanks to all of you :-)
-
I know for XML mapper, but, as I told you before, there is no full XML every time; one time XML has all UBL 2.1 nodes, one time only nessersty nodes. Does XML Mapper recognize this situation?
-
Hello I have one XML situation, but I'm new in this world (parsing complex XML in Delphi). The XML file is a UBL 2.1 model invoice, and it has more nodes with child nodes, and child nodes have new child nodes, and so on. Do I need to make an infinite loop of reading and inspect every node for chield? My intention is to not lock structure; there are nodes that are not mandatory, so I just want to parse XML and use that data that is in the converted XML file. I'll attach sample XML to this message. Thanks to all of you in advance for any help... sample_invoice.xml
-
Hello, Google Gemini (please don't even give it a try). ChatGPT 3.5: Correct Translation ChatGPT 4.0: Pro Translation Thanks to all the advice.
-
Hi there, The most recent libraries I have for certain APIs are three C libraries; however, Delphi libraries are not offered. To work with apps, all libraries require DDL files; therefore, I need someone with expertise in Delphi to convert those libraries to native Delphi Pascal files. Many thanks in advance to all the specialists... CelikApi.h eVehicleRegistrationAPI.h eVehicleRegistrationCOM.h
-
Hello developers, I have one function which is working fine until Delphi 12 but now I get Integer Overflow Exception procedure CalculateErrorCorrection(dest: integer); var A: TInt; ALength, e, k, t1, t2, t3, LastE: Int64; begin if (errorLevel < 0) or (errorLevel > 8) then errorLevel := 0; A := TInt(ERROR_LEVEL[errorLevel]); Alength := 2 shl errorLevel; for k := 0 to Alength - 1 do codewords[dest + k] := 0; lastE := Alength - 1; for k := 0 to lenCodewords - 1 do begin t1 := codewords[k] + codewords[dest]; for e := 0 to LastE do begin t2 := (t1 * A[lastE - e]) mod _MOD; t3 := _MOD - t2; if e = LastE then codewords[dest + e] := t3 mod _MOD else codewords[dest + e] := ((codewords[dest + e + 1]) + t3) mod _MOD; end; end; for k := 0 to Alength - 1 do codewords[dest + k] := (_MOD - codewords[dest + k]) mod _MOD; end; it fail at line: t2 := (t1 * A[lastE - e]) mod _MOD; every params were integer I change to Int64 but same error is there. Thanks for the any help in advance...
-
Hello, I have a lot of problems with different FormatSetting and Delphi apps; most of them are using dot on numeric keyboards and at the dot at the end of datetime, and I have small problems with the thousand separator. Does Delphi support some kind of isolated Format Settings where I can set my custom Date, Time, DateTime, Decima, Thusand separator, and so. on? In this scenario, the user can set isolated settings for the app, no matter how Windows works, and the user can use, for example, the pain problem. (dot) on a numeric keyboard. Now that I have dbEdit connected to FloatField and the user input is 123.45, it converts to 12345.00. Another problem is 123,345.67. I get invalid floatpoint values. Thanks for any advice and information in advance.