gpt4 book ai didi

dbxmys30.dll 中的 Delphi 2007 DBX 访问冲突

转载 作者:行者123 更新时间:2023-12-02 20:17:39 27 4
gpt4 key购买 nike

我尝试使用 Delphi 2007 中的 dbexpress 组件连接到 MySQL 数据库,但收到错误消息“模块 'dbxmys30.dll' 中的地址 0B86E258 处发生访问冲突。读取地址 00000000”。

我有一个使用 MySQL 驱动程序和设置来连接到 MySQL 5.1 数据库的 TSQLConnection。我可以毫无问题地将其设置为事件状态。

当我尝试使用任意数量的组件从数据库获取数据时,就会出现问题。更具体地说,我有一个 TSQLTable 对象。我将 SQLConnection 参数设置为我创建的 TSQLConnection,并将表名称设置为数据库中的表。当我尝试将 Active 设置为 true 时,出现错误。这发生在设计模式和运行时。尝试从数据库获取数据的任何其他 dbx 组件也会发生这种情况。

我正在运行 Windows 7 64 位以及 MySQL 5.1 客户端和服务器。我可以使用 MySQL 查询浏览器在数据库上运行查询,没有任何问题。

任何帮助将不胜感激。谢谢!

最佳答案

您存在版本不兼容问题,您使用的“libmysql.dll”版本与构建 dbx 驱动程序所针对的版本不兼容。 This thread embarcadero 论坛建议使用版本“5.0.27”和 this thread建议“5.0.24”。我成功的最新版本是“5.1.11”。

顺便说一句,因为“libmysql.dll”不包含版本信息,我厌倦了跟踪哪个 dll 是哪个版本,我不得不写这个小东西:

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormPaint(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
FLastFile: string;
procedure WMDropFiles(var Msg: TWMDropFiles); message WM_DROPFILES;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

uses
shellapi;

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
DragAcceptFiles(Handle, True);
Width := 350;
Height := 110;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
DragAcceptFiles(Handle, False);
end;

procedure TForm1.FormPaint(Sender: TObject);
var
R: TRect;
begin
Canvas.TextOut(40, 16, 'Drop libmysql.dll to find out version');
R := Rect(14, 40, ClientWidth, ClientHeight);
DrawText(Canvas.Handle, PChar(FLastFile), Length(FLastFile), R, DT_LEFT);
end;

function GetVersion(ClientDll: PChar): UINT;
const
FUNC = 'mysql_get_client_version';
FUNCTIONNOTFOUND = '%s: ''%s'' in ''%s''.';
UNABLETOLOADLIB = 'Unable to load library (''%s''): ''%s''.';
var
LibHandle: HMODULE;
GetClientVersionFunc: function: Integer;
begin
Result := 0;
LibHandle := LoadLibrary(ClientDll);
if LibHandle <> 0 then begin
try
@GetClientVersionFunc := GetProcAddress(LibHandle, FUNC);
if @GetClientVersionFunc <> nil then begin
Result := GetClientVersionFunc;
end else
raise EOSError.CreateFmt(FUNCTIONNOTFOUND,
[SysErrorMessage(GetLastError), FUNC, ClientDll]);
finally
FreeLibrary(LibHandle);
end;
end else
raise EOSError.CreateFmt(UNABLETOLOADLIB, [ClientDll,
SysErrorMessage(GetLastError)]);
end;

procedure TForm1.WMDropFiles(var Msg: TWMDropFiles);
var
len: Integer;
DropName: string;
Ver: UINT;
begin
len := DragQueryFile(Msg.Drop, 0, nil, 0) + 1;
SetLength(DropName, len);
len := DragQueryFile(Msg.Drop, 0, PChar(DropName), len);
SetLength(DropName, len);
try
try
Ver := GetVersion(PChar(DropName));
except
FLastFile := '';
raise;
end;
if Boolean(Ver) then
FLastFile := DropName + #10 +'[' + IntToStr(Ver) + '] - ' +
IntToStr(Ver div 10000) + '.' + IntToStr((Ver div 100) mod 100)
+ '.' + IntToStr(Ver mod 100)
else
FLastFile := '';
finally
Invalidate;
DragFinish(Msg.Drop);
Msg.Result := 0;
end;
end;

关于dbxmys30.dll 中的 Delphi 2007 DBX 访问冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4494333/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com