急得我会疯了!!会请各位帮忙!!C++Builder6和Mysql的问题 (200分) (100分)

  • 主题发起人 主题发起人 hzchoubug
  • 开始时间 开始时间
H

hzchoubug

Unregistered / Unconfirmed
GUEST, unregistred user!
我第一次在C++Builder6中使用Mysql,碰到了一个让我灰心的问题,请各位大侠帮忙,
感激不尽,我的问题如下:
我在需要调用Mysql函数的单元中加入#include <mysql.h>,Mysql的头文件路径也设好了,
可它跳出一个错误,提示在mysql_com.h中的 “ my_socket fd;”有错。其中my_socket的定义
在Mysql.h中。错误提示 my_socket 没有定义。
我实在不知什么地方有问题,200分求解,不够再加。
 
还必须设置Mysql.h对应的obj或lib或DLL文件路径。
首先阅读你的Mysql使用说明(主要注意它是否支持你的win系统及使用那些库文件),
然后找出所有需要的库文件的路径:
BCB6.0下->Project->Option->Directiories/Conditionals->Library path->
添加你的Mysql Library文件路径.(用分号隔开)
 
ky0_2000
你好,先谢谢你,Mysql Library的路径我也加了,还是不行。我在VC++里也试过,好像也不行
 
程序代码和出错提示帖出来看看。
 
kyo_2000,你好,下面是代码和出错提示
我只是使用了Mysql的一个函数mysql_init,它提示mysql_com.h的
typedef struct st_net {
Vio* vio;
my_socket fd; //////////提示这行出错/////////////
int fcntl;
unsigned char *buff,*buff_end,*write_pos,*read_pos;
char last_error[MYSQL_ERRMSG_SIZE];
unsigned int last_errno,max_packet,timeout,pkt_nr;
unsigned char error;
my_bool return_errno,compress;
my_bool no_send_ok;
unsigned long remain_in_buf,length, buf_length, where_b;
unsigned int *return_status;
unsigned char reading_or_writing;
char save_char;
} NET;
能不能帮我分析一下。
//--代码
#include <vcl.h>
#pragma hdrstop
#include "MainApp.h"
#include <mysql.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
MYSQL * m_pMyData =NULL;
int __fastcall TForm1::ConnectToDataBase(const char* svr, DWORD port)
{
strcpy(m_ipSvr, svr);
m_port = port;
m_pMyData = mysql_init((MYSQL*) 0);
return 0;
}
出错提示:
[C++ Error] mysql_com.h(115): E2303 Type name expected
[C++ Error] mysql_com.h(115): E2139 Declaration missing
 
最好 将 mysql.h的include 置于vcl.h之前。
还是缺少某个头文件或者库文件。用文件搜索器查查MySQL安装路径下面哪个文件包含“my_socket”的定义部分。
 
kyo_2000兄,你还没睡呀,太好了!

我查了,my_socket的定义就在mysql.h里面,我真是不知如何为什么会这样
 
1。请在mysql.h的include之前包含config-win.h头文件,其作用是使得mysql.h在win下适用。
2。一般的win-MySQL是for VC++6.0的,MySQL跟BCB的兼容性不是很好,请注意你的MySQL是否支持BCB.
3。确定LibMySQL.dll文件的格式是否为coff,否则会出现link错误。
 
你需要把libmysql.lib的接口库加到工程中,libmysql.lib你可以用implib生成。
implib libmysql.lib libmysql.dll
 
听说implib 有功能限制,我也是implib libmysql.lib libmysql.dll,结果一样
如果是接口库的问题,那跟变量定义有什么关系?我真是搞不懂Mysql在做什么。
 
几经折磨,终于找到原因。
MySQL 3.24.xx自带的libmysql.lib是coff格式的,而bcb需要的是omf格式。
暂时的解决方法:
1。用BCB的 coff2omf 将lib进行格式转换:
($BCB)/bin/coff2omf ($MySQL)/LIB/libmysql.llib ($BCB)/LIB/libmysql.lib
2。使用BCB的VC++ convertion tool将 (MySQL)/examples/libmysqltest例子程序转换成
BCB程序。
 
mysql没有3.24.xx这个版本,我用ASCII C方式写的程序没有出现过你说的问题.
 
To birdie:
1。小生弄错,是3.23.xx
2。我们讨论的是BCB下的mysql,VC++或者linux的gcc下可以很好地跟MySQL库联接。
 
To kyo_2000
你好,我用了你提供的方法还是不行,我用的是BCB6。
我打算用VC来做算了,我另开一个贴,你来拿另外的100分吧
谢谢你。
To birdie
谢谢你关注,送上30分,望笑纳
 
我确实在BCB6上做出来了,需要用到VC++ convert工具对VC++ 的dsp文件进行转换。
 
各位大小虾:
你们好,小辈有一事请求,请问你们谁有libMYSQL.DLL文件的?或知道在那里下载的
能告知小辈吗?还有就是此文件应放置在什么地方呢?还有就是其联接的数据库的扩展名
是什么?用什么软件能做此数据库呢?
请各位大小虾不吝赐教,小辈不胜感激!
E_mail:Cong6501788@163.com QQ:70617589
 
我也没有能成功地使用dbExpress调用MySQL,由于时间紧迫,我们根本不可能像你那样去
深究通过API调用MySQL。我们是通过BDE调用MySQL的ODBC驱动进行的数据库存取,一切都很
简单,只需要下载一个MySQL ODBC驱动(2.5版)的就行。在2.5版的驱动下,通过ADO数据集
调用MySQL ODBC时会有一点问题:即当一个Select语句查不到数据时,会抛出一个“Invalid
Field Size”的异常,而使用BDE没有这个问题。如果你一定要用ADO的话,下载一个更新的
ODBC驱动可能会解决这个问题。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部