0

背景 :

用 Delphi-7 或 -6 编写的应用程序(通过 .exe 文件进行搜索)。称为Sigmanest。

我已经搬到了新服务器,剩下的是在 SQL 服务器下运行的 SigmaNest 数据库。经过数小时的故障排除将该数据库迁移到新服务器。问题已经涵盖了这个 SQL Server 应用程序的所有方面。默认情况下服务未启动,向导无法正常工作,缺少全文内容,可笑的许多地方都需要右键单击等等。丢失的东西还在继续。

目前,我在新硬件上有一个带有数据库 SNDBase (sigmanest) 的工作 SQL 服务器,但无法从客户端连接。

不,这不可能是正确的,我想并搜索了替代方案。在 MySQL 工作台中单击 4-5 次,然后我在测试 linux 盒子上运行它...很好..

但现在问题来了。

SigmaNest 使用ini文件进行配置。

所以在一个ini文件中我发现

; 1 = Paradox, 2 = MSSQLServer or MSDE
ADOConnectionString=Provider=SQLOLEDB.1;Data Source=ODIN\SIGMANEST;User ID=sigmanest;Password="";Persist Security Info=True;Initial Catalog=SNDBase;

Okej .. 在客户端上安装了 Mysql odbc 驱动程序并建立了连接。到目前为止所有工作..

转到谷歌,找到了 mysql 的 ADOConnectionsstring ......

ADOConnectionString=DRIVER={MySQL ODBC 5.2a Driver};SERVER=192.168.100.19;PORT=3306;DATABASE=SNDBase;UID=sigmanest;PASSWORD=;OPTION=4;

但应用程序不会启动。只需返回 sigmanest 的 db 连接配置工具即可。

已将此发布到 SigmaTek,但我给出的唯一回复是通过 SQLOLEDB 为 MS sql 服务器提供 ADOConnection 字符串的邮件。

搜索了驱动器并没有找到 anny dbex*.dll 文件,这意味着它们不使用 dbExpress 组件(我的猜测)。

那么是否有一些丢失的 dll 文件没有随应用程序提供。或者这种东西是在程序内部硬编码的吗?

有人知道如何进行吗?

或者我应该放弃 mysql 的梦想,去浪费空间的 sql server 后端。

尼尔斯

PS。SigmaNest.exe 的时间戳为 2006-05-19 DS。

4

2 回答 2

0

对不起,但我不知道去哪里解决这个问题。可以这么说,stackoverflow 似乎已经把世界上所有有才华的人都聚集在了一个屋檐下。

Ken White:是的,你是对的,我不能在这个应用程序上使用 MySQL(经过数小时的谷歌搜索和测试)。

无论如何,我设法建立了这样的连接(也许某些东西对其他人有用,其中一些与 Delphi 相关)

  • 首先你必须下载 mysql 连接器 http://dev.mysql.com/downloads/connector/odbc/

  • 从“用户 DSN”选项卡下的控制面板-> 管理工具-> 数据源 (ODBC) 建立 ODBC 连接

  • 您使用记事本创建一个新的文本文件。

  • 使用扩展名 .udl 重命名文件

  • 双击它并填写对话框...

  • 在记事本中打开文件,您就有了 adoconnection 字符串。

但是你的问题还没有结束.. SQL 与 MySQL 的差异将使您的应用程序停止.. 例如,MySQL 中的布尔值被声明为 tinyint (0=false 1=true)

这里提到了一种解决方法 http://www.i-logic.com/utilities/MySQL.htm

所以我的斗争没有得到任何回报,但上面的一些可能会引起其他人的兴趣。

每尼尔斯..

于 2013-01-24T09:05:56.480 回答
0

可以在运行时配置 ODBC,下面是配置 ODBC 以使用 BDE 连接到 SQL Server 的示例。

unit uBDEConnectionSqlServer;

interface

uses
    DBTables, Windows, Classes, SysUtils;

type TBDEConnectionSqlServer = class(TComponent)
  private
    { Private declarations }
    function CreateOBDCConnection(dataBase : string; server: string):Boolean;


  public
    { Public declarations }
    Function CreateBDEConnection(dataBase: TDatabase; dataBaseName : string; server:string; userName:string; password:string): Boolean;

  end;
  
  const
      ODBC_ADD_DSN = 1; // Add data source
      ODBC_CONFIG_DSN = 2; // Configure (edit) data source
      ODBC_REMOVE_DSN = 3; // Remove data source
      ODBC_ADD_SYS_DSN = 4; // add a system DSN
      ODBC_CONFIG_SYS_DSN = 5; // Configure a system DSN
      ODBC_REMOVE_SYS_DSN = 6; // remove a system DSN
      ODBC_REMOVE_DEFAULT_DSN = 7; // remove the default DSN
      
  function SQLConfigDataSource(
        hwndParent: HWND;
        fRequest: WORD;
        lpszDriver: LPCSTR;
        lpszAttributes: LPCSTR): BOOL; stdcall; external 'ODBCCP32.DLL';

implementation

Function TBDEConnectionSqlServer.CreateBDEConnection(dataBase: TDatabase; dataBaseName : string; server:string; userName:string; password:string): Boolean;
var
  retorno: TDatabase;
Begin
  result := false;

  if (CreateOBDCConnection(dataBaseName, server) = true) then
  begin
    dataBase.AliasName := 'testedelphi';
    dataBase.LoginPrompt := False;
    dataBase.DatabaseName := 'testedelphi';
    dataBase.Params.Values['DATABASE NAME']       := dataBaseName;
    dataBase.Params.Values['USER NAME']           := userName;
    dataBase.Params.Values['ODBC DSN']            := dataBaseName;
    dataBase.Params.Values['OPEN MODE']           := 'READ/WRITE';
    dataBase.Params.Values['BATCH COUNT']         := '200';
    dataBase.Params.Values['LANGDRIVER']          := '';
    dataBase.Params.Values['MAX ROWS']            := '-1';
    dataBase.Params.Values['SCHEMA CACHE DIR']    := '';
    dataBase.Params.Values['SCHEMA CACHE SIZE']   := '8';
    dataBase.Params.Values['SCHEMA CACHE TIME']   := '-1';
    dataBase.Params.Values['SQLPASSTHRU MODE']    := 'SHARED AUTOCOMMIT';
    dataBase.Params.Values['SQLQRYMODE']          := '';
    dataBase.Params.Values['ENABLE SCHEMA CACHE'] := 'FALSE';
    dataBase.Params.Values['ENABLE BCD']          := 'FALSE';
    dataBase.Params.Values['ROWSET SIZE']         := '20';
    dataBase.Params.Values['BLOBS TO CACHE']      := '64';
    dataBase.Params.Values['BLOB SIZE']           := '32';
    dataBase.Params.Values['PASSWORD']            := password;
    result := true;
  end;
  
end;

function TBDEConnectionSqlServer.CreateOBDCConnection(dataBase : string; server: string):Boolean;
var
  resultado: BOOL;
begin
  Result := False;
  resultado := SQLConfigDataSource(
  0,
  ODBC_ADD_DSN,
  'SQL Server',
  PChar(
    'DSN='+dataBase+#0 +
    'SERVER='+server+#0 +
    'ADDRESS='+server+#0 +
    'NETWORK=dbmssocn'#0 +
    'DATABASE='+dataBase+#0 +
    'DESCRIPTION='+server+dataBase+#0 +
    #0
  )
  );

  if(StrToInt(BoolToStr(resultado)) <> 0) then
    Result := True;
end;

end.
于 2021-12-29T01:42:43.897 回答