• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:borland c++ によるMySQL へのアクセス)

borland c++でMySQLデータベースへの接続ができないエラーの解決方法

このQ&Aのポイント
  • borland c++でMySQLデータベースへの接続ができない問題が発生しています。外部シンボル 'mysql_real_connect' が未解決、外部シンボル 'mysql_init' が未解決、外部シンボル 'mysql_close' が未解決というエラーが表示されています。
  • 現在の状況として、使用しているヘッダファイルは<my_global.h>、<mysql.h>、<my_sys.h>です。ソースコードでは、mysql_init()で接続を初期化し、mysql_real_connect()で接続を確立し、mysql_close()で接続を閉じています。
  • また、implibを使用してlibmySQL.libからlibmySQL.dllに変換し、実行したいソースと同じフォルダに配置してリンクしています。解決方法についてご教示いただけると幸いです。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

まず、libmySQL.lib は本当にプロジェクトに入っていますでしょうか(失礼します。いや、これは時々あるので) 次は、impdef で、dll から .def ファイルを作ってみてください。この .def ファイルは、テキストファイルですので、エディタ等で開けます。 ここで、.dll の中にある関数の一覧が得られます。 この関数の名前が、 'mysql_real_connect' や、'mysql_init' や 'mysql_close' であることを確認してみてください。 関数の名前に、一見意味不明の文字が付いていることがあります。これは、C++のリンケージ規約でコンパイルされた結果です。 この場合、以下の方法を試してみることになります。 1.おそらく、mysql.h の中に、 extern "C" の宣言があると思いますので、一度、この宣言をなくして試してみてください。 2.それでもだめな場合は、他のコンパイラ(Windows 環境なら、Microsoft か、Sygwin なら、Gcc)のC++でコンパイルしてありそうなので、該当のコンパイラを使うということになります。 3.もしも、limmySql.h のなかに、extern "C" がない場合、(これは、リンクエラーの関数名が、Cのリンケージ規約の関数名なので、可能性低いですが)関数プロトタイプの前に、 extern "C" をつけてみてください。 いずれにしても、.def ファイルを眺めると、何かわかるかもしれません。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.1

状況は確かに、「リンクに失敗している」ですね。 タイプミスかも知れませんが、implib は、.dll から、.lib を生成するツールです。 もともと、libmySQL.dll があった場合に、これから、libmySQL.lib を生成します。 そして、プロジェクトに、他のソースファイルと一緒に、libmySQL.lib を追加しておきます。 これで、OKのはずですが。

hirama
質問者

補足

ご回答ありがとうございます。 ご指摘の通り、私のタイプミスでした。 implibでlibmySQL.lib を生成し、 それをリンクしています。 しかし、エラーが出てしまいます。 よろしければ、解決法などご教授ください。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • mysqlに接続できない?

    XAMPP v3.2.2を使用しています。 Apache 2.4.18 mysqlnd 5.0.12 PHP 7.0.8 phpからmysqlに接続したいのですが $conn = mysql_connect( "localhost", "root", "" ); 上記のコードで Fatal error: Uncaught Error: Call to undefined function mysql_connect() のエラーが表示されます。 Call to undefined function mysql_connect() を検索するといくつか出てきますがどれも解決には至りませんでした。 気になるのは「libmysql.dll」が存在していないことです。 サイトを見ると標準でインストールされるような事が書かれていますがインストールされない場合もあるのでしょうか? それともこのバージョンでは不要なのでしょうか?

    • ベストアンサー
    • MySQL
  • c言語でMySQLを利用するときのエラー

    C言語でMySQLを操作することを考えて勉強を始めたばかりなのですが、データベースのフィールドの数を表示するプログラムを作ったところ、エラーが出てしまいます。以下がコードです。 #include<windows.h> #include<stdio.h> #include<mysql.h> int main(int argc, char **argv) { MYSQL *mysql; MYSQL *con; MYSQL_RES *result; mysql = mysql_init(NULL); if(NULL==mysql){ printf( "SQLの初期化に失敗しました.\n" ); exit(1); } const char *sever ="localhost"; const char *user = "root"; const char *password = "*******"; const char *database = "features"; unsigned int portnumber = 0; unsigned int num_fields; con = mysql_real_connect(mysql, sever, user, password, database, portnumber, NULL, 0); if(NULL==con) { printf( "SQLのオープンに失敗しました.\n" ); exit(1); } result = mysql_store_result( mysql ); num_fields = mysql_num_fields( result ); printf("fieldの数は%dです。",num_fields); mysql_close( mysql ); printf( "SQLをクローズしました.\n" ); return 0; } ビルドは正常終了するのですが、 これでF5を押すと、 mysql.exe の 0x5b8a8f04 でハンドルされていない例外が発生しました: 0xC0000005: 場所 0x00000048 を読み込み中にアクセス違反が発生しました とエラーが、Ctrl+F5を押すと、 mysql.exe は動作を停止しました と出る状態です。 試しにmysql.exeを直接起動してみるとやはり、エラーの画面が出ます。 MYSQL_RES *result; unsigned int num_fields; result = mysql_store_result( mysql ); num_fields = mysql_num_fields( result ); printf("fieldの数は%dです。",num_fields); を消せば、正常に終了して、 SQLをクローズしました. と出ます。 環境は、Windows 7 ultimate、OSは64bit 開発環境は、Microsoft Visual C++ 2010 Express です。 MySQLはMicrosoft Visual C++ 2010 Expressで動くように32bit版を入れています。 どこが原因でエラーが起こっているのでしょうか? よろしくお願いします。

    • ベストアンサー
    • MySQL
  • 何故、mysql_insert_id が not a valid になるのでしょうか?  

    MySQLバージョン サーバ5.0.45、 クライアント 3.23.49 Apache2.0.61 (Win32) PHP4.4.7 の環境下で、 名称 member, id int(10) unsigned not null auto_increment、 name, varchar(20) not null, mail varchar(30) not null のテーブルを作りました。          次のスクリプトを書いて <?php session_start(); $name = $_POST["name"]; $mail = $_POST["mail"]; print_r($_POST); $conn = mysql_pconnect("localhost", "ABC", "XYZ") or die("Can't connect"); mysql_select_db("SIMEI", $conn) or die("db error") ; $query = "INSERT INTO member (name, mail) VALUES ('$name','$mail')"; $result = mysql_query($query, $conn); //$oid = 'mysql_insert_id($result)'; //''で括ってみる $oid = mysql_insert_id($result); // ← 11行 $result = mysql_query( "SELECT id FROM member WHERE oid = $oid", $conn); if($result){ print("insert OK");}  echo "Can't insert "; $_SESSION['id'] = mysql_result($result, 0); // ← 14行 mysql_close($conn); ?> これを実行すると、 データはmysql DB に登録されますが、下記のエラーが出て、id を取得できません。 何故でしょうか? どうすれば不具合を解決することができるでしょうか? Warning: mysql_insert_id(): supplied argument is not a valid MySQL-Link resource in C:\・・・・\insert.php on line 11 Warning: mysql_result(): supplied argument is not a valid MySQL result resource in C:\・・・・・\insert.php on line 14

    • ベストアンサー
    • MySQL
  • VC++でMySQLがインストールされたサーバーに接続できない

    VC++2005のWin32コンソールアプリケーションにて、 MySQLがインストールされたサーバーにアクセスするアプリを作成しています。 実行したところ、「Host '自分のコンピュータ名' is not allowed to connect to this MySQL server」 というエラーメッセージが表示され、サーバーにアクセスすることが出来ません。 サーバー側のMySQLを停止させて実行すると、異なるメッセージが表示されるので、 サーバー側のMySQLの設定が原因かと考えているのですが、解決策が分かりません。。 解決策をご存知の方おられましたら、ご教授お願い致します。 下記にソースコードを掲載します。 ============================================================================================================ #include "stdafx.h" #include <windows.h> #include <mysql.h> #include <iostream> int _tmain(int argc, _TCHAR* argv[]) { MYSQL * con; MYSQL_RES * res; MYSQL_ROW row; char server[] = "サーバー側のIPアドレスを設定"; //サーバーのIPアドレスを指定しています char user[] = "root"; char password[] = "hoge"; //サーバー側のMySQLのパスワードを入れる char database[]= "test"; //データベース名を入れる //初期化 con = mysql_init(NULL); //MySQLに接続 if(!mysql_real_connect(con, server, user, password, database, 0, NULL, 0)){ fprintf(stderr, "%s\n", mysql_error(con)); exit(1); } //SQL文で問い合わせる if(mysql_query(con, "select * from test")){ fprintf(stderr, "%s\n", mysql_error(con)); exit(1); } //結果を得る res = mysql_use_result(con); //データを表示する while((row = mysql_fetch_row(res)) != NULL){ std::cout << row[0] << " " << row[1] << std::endl; } //接続を閉じる mysql_free_result(res); mysql_close(con); return 0; } ============================================================================================================

    • ベストアンサー
    • MySQL
  • サーブレット mysqlについて

    JSP サーブレット mysqlについて質問です。 私が今実現させたいことを簡単に説明します。画面側にはtextboxがあり、このtextboxは追加ボタンによって、 どんどん追加されていきます。 サーブレット側はこのtextboxの全ての値をDBに書き込みたいです。 例えば、textboxが二つなら、一つ目のINSERTでDBのagi列にagis1とname列にtextbox一個目の値を書き込み、二つ目のINSERTでDBのagi列にagis2とname列にtextboxニ個目の値を書き込む。 ソースを書いてみたのですが、いろいろと違いがあると思いますので、ご教示をお願いします。 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String[] name = request.getParameterValues("sonota"); Connection conn = null; Statement state = null; int count = 0; try { //コネクション接続 Class.forName("org.git.mm.mysql.Driver"); conn = DriverManager.getConnection( "jdbc:mysql://localhost/Sampl_db", "root", "taratara"); state = conn.createStatement(); String agis = getInitParameter("agis[i]"); for (int i = 0; i < agis.length(); i++) { //クエリ実行 state.executeUpdate( "INSERT INTO Sampl_teble(agi, name) VALUES(" + agis + ", " + name + ")"); } //影響レコード数出力 System.out.println(count); } finally { //ステートメントを閉じる if(state != null) { try { state.close(); } catch (Exception e) { //このエラー処理は「state.close」でエラーが発生した場合でも //下記処理が実行される為に記述しています。 } } //コネクションを閉じる if(conn != null) { conn.close(); } } }

    • ベストアンサー
    • Java
  • Mysqlへの接続に関して

    MysqlへVisual Studio 2008 のC#で接続しようとしています。 接続方法としては、クライアントから"mysql-connector-net-6.1.5"をインストールして ODBCを使わずに接続しようとしています。 参照設定で、"MySql.data"を指定し、以下のように記述しましたが、どうしても下記の ようなエラーが出力されてしまいます。 原因がわかりましたら教えて頂きたいと思います。 《記述内容》 using MySql.Data.MySqlClient; string sqlcmd = "userid=root;" + "password=000000;" + "database=db_name;" + "Host=999.999.999.999"; string cmdstr, cmdcnt; cmdstr = "select * from t_user ;"; MySqlDataReader reader = null; MySqlConnection conn = new MySqlConnection(sqlcmd); //MySQLコマンド MySqlCommand selcmd = new MySqlCommand(cmdstr, conn); //MySQL接続 conn.Open(); この conn.Open(); のところで下記のエラーが出てしまう。 //エラー内容 Unable to connect to any of the specified MySQL hosts. よろしくお願いします。

    • ベストアンサー
    • MySQL
  • PHP/mySQLでインサートができません。

    PHPとmySQLを勉強中の初心者ですが、よろしくお願いします。 PHPで簡単なインサート文を作ってそれをmySQLに保存しようとしているのですが、以下のエラーが出てしまいます。 Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource プログラムは以下の通りです。HOSTNAME,USERNAME,DBPWDは別のところで定義していますが、mysql_connect, mysql_select_dbではエラーにならないので、データベースの選択まではうまく行っていると思うのですが。 $conn = mysql_connect(HOSTNAME, USERNAME, DBPWD); if(!$conn){ die("Logon Failure to mysql Server."); } $db = mysql_select_db(DBNAME, $conn); if(!$db){ die("Cannot access to the DB"); } foreach($csv_ary as $a => $b) { $query = "INSERT INTO TEST field_a VALUES $a"; if (!mysql_query($query, $db)){ echo "更新失敗: SQL=$query<br>"; } } mysql_close($conn); field_aはvarchar(10)でPrimary_key, NOT NULLの設定です。 Foreachで展開した配列の値はちゃんと長さ10の文字列が入っています。 PHP 4.3.11は mySQL 4.0.27です。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHP+MySQL+phpMyAdmin パスワードとセキュリィティ

    例えば以下のようなプログラムがあったとして <html> <head><title>簡易接続</title></head> <body> <?php $conn = mysql_connect("localhost", "usr", "passwd"); mysql_select_db("kisop", $conn); $res = mysql_query("SHOW TABLES",$conn); if($res){ print ("データ獲得に成功しました。"); } mysql_free_result($res); ?> </body> </html> 以下の部分の $conn = mysql_connect("localhost", "usr", "passwd"); が見えてしまうとデータベースを 誰かが改変出来てしまうということでしょうか? アクセス制限された外部からPHPを読み込むとかの 対策等はありますか?

    • ベストアンサー
    • PHP
  • PHP+mysql データ重複登録

    ◆PHPバージョン 5.3.3 ◆mysqlバージョン 4.1.22 ◆テーブル情報 `no` int(11) NOT NULL auto_increment, `name` text NOT NULL, `mail` text NOT NULL, `memo` text NOT NULL, `updating` timestamp NOT NULL default CURRENT_TIMESTAMP, PRIMARY KEY (`no`) ENGINE=MyISAM DEFAULT CHARSET=utf8 ◆SQL (1)insert into test(name, mail, memo) values ('abc','abc@test.com','abc') (2)insert test set name='abc', mail='abc@test.com', memo='abc' ◆処理概要 $conn = mysql_connect(ホスト、ユーザ、パスワード); mysql_query("set names utf8"); $rs = mysql_select_db(DB名, $conn); $result = mysql_query(SQL, $conn); ◆登録情報 (1, 'abc', 'abc@test.com', 'abc', '2011-09-02 16:28:57'), (2, '', '', '', '2011-09-02 16:28:57'), 【問題】 上記SQL(1)、(2)どちらでDBに登録しても、登録情報のように同時に空データも同時に登録されてしまう 全く原因の検討がつかないので、何か手がかりがありましたらご教授頂けたらと思います。 どうぞよろしくお願いします。

    • ベストアンサー
    • MySQL
  • サーブレットとMysqlについて

    画面のtextboxからDB(Mysql)にinsertするときの質問です。 皆さんのおかげでinsertすることができました。 しかし、textboxが一個で値も一つなのに、 insertするとDBには2行同じ値がinsertされます。 下記のソースのどこがいけないのでしょうか? ご教示をお願いします。 「ソース」 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String[] name10 = request.getParameterValues("sonota"); for (int i = 0; i < name10.length; i++) { System.out.println(i + " " + name10[i]); name10[i] = new String(name10[i].getBytes("8859_1"), "UTF-8"); } Connection conn = null; CallableStatement cs = null; PreparedStatement stmt = null; ResultSet rs = null; String url = "jdbc:mysql://localhost/Sample_db"; String dbUser = "root"; String dbPass = "taratara"; try{ Class.forName("com.mysql.jdbc.Driver").newInstance(); conn = DriverManager.getConnection(url, dbUser, dbPass); String sql= "insert into Sample_table (name) values (?)"; stmt = conn.prepareStatement(sql); for (String n : name10) { stmt.setString(1, n); stmt.executeUpdate(); } int cnt = stmt.executeUpdate(); stmt.close(); RequestDispatcher dispatcher = request.getRequestDispatcher("index.jsp"); dispatcher.forward(request, response); }catch(Exception e){ } } }