[Info-vax] Pascal & MySQL
Arne Vajhøj
arne at vajhoej.dk
Mon May 6 21:39:13 EDT 2019
On 12/21/2018 2:27 PM, Arne Vajhøj wrote:
> I have started creating a Pascal wrapper for MySQL C API.
>
> Just a simple conversion of data types from C'ish to
> Pascal'ish.
I added some additional convenience routines.
Before:
procedure test_getone(con : mysql_ptr; f1 : integer);
var
stmt : mysql_stmt_ptr;
stat : integer;
inparam : array[1..1] of mysql_bind;
outparam : array[1..1] of mysql_bind;
f2 : longpstr(255);
begin
stmt := pmysql_stmt_init(con);
checkstmt(stmt, con);
stat := pmysql_stmt_prepare(stmt, 'SELECT f2 FROM t1 WHERE f1 = ?');
checkstat(stat, stmt);
pmysql_init_bind_long(inparam[1], f1);
stat := pmysql_stmt_bind_param(stmt, inparam);
checkstat(stat, stmt);
stat := pmysql_stmt_execute(stmt);
checkstat(stat, stmt);
pmysql_init_bind_string_out(outparam[1], f2);
stat := pmysql_stmt_bind_result(stmt, outparam);
checkstat(stat, stmt);
stat := pmysql_stmt_store_result(stmt);
checkstat(stat, stmt);
if pmysql_stmt_fetch(stmt) = 0 then begin
writeln(stdstr(f2));
end;
pmysql_stmt_free_result(stmt);
end;
procedure test_getall(con : mysql_ptr);
var
stmt : mysql_stmt_ptr;
stat : integer;
outparam : array[1..2] of mysql_bind;
f1 : integer;
f2 : longpstr(255);
begin
stmt := pmysql_stmt_init(con);
checkstmt(stmt, con);
stat := pmysql_stmt_prepare(stmt, 'SELECT f1,f2 FROM t1');
checkstat(stat, stmt);
stat := pmysql_stmt_execute(stmt);
checkstat(stat, stmt);
pmysql_init_bind_long(outparam[1], f1);
pmysql_init_bind_string_out(outparam[2], f2);
stat := pmysql_stmt_bind_result(stmt, outparam);
checkstat(stat, stmt);
stat := pmysql_stmt_store_result(stmt);
checkstat(stat, stmt);
while pmysql_stmt_fetch(stmt) = 0 do begin
writeln(f1, ' ', stdstr(f2));
end;
pmysql_stmt_free_result(stmt);
end;
after:
procedure test_getone(con : mysql_ptr; f1 : integer);
var
stmt : mysql_stmt_ptr;
f2 : longpstr(255);
begin
stmt := pmysql_prepare(con, 'SELECT f2 FROM t1 WHERE f1 = ?',
long_arg(f1));
checkstmt(stmt, con);
if pmysql_get_result_single_string(stmt, f2) then begin
writeln(stdstr(f2));
end;
pmysql_stmt_free_result(stmt);
end;
procedure test_getall(con : mysql_ptr);
var
stmt : mysql_stmt_ptr;
stat : integer;
f1 : integer;
f2 : longpstr(255);
begin
stmt := pmysql_prepare(con, 'SELECT f1,f2 FROM t1');
checkstmt(stmt, con);
stat := pmysql_get_result_start(stmt, long_arg(f1), longstring_arg(f2));
checkstat(stat, stmt);
while pmysql_stmt_fetch(stmt) = 0 do begin
writeln(f1, ' ', stdstr(f2));
end;
pmysql_stmt_free_result(stmt);
end;
A lot nicer I think.
Source at:
http://www.vajhoej.dk/arne/opensource/vms/vmspmysql-src-v0_2.zip
Arne
More information about the Info-vax
mailing list