使用德尔福
怎么才能查出psql脚本已经返回了
password authentication has failed for user "myadmin"
运行以下脚本(psqlRun.bat)时
"C:\Program Files\PostgreSQL\9.0\bin\psql.exe" -h localhost -p 5433 -d TestDB -U myadmin -f someSQLscript.sql
上面的脚本是使用 shellexecute 运行的
ReturnedValue:= ShellExecute(Handle,'open',PChar('C:\psqlRun.bat'), nil, nil, SW_SHOWNORMAL);
返回值超过 32 ( so it ran successfully ) 但对我来说密码验证失败了.. 如果密码失败,有什么方法可以通过delphi查找脚本是否失败? 由于 pgpass.conf 可能尚未创建,因此我无法检查文件中的用户密码。 用户可能不知道密码或输入了错误的密码。
那么如何以编程方式检查身份验证是否失败?
注意:Postgresql 9.0
最佳答案
the returned value was over 32 (so it ran successfully)
不,这不是这个意思。 http://msdn.microsoft.com/en-us/library/windows/desktop/bb762153.aspx 这仅意味着它已成功启动。完整运行是否成功,MSDN 提示无法知道使用 ShellExecute/ShellExecuteEx 的情况。
您应该使用 CreateProcess 来获取正在运行的任务句柄,然后使用 WaitFor 来获取结果或拦截其输出以查找特定行。
您可以尝试 Jedi Code Library,其中 JclSysUtils 单元具有 Execute 函数和 TJclCommandLineTool 类来封装它。 使用示例是 JCL 安装程序,它调用许多命令行实用程序(例如 DCC32.EXE),捕获并保存其输出以记录并检查返回代码。
PS。而且你最好不要使用bat 文件。制作命令行并直接运行。现在你已经把它变成一棵树了。 YourProg.exe
\\-> CMD.EXE /C BAT-FILE-NAME
\\->pgSQL exe with options
即使 pgSQL.exe 返回某些内容,它也不会返回到您的程序,而是返回到 CMD.exe
之后 CMD.exe 将该代码公开到其内部变量 %ERRORLEVEL%
现在您必须了解它是否可以将该变量传递给您的程序外部。
为什么呢?每一个下一个间接级别都会使您的程序更加孤立和脆弱。直接调用PG EXE即可,无需脚本。否则你也应该为 CMD.EXE 编程 - 你真的需要它吗?
关于delphi - 查找 psql 命令验证用户是否失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12363628/