Skip to content
Permalink
Browse files

Give the user a hint to download VC redistributable if PostgreSQL dll…

… fails to assign a procedure. See https://www.heidisql.com/forum.php?t=18580#p34297
  • Loading branch information...
ansgarbecker committed Jul 28, 2019
1 parent 5baada0 commit 7fd551bd72ed917dffe351609e5c4c45daeefb77
Showing with 20 additions and 4 deletions.
  1. +17 −3 source/dbconnection.pas
  2. +3 −1 source/dbstructures.pas
@@ -2231,13 +2231,27 @@ procedure TMySQLConnection.DoBeforeConnect;

procedure TPgConnection.DoBeforeConnect;
var
LibraryPath: String;
LibraryPath,
msg: String;
begin
// Init lib before actually connecting.
LibraryPath := ExtractFilePath(ParamStr(0)) + Parameters.LibraryFile;
Log(lcDebug, f_('Loading library file %s ...', [LibraryPath]));
FLib := TPostgreSQLLib.Create(LibraryPath);
Log(lcDebug, FLib.DllFile + ' v' + IntToStr(FLib.PQlibVersion) + ' loaded.');
try
FLib := TPostgreSQLLib.Create(LibraryPath);
Log(lcDebug, FLib.DllFile + ' v' + IntToStr(FLib.PQlibVersion) + ' loaded.');
except
on E:EDbError do begin
msg := E.Message;
if E.ErrorCode = TDbLib.LIB_PROC_ERROR then begin
msg := msg + sLineBreak + sLineBreak +
f_('Installing VC redistributable might help: %s',
['https://support.microsoft.com/en-us/help/3179560/update-for-visual-c-2013-and-visual-c-redistributable-package']
);
end;
raise EDbError.Create(msg, E.ErrorCode);
end;
end;
inherited;
end;

@@ -326,6 +326,8 @@ EDbError = class(Exception)

// DLL loading
TDbLib = class(TObject)
const
LIB_PROC_ERROR: Cardinal = 1000;
private
FDllFile: String;
FHandle: HMODULE;
@@ -7716,7 +7718,7 @@ procedure TDbLib.AssignProc(var Proc: FARPROC; Name: PAnsiChar; Mandantory: Bool
);
if Windows.GetLastError <> 0 then
msg := msg + CRLF + CRLF + f_('Internal error %d: %s', [Windows.GetLastError, SysErrorMessage(Windows.GetLastError)]);
Raise EDbError.Create(msg);
Raise EDbError.Create(msg, LIB_PROC_ERROR);
end;
end;
end;

0 comments on commit 7fd551b

Please sign in to comment.
You can’t perform that action at this time.