Delphi连接MySql(待测试验证)

要在一个Delphi程序中调用Mysql数据库,查到有个资料如下,待验证,验证后会给出结果。暂时做个标记

 

用libmySQL.dll(来自于Mysql安装后的文件)
和MySql.pas

以下是mysql.pas


// -----------------------------------------------------------------------------------------------//// MySQL Client API for Borland Delphi (version 4 and above)//// Pascal Interface Unit for libmySQL.dll, the// Client Library for MySQL AB‘s SQL Database Server//// This is a literal translation of relevant parts of MySQL AB‘s// C header files, mysql.h, mysql_com.h, and mysql_version.h//// Copyright (c) 1999-2002 Matthias Fichtner// (see license.txt for licensing information)//// -----------------------------------------------------------------------------------------------// See mysql.h for MySQL AB‘s copyright and GPL notice// -----------------------------------------------------------------------------------------------//// 17-Aug-1999 mf Translated mysql.h MySQL 3.22.24// 19-Aug-1999 mf Corrected some type definitions MySQL 3.22.24// 20-Aug-1999 mf Finished debugging the unit MySQL 3.22.24// 18-Sep-1999 mf Code maintenance for release 3.22.26a MySQL 3.22.26a// 22-Oct-1999 mf Code maintenance for release 3.22.28 MySQL 3.22.28// 02-Jan-2000 mf Code maintenance for release 3.22.29 MySQL 3.22.29// 21-Jan-2000 mf Code maintenance for release 3.22.30 MySQL 3.22.30// 07-Feb-2000 mf Code maintenance for release 3.22.31 MySQL 3.22.31// 16-Feb-2000 mf Code maintenance for release 3.22.32 MySQL 3.22.32// 13-Aug-2000 mf Code maintenance for release 3.22.34 MySQL 3.22.34// 14-Aug-2000 mf Reworked entire unit for first 3.23 release MySQL 3.23.19-beta// 14-Aug-2000 mf Added mysql_character_set_name() MySQL 3.23.22-beta// 11-Sep-2000 mf Added IS_NUM_FIELD and INTERNAL_NUM_FIELD MySQL 3.23.24-beta// 08-Oct-2000 mf Modified TMEM_ROOT, enum_server_command, MySQL 3.23.25-beta// and INTERNAL_NUM_FIELD// 01-Nov-2000 mf Code maintenance for release 3.23.27 MySQL 3.23.27-beta// 25-Nov-2000 mf Code maintenance for release 3.23.28 MySQL 3.23.28-gamma// 05-Jan-2001 mf Code maintenance for release 3.23.30 MySQL 3.23.30-gamma// 19-Jan-2001 mf Code maintenance for release 3.23.31 MySQL 3.23.31// 11-Mar-2001 mf Added functions mysql_real_send_query(), MySQL 3.23.33// mysql_send_query(), and mysql_reap_query()// 28-Mai-2001 mf Modified mysql_send_query(), removed MySQL 3.23.38// mysql_real_send_query(), mysql_reap_query(),// added mysql_read_query_result(), and fixed// CLIENT_TRANSACTIONS// 07-Aug-2001 mf Code maintenance for release 3.23.40 MySQL 3.23.40// 23-Sep-2001 mf Code maintenance for release 3.23.42 MySQL 3.23.42// 29-Jan-2002 mf Added libmysql_load(), libmysql_free(), MySQL 3.23.47// libmysql_status and LIBMYSQL_ constants// for dynamic loading of libmySQL.dll// 11-Mar-2002 mf Added MYSQL_OPT_LOCAL_INFILE to mysql_option MySQL 3.23.49//// -----------------------------------------------------------------------------------------------//// Latest releases of mysql.pas are made available through the// distribution site at: http://www.fichtner.net/delphi/mysql///// Please send questions, bug reports, and suggestions regarding// mysql.pas to Matthias Fichtner <mfichtner@fichtner-meyer.com>//// See readme.txt for an introduction and documentation.// See license.txt for licensing information and disclaimer.//// -----------------------------------------------------------------------------------------------// This unit is provided "as is". Use it at your own risk.// -----------------------------------------------------------------------------------------------unit mysql;// -----------------------------------------------------------------------------------------------INTERFACE// -----------------------------------------------------------------------------------------------uses Windows, // Needed for some type definitions Winsock; // Needed for some type definitions// ----------------// From mysql.h ...// ----------------type my_bool = byte; gptr = pChar;type PUSED_MEM = ^TUSED_MEM; // struct for once_alloc TUSED_MEM = record next: PUSED_MEM; // Next block in use left: longword; // memory left in block size: longword; // size of block end;type error_proc = procedure;type PMEM_ROOT = ^TMEM_ROOT; TMEM_ROOT = record free: PUSED_MEM; used: PUSED_MEM; pre_alloc: PUSED_MEM; min_malloc: longword; block_size: longword; error_handler: error_proc; end;type my_socket = TSocket;// --------------------// From mysql_com.h ...// --------------------const NAME_LEN = 64; // Field/table name length HOSTNAME_LENGTH = 60; USERNAME_LENGTH = 16; SERVER_VERSION_LENGTH = 60; LOCAL_HOST = localhost; LOCAL_HOST_NAMEDPIPE = .; MYSQL_NAMEDPIPE = MySQL; MYSQL_SERVICENAME = MySql;type enum_server_command = ( COM_SLEEP, COM_QUIT, COM_INIT_DB, COM_QUERY, COM_FIELD_LIST, COM_CREATE_DB, COM_DROP_DB, COM_REFRESH, COM_SHUTDOWN, COM_STATISTICS, COM_PROCESS_INFO, COM_CONNECT, COM_PROCESS_KILL, COM_DEBUG, COM_PING, COM_TIME, COM_DELAYED_INSERT, COM_CHANGE_USER, COM_BINLOG_DUMP, COM_TABLE_DUMP, COM_CONNECT_OUT );const NOT_NULL_FLAG = 1; // Field can‘t be NULL PRI_KEY_FLAG = 2; // Field is part of a primary key UNIQUE_KEY_FLAG = 4; // Field is part of a unique key MULTIPLE_KEY_FLAG = 8; // Field is part of a key BLOB_FLAG = 16; // Field is a blob UNSIGNED_FLAG = 32; // Field is unsigned ZEROFILL_FLAG = 64; // Field is zerofill BINARY_FLAG = 128; // The following are only sent to new clients ENUM_FLAG = 256; // field is an enum AUTO_INCREMENT_FLAG = 512; // field is a autoincrement field TIMESTAMP_FLAG = 1024; // Field is a timestamp SET_FLAG = 2048; // field is a set NUM_FLAG = 32768; // Field is num (for clients) PART_KEY_FLAG = 16384; // Intern; Part of some key GROUP_FLAG = 32768; // Intern: Group field UNIQUE_FLAG = 65536; // Intern: Used by sql_yacc REFRESH_GRANT = 1; // Refresh grant tables REFRESH_LOG = 2; // Start on new log file REFRESH_TABLES = 4; // close all tables REFRESH_HOSTS = 8; // Flush host cache REFRESH_STATUS = 16; // Flush status variables REFRESH_THREADS = 32; // Flush status variables REFRESH_SLAVE = 64; // Reset master info and restart slave // thread REFRESH_MASTER = 128; // Remove all bin logs in the index // and truncate the index // The following can‘t be set with mysql_refresh() REFRESH_READ_LOCK = 16384; // Lock tables for read REFRESH_FAST = 32768; // Intern flag CLIENT_LONG_PASSWORD = 1; // new more secure passwords CLIENT_FOUND_ROWS = 2; // Found instead of affected rows CLIENT_LONG_FLAG = 4; // Get all column flags CLIENT_CONNECT_WITH_DB = 8; // One can specify db on connect CLIENT_NO_SCHEMA = 16; // Don‘t allow database.table.column CLIENT_COMPRESS = 32; // Can use compression protcol CLIENT_ODBC = 64; // Odbc client CLIENT_LOCAL_FILES = 128; // Can use LOAD DATA LOCAL CLIENT_IGNORE_SPACE = 256; // Ignore spaces before ‘(‘ CLIENT_INTERACTIVE = 1024; // This is an interactive client CLIENT_SSL = 2048; // Switch to SSL after handshake CLIENT_IGNORE_SIGPIPE = 4096; // IGNORE sigpipes CLIENT_TRANSACTIONS = 8192; // Client knows about transactions SERVER_STATUS_IN_TRANS = 1; // Transaction has started SERVER_STATUS_AUTOCOMMIT = 2; // Server in auto_commit mode MYSQL_ERRMSG_SIZE = 200; NET_READ_TIMEOUT = 30; // Timeout on read NET_WRITE_TIMEOUT = 60; // Timeout on write NET_WAIT_TIMEOUT = 8*60*60; // Wait for new querytype PVio = ^TVio; TVio = record end;type PNET = ^TNET; TNET = record vio: PVio; fd: my_socket; fcntl: longint; buff, buff_end, write_pos, read_pos: pByte; last_error: array [0..MYSQL_ERRMSG_SIZE - 1] of char; last_errno, max_packet, timeout, pkt_nr: longword; error: byte; return_errno, compress: my_bool; no_send_ok: my_bool; // needed if we are doing several // queries in one command ( as in LOAD TABLE ... FROM MASTER ), // and do not want to confuse the client with OK at the wrong time remain_in_buf, length, buf_length, where_b: longword; return_status: pLongword; reading_or_writing: byte; save_char: char; end;const packet_error: longword = $ffffffff;const FIELD_TYPE_DECIMAL = 0; FIELD_TYPE_TINY = 1; FIELD_TYPE_SHORT = 2; FIELD_TYPE_LONG = 3; FIELD_TYPE_FLOAT = 4; FIELD_TYPE_DOUBLE = 5; FIELD_TYPE_NULL = 6; FIELD_TYPE_TIMESTAMP = 7; FIELD_TYPE_LONGLONG = 8; FIELD_TYPE_INT24 = 9; FIELD_TYPE_DATE = 10; FIELD_TYPE_TIME = 11; FIELD_TYPE_DATETIME = 12; FIELD_TYPE_YEAR = 13; FIELD_TYPE_NEWDATE = 14; FIELD_TYPE_ENUM = 247; FIELD_TYPE_SET = 248; FIELD_TYPE_TINY_BLOB = 249; FIELD_TYPE_MEDIUM_BLOB = 250; FIELD_TYPE_LONG_BLOB = 251; FIELD_TYPE_BLOB = 252; FIELD_TYPE_VAR_STRING = 253; FIELD_TYPE_STRING = 254;const FIELD_TYPE_CHAR = FIELD_TYPE_TINY; // For compability FIELD_TYPE_INTERVAL = FIELD_TYPE_ENUM; // For compabilitytype enum_field_types = FIELD_TYPE_DECIMAL..FIELD_TYPE_STRING;// ------------------------// From mysql_version.h ...// ------------------------const PROTOCOL_VERSION = 10; MYSQL_SERVER_VERSION = 3.23.49; MYSQL_SERVER_SUFFIX = ‘‘; FRM_VER = 6; MYSQL_VERSION_ID = 32349; MYSQL_PORT = 3306; MYSQL_UNIX_ADDR = /tmp/mysql.sock;// ----------------// From mysql.h ...// ----------------function IS_PRI_KEY(n: longword): boolean;function IS_NOT_NULL(n: longword): boolean;function IS_BLOB(n: longword): boolean;function IS_NUM(t: longword): boolean;type PMYSQL_FIELD = ^TMYSQL_FIELD; TMYSQL_FIELD = record name: pChar; // Name of column table: pChar; // Table of column if column was a field def: pChar; // Default value (set by mysql_list_fields) _type: enum_field_types; // Type of field. Se mysql_com.h for types length: longword; // Width of column max_length: longword; // Max width of selected set flags: longword; // Div flags decimals: longword; // Number of decimals in field end;function IS_NUM_FIELD(f: PMYSQL_FIELD): boolean;function INTERNAL_NUM_FIELD(f: PMYSQL_FIELD): boolean;type PMYSQL_ROW = ^TMYSQL_ROW; // return data as array of strings TMYSQL_ROW = array[0..MaxInt div SizeOf(pChar) - 1] of pChar;type MYSQL_FIELD_OFFSET = longword; // offset to current fieldtype my_ulonglong = int64;const MYSQL_COUNT_ERROR: my_ulonglong = not 0;type PMYSQL_ROWS = ^TMYSQL_ROWS; TMYSQL_ROWS = record next: PMYSQL_ROWS; // list of rows data: PMYSQL_ROW; end;type MYSQL_ROW_OFFSET = PMYSQL_ROWS; // offset to current rowtype PMYSQL_DATA = ^TMYSQL_DATA; TMYSQL_DATA = record rows: my_ulonglong; fields: longword; data: PMYSQL_ROWS; alloc: TMEM_ROOT; end;type PMYSQL_OPTIONS = ^TMYSQL_OPTIONS; TMYSQL_OPTIONS = record connect_timeout, client_flag: longword; compress, named_pipe: my_bool; port: longword; host, init_command, user, password, unix_socket, db: pChar; my_cnf_file, my_cnf_group, charset_dir, charset_name: pChar; use_ssl: my_bool; // if to use SSL or not ssl_key: pChar; // PEM key file ssl_cert: pChar; // PEM cert file ssl_ca: pChar; // PEM CA file ssl_capath: pChar; // PEM directory of CA-s? end;type mysql_option = ( MYSQL_OPT_CONNECT_TIMEOUT, MYSQL_OPT_COMPRESS, MYSQL_OPT_NAMED_PIPE, MYSQL_INIT_COMMAND, MYSQL_READ_DEFAULT_FILE, MYSQL_READ_DEFAULT_GROUP, MYSQL_SET_CHARSET_DIR, MYSQL_SET_CHARSET_NAME, MYSQL_OPT_LOCAL_INFILE );type mysql_status = ( MYSQL_STATUS_READY, MYSQL_STATUS_GET_RESULT, MYSQL_STATUS_USE_RESULT );type PMYSQL_FIELDS = ^TMYSQL_FIELDS; TMYSQL_FIELDS = array[0..MaxInt div SizeOf(TMYSQL_FIELD) - 1] of TMYSQL_FIELD;type PCHARSET_INFO = ^TCHARSET_INFO; TCHARSET_INFO = record // Omitted: Structure not necessarily needed. // Definition of struct charset_info_st can be // found in include/m_ctype.h end;type PMYSQL = ^TMYSQL; TMYSQL = record net: TNET; // Communication parameters connector_fd: gptr; // ConnectorFd for SSL host, user, passwd, unix_socket, server_version, host_info, info, db: pChar; port, client_flag, server_capabilities: longword; protocol_version: longword; field_count: longword; server_status: longword; thread_id: longword; // Id for connection in server affected_rows: my_ulonglong; insert_id: my_ulonglong; // id if insert on table with NEXTNR extra_info: my_ulonglong; // Used by mysqlshow packet_length: longword; status: mysql_status; fields: PMYSQL_FIELDS; field_alloc: TMEM_ROOT; free_me: my_bool; // If free in mysql_close reconnect: my_bool; // set to 1 if automatic reconnect options: TMYSQL_OPTIONS; scramble_buff: array [0..8] of char; charset: PCHARSET_INFO; server_language: longword; end;type PMYSQL_RES = ^TMYSQL_RES; TMYSQL_RES = record row_count: my_ulonglong; field_count, current_field: longword; fields: PMYSQL_FIELDS; data: PMYSQL_DATA; data_cursor: PMYSQL_ROWS; field_alloc: TMEM_ROOT; row: PMYSQL_ROW; // If unbuffered read current_row: PMYSQL_ROW; // buffer to current row lengths: pLongword; // column lengths of current row handle: PMYSQL; // for unbuffered reads eof: my_bool; // Used my mysql_fetch_row end;// Functions to get information from the MYSQL and MYSQL_RES structures// Should definitely be used if one uses shared librariesvar mysql_num_rows: function(res: PMYSQL_RES): my_ulonglong; stdcall; mysql_num_fields: function(res: PMYSQL_RES): longword; stdcall; mysql_eof: function(res: PMYSQL_RES): my_bool; stdcall; mysql_fetch_field_direct: function(res: PMYSQL_RES; fieldnr: longword): PMYSQL_FIELD; stdcall; mysql_fetch_fields: function(res: PMYSQL_RES): PMYSQL_FIELDS; stdcall; mysql_row_tell: function(res: PMYSQL_RES): PMYSQL_ROWS; stdcall; mysql_field_tell: function(res: PMYSQL_RES): longword; stdcall;var mysql_field_count: function(_mysql: PMYSQL): longword; stdcall; mysql_affected_rows: function(_mysql: PMYSQL): my_ulonglong; stdcall; mysql_insert_id: function(_mysql: PMYSQL): my_ulonglong; stdcall; mysql_errno: function(_mysql: PMYSQL): longword; stdcall; mysql_error: function(_mysql: PMYSQL): pChar; stdcall; mysql_info: function(_mysql: PMYSQL): pChar; stdcall; mysql_thread_id: function(_mysql: PMYSQL): longword; stdcall; mysql_character_set_name: function(_mysql: PMYSQL): pChar; stdcall;type PMYSQL_LENGTHS = ^TMYSQL_LENGTHS; TMYSQL_LENGTHS = array[0..MaxInt div SizeOf(longword) - 1] of longword;type extend_buffer_func = function(void: pointer; _to: pChar; length: pLongword): pChar;var mysql_init: function(_mysql: PMYSQL): PMYSQL; stdcall; {$IFDEF HAVE_OPENSSL} mysql_ssl_set: function(_mysql: PMYSQL; const key, cert, ca, capath: pChar): longint; stdcall; mysql_ssl_cipher: function(_mysql: PMYSQL): pChar; stdcall; mysql_ssl_clear: function(_mysql: PMYSQL): longint; stdcall; {$ENDIF} // HAVE_OPENSSL mysql_connect: function(_mysql: PMYSQL; const host, user, passwd: pChar): PMYSQL; stdcall; mysql_change_user: function(_mysql: PMYSQL; const user, passwd, db: pChar): my_bool; stdcall; mysql_real_connect: function(_mysql: PMYSQL; const host, user, passwd, db: pChar; port: longword; const unix_socket: pChar; clientflag: longword): PMYSQL; stdcall; mysql_close: procedure(sock: PMYSQL); stdcall; mysql_select_db: function(_mysql: PMYSQL; const db: pChar): longint; stdcall; mysql_query: function(_mysql: PMYSQL; const q: pChar): longint; stdcall; mysql_send_query: function(_mysql: PMYSQL; const q: pChar; length: longword): longint; stdcall; mysql_read_query_result: function(_mysql: PMYSQL): longint; stdcall; mysql_real_query: function(_mysql: PMYSQL; const q: pChar; length: longword): longint; stdcall; mysql_create_db: function(_mysql: PMYSQL; const DB: pChar): longint; stdcall; mysql_drop_db: function(_mysql: PMYSQL; const DB: pChar): longint; stdcall; mysql_shutdown: function(_mysql: PMYSQL): longint; stdcall; mysql_dump_debug_info: function(_mysql: PMYSQL): longint; stdcall; mysql_refresh: function(_mysql: PMYSQL; refresh_options: longword): longint; stdcall; mysql_kill: function(_mysql: PMYSQL; pid: longword): longint; stdcall; mysql_ping: function(_mysql: PMYSQL): longint; stdcall; mysql_stat: function(_mysql: PMYSQL): pChar; stdcall; mysql_get_server_info: function(_mysql: PMYSQL): pChar; stdcall; mysql_get_client_info: function: pChar; stdcall; mysql_get_host_info: function(_mysql: PMYSQL): pChar; stdcall; mysql_get_proto_info: function(_mysql: PMYSQL): longword; stdcall; mysql_list_dbs: function(_mysql: PMYSQL; const wild: pChar): PMYSQL_RES; stdcall; mysql_list_tables: function(_mysql: PMYSQL; const wild: pChar): PMYSQL_RES; stdcall; mysql_list_fields: function(_mysql: PMYSQL; const table, wild: pChar): PMYSQL_RES; stdcall; mysql_list_processes: function(_mysql: PMYSQL): PMYSQL_RES; stdcall; mysql_store_result: function(_mysql: PMYSQL): PMYSQL_RES; stdcall; mysql_use_result: function(_mysql: PMYSQL): PMYSQL_RES; stdcall; mysql_options: function(_mysql: PMYSQL; option: mysql_option; const arg: pChar): longint; stdcall; mysql_free_result: procedure(result: PMYSQL_RES); stdcall; mysql_data_seek: procedure(result: PMYSQL_RES; offset: my_ulonglong); stdcall; mysql_row_seek: function(result: PMYSQL_RES; offset: MYSQL_ROW_OFFSET): MYSQL_ROW_OFFSET; stdcall; mysql_field_seek: function(result: PMYSQL_RES; offset: MYSQL_FIELD_OFFSET): MYSQL_FIELD_OFFSET; stdcall; mysql_fetch_row: function(result: PMYSQL_RES): PMYSQL_ROW; stdcall; mysql_fetch_lengths: function(result: PMYSQL_RES): PMYSQL_LENGTHS; stdcall; mysql_fetch_field: function(result: PMYSQL_RES): PMYSQL_FIELD; stdcall; mysql_escape_string: function(_to: pChar; const from: pChar; from_length: longword): longword; stdcall; mysql_real_escape_string: function(_mysql: PMYSQL; _to: pChar; const from: pChar; length: longword): longword; stdcall; mysql_debug: procedure(const debug: pChar); stdcall; mysql_odbc_escape_string: function(_mysql: PMYSQL; _to: pChar; to_length: longword; const from: pChar; from_length: longword; param: pointer; extend_buffer: extend_buffer_func): pChar; stdcall; myodbc_remove_escape: procedure(_mysql: PMYSQL; name: pChar); stdcall; mysql_thread_safe: function: longword; stdcall;function mysql_reload(_mysql: PMySQL): longint;// Status codes for libmySQL.dllconst LIBMYSQL_UNDEFINED = 0; // libmysql_load() has not yet been called LIBMYSQL_MISSING = 1; // No suitable DLL could be located LIBMYSQL_INCOMPATIBLE = 2; // A DLL was found but it is not compatible LIBMYSQL_READY = 3; // The DLL was loaded successfullyvar libmysql_handle: HMODULE = 0; libmysql_status: byte = LIBMYSQL_UNDEFINED;function libmysql_load(name: pChar): byte;procedure libmysql_free;// -----------------------------------------------------------------------------------------------IMPLEMENTATION// -----------------------------------------------------------------------------------------------function IS_PRI_KEY(n: longword): boolean;begin Result := (n and PRI_KEY_FLAG) = PRI_KEY_FLAG;end;function IS_NOT_NULL(n: longword): boolean;begin Result := (n and NOT_NULL_FLAG) = NOT_NULL_FLAG;end;function IS_BLOB(n: longword): boolean;begin Result := (n and BLOB_FLAG) = BLOB_FLAG;end;function IS_NUM(t: longword): boolean;begin Result := (t <= FIELD_TYPE_INT24) or (t = FIELD_TYPE_YEAR);end;function IS_NUM_FIELD(f: PMYSQL_FIELD): boolean;begin Result := (f.flags and NUM_FLAG) = NUM_FLAG;end;function INTERNAL_NUM_FIELD(f: PMYSQL_FIELD): boolean;begin Result := (((f._type <= FIELD_TYPE_INT24) and ((f._type <> FIELD_TYPE_TIMESTAMP) or (f.length = 14) or (f.length = 8))) or (f._type = FIELD_TYPE_YEAR));end;function mysql_reload(_mysql: PMYSQL): longint;begin Result := mysql_refresh(_mysql, REFRESH_GRANT);end;function libmysql_load(name: pChar): byte; procedure assign_proc(var proc: FARPROC; name: pChar); begin proc := GetProcAddress(libmysql_handle, name); if proc = nil then libmysql_status := LIBMYSQL_INCOMPATIBLE; end;begin libmysql_free; if name = nil then name := libmysql.dll; libmysql_handle := LoadLibrary(name); if libmysql_handle = 0 then libmysql_status := LIBMYSQL_MISSING else begin libmysql_status := LIBMYSQL_READY; assign_proc(@mysql_num_rows, mysql_num_rows); assign_proc(@mysql_num_fields, mysql_num_fields); assign_proc(@mysql_eof, mysql_eof); assign_proc(@mysql_fetch_field_direct, mysql_fetch_field_direct); assign_proc(@mysql_fetch_fields, mysql_fetch_fields); assign_proc(@mysql_row_tell, mysql_row_tell); assign_proc(@mysql_field_tell, mysql_field_tell); assign_proc(@mysql_field_count, mysql_field_count); assign_proc(@mysql_affected_rows, mysql_affected_rows); assign_proc(@mysql_insert_id, mysql_insert_id); assign_proc(@mysql_errno, mysql_errno); assign_proc(@mysql_error, mysql_error); assign_proc(@mysql_info, mysql_info); assign_proc(@mysql_thread_id, mysql_thread_id); assign_proc(@mysql_character_set_name, mysql_character_set_name); assign_proc(@mysql_init, mysql_init); {$IFDEF HAVE_OPENSSL} assign_proc(@mysql_ssl_set, mysql_ssl_set); assign_proc(@mysql_ssl_cipher, mysql_ssl_cipher); assign_proc(@mysql_ssl_clear, mysql_ssl_clear); {$ENDIF} // HAVE_OPENSSL assign_proc(@mysql_connect, mysql_connect); assign_proc(@mysql_change_user, mysql_change_user); assign_proc(@mysql_real_connect, mysql_real_connect); assign_proc(@mysql_close, mysql_close); assign_proc(@mysql_select_db, mysql_select_db); assign_proc(@mysql_query, mysql_query); assign_proc(@mysql_send_query, mysql_send_query); assign_proc(@mysql_read_query_result, mysql_read_query_result); assign_proc(@mysql_real_query, mysql_real_query); assign_proc(@mysql_create_db, mysql_create_db); assign_proc(@mysql_drop_db, mysql_drop_db); assign_proc(@mysql_shutdown, mysql_shutdown); assign_proc(@mysql_dump_debug_info, mysql_dump_debug_info); assign_proc(@mysql_refresh, mysql_refresh); assign_proc(@mysql_kill, mysql_kill); assign_proc(@mysql_ping, mysql_ping); assign_proc(@mysql_stat, mysql_stat); assign_proc(@mysql_get_server_info, mysql_get_server_info); assign_proc(@mysql_get_client_info, mysql_get_client_info); assign_proc(@mysql_get_host_info, mysql_get_host_info); assign_proc(@mysql_get_proto_info, mysql_get_proto_info); assign_proc(@mysql_list_dbs, mysql_list_dbs); assign_proc(@mysql_list_tables, mysql_list_tables); assign_proc(@mysql_list_fields, mysql_list_fields); assign_proc(@mysql_list_processes, mysql_list_processes); assign_proc(@mysql_store_result, mysql_store_result); assign_proc(@mysql_use_result, mysql_use_result); assign_proc(@mysql_options, mysql_options); assign_proc(@mysql_free_result, mysql_free_result); assign_proc(@mysql_data_seek, mysql_data_seek); assign_proc(@mysql_row_seek, mysql_row_seek); assign_proc(@mysql_field_seek, mysql_field_seek); assign_proc(@mysql_fetch_row, mysql_fetch_row); assign_proc(@mysql_fetch_lengths, mysql_fetch_lengths); assign_proc(@mysql_fetch_field, mysql_fetch_field); assign_proc(@mysql_escape_string, mysql_escape_string); assign_proc(@mysql_real_escape_string, mysql_real_escape_string); assign_proc(@mysql_debug, mysql_debug); assign_proc(@mysql_odbc_escape_string, mysql_odbc_escape_string); assign_proc(@myodbc_remove_escape, myodbc_remove_escape); assign_proc(@mysql_thread_safe, mysql_thread_safe); end; Result := libmysql_status;end;procedure libmysql_free;begin if libmysql_handle <> 0 then FreeLibrary(libmysql_handle); libmysql_handle := 0; libmysql_status := LIBMYSQL_UNDEFINED;end;// -----------------------------------------------------------------------------------------------INITIALIZATION// -----------------------------------------------------------------------------------------------begin {$IFNDEF DONT_LOAD_DLL} libmysql_load(nil); {$ENDIF} // DONT_LOAD_DLLend;// -----------------------------------------------------------------------------------------------FINALIZATION// -----------------------------------------------------------------------------------------------begin libmysql_free;end;end.

View Code

 

 

连接本机mysql的例子:

// uses mysql; //当前目录要有libmySQL.dll,当然,放在系统目录也可以,这个文件在mysql安装目录里有procedure TForm1.Button1Click(Sender: TObject);var Row: PMYSQL_ROW; MResult: PMYSQL_RES; dbh:PMYSQL; tables:string;begin dbh := mysql_init(nil); if dbh=nil then begin showmessage(初始化MySQL对象失败。); exit; end; if nil=mysql_connect(dbh,localhost,root,‘‘) then begin Memo1.lines.Add(mysql_error(dbh)); exit; end; if 0<>mysql_select_db(dbh,chemdbs) then begin Memo1.Lines.Add(mysql_error(dbh)); mysql_close(dbh); exit; end; tables:=maildb; mysql_query(dbh,PChar(select id,dw,em,lxr,flg from +tables+ where flg=0 limit 0,30000)); MResult := mysql_use_result(dbh); EMList.Clear; Ems.Clear; Sta.Clear; repeat Row := mysql_fetch_row(MResult); if Row<>nil then begin Ems.Add(Row[2] + , + Row[1] + , + Row[3]); Sta.Add(1); EMList.Items.Add.Caption :=‘‘; end; until Row=nil; mysql_free_result(MResult); mysql_close(dbh); Logs.Lines.Add(inttostr(Ems.Count) + Record Read); end; 

 

1、基于安全考虑,很多mysql服务器只允许本机连接,检查你的linux上的mysql是否允许外部连接。
2、程序中只要mysql_connect(dbh,‘localhost‘,‘root‘,‘‘) 后面3个参数正确就可以,主机地址、用户名、密码。即可连接到其它服务器上的MySQL
3、移动数据只要把mysql安装目录下的data目录下的某个目录移走,一个目录是一个数据库。

 

libmysql.dll 版本是:3.23.49
mysql.pas 版本是3.23.49
后台mysql服务器版本是3.23.47 for win2000及3.23.42 for sco openserver 5.0.6
经测试:运行正确,非常好.

把ado,bde,odbc扔到垃圾堆去吧.

 参考:https://www.justsoftwaresolutions.co.uk/delphi/dbexpress_and_mysql_5.html

相关文章