gpt4 book ai didi

mysql - 如何避免对每个查询重复使用 mysql_real_connect()?

转载 作者:行者123 更新时间:2023-11-29 03:12:19 26 4
gpt4 key购买 nike

我正在通过在 Lazarus/Freepascal 中制作的连接器查询我的数据库。它使用 libmysql来自 MySQL 5.0 .据我所知,我可以调用的函数与 MYSQL C Connector 的函数相同.

数据库不支持远程访问;它是一个可通过管道访问的数据库,我正在尝试使用仅内存表(无 MyISAMInnoDB)针对本地读取进行优化。速度是主要焦点。

客户端应用程序使用称为 MQL4(用于金融市场)的受限脚本语言编写,并使用我的库重复查询数据库并返回结果以供分析。

问题是:每次发送新查询时,我都被迫销毁并重新创建与数据库的连接。

如果我不破坏并重新创建连接,我将获得读取访问冲突,因为我的连接器库丢失了 *MYSQL 的值由 mysql_real_connect() 分配.

我会通过我的客户端应用程序传递这个值,但不幸的是,它是用一种只能处理 LongInt 的语言编写的, Double , 和 String数据类型。

我试图通过我的客户端应用程序将值传递给 LongInt , 然后把它扔回去 *MYSQL在我的图书馆,但那没有用。

老实说,我不明白为什么我的图书馆失去了 *MYSQL 的值(value).

这是我的库代码:

{$CALLING STDCALL}

library D1Query;

{$mode objfpc}{$H+}

uses
cmem, Windows, SysUtils, mysql50;

var
sock: PMYSQL;
qmysql: st_mysql;

type
VArray = array[0..100] of Double;
PArray = ^VArray;

procedure InitSQL; stdcall;
begin
sock := mysql_real_connect(PMysql(@qmysql), '.', 'root', 'password'
, 'data', 3306, 'mysql', CLIENT_MULTI_STATEMENTS);
if sock = nil then begin
OutputDebugString(PChar(' Couldn''t connect to MySQL.'));
OutputDebugString(PChar(mysql_error(@qmysql)));
halt(1);
end;
end;

procedure DeInitSQL; stdcall;
begin
mysql_close(sock);
end;

function SQL_Query(QRY: PChar; output: PArray): integer; stdcall;
var
rowbuf: MYSQL_ROW;
recbuf: PMYSQL_RES;
i: integer;
nfields: LongWord;
begin
if (mysql_query(sock, QRY) < 0) then begin
OutputDebugString(PChar(' Query failed '));
OutputDebugString(PChar(' ' + mysql_error(sock)));
end;

recbuf := mysql_store_result(sock);
nfields := mysql_num_fields(recbuf);
rowbuf := mysql_fetch_row(recbuf);

if (rowbuf <> nil) then begin
for i:=0 to nfields-1 do
output^[i] := StrToFloatDef(rowbuf[i], -666);
end;

mysql_free_result(recbuf);
Result := i;
end;

exports
SQL_Query, InitSQL, DeInitSQL;

begin
end.

最佳答案

迈克,我建议使用 ZEOS 6.6.6 连接到 MySQL。

这样你就不必在低级代码中乱搞,但你可以只使用标准的 ZEOS 控件:TZConnection TZQuery 等。

这是 Lazarus 中 ZEOS 的 Howto:http://wiki.lazarus.freepascal.org/Zeos_tutorial
你可以下载 ZEOS 包
这里:http://sourceforge.net/projects/zeoslib/files/Zeos%20Database%20Objects/zeosdbo-6.6.6-stable/ZEOSDBO-6.6.6-stable.zip/download
下载 zip 文件并安装 lazarus 的软件包。

可以在这里找到帮助文件:http://sourceforge.net/projects/zeoslib/files/Zeos%20Database%20Objects/zeosdbo-6.6.6-stable/

祝你好运。

关于mysql - 如何避免对每个查询重复使用 mysql_real_connect()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6158617/

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