c/c++ 数据库连接时编译出错

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c/c++ 数据库连接时编译出错相关的知识,希望对你有一定的参考价值。

代码如下:

#import "C:\program files\common files\system\ado\msado15.dll" no_namespace
rename("EOF","adoEOF")
#include <stdio.h>

void main()

_ConnectionPtr cn;
::CoInitialize(NULL);
cn.CreateInstance(__uuidof(Connection));
_bstr_t connStr = "Provovider = Microsoft.Jet>OLEDB.4.0; Data Source=test.mdb";
try

cn->CursorLocation=adUseClient;
cn->Open(connStr,"","",adModeUnknown);
_variant_t rowsAffected;//影响行数
_RecordsetPtr rs;
rs = cn->Execute("SELECT * FROM T_person",&rowsAffected,adCmdText);
while(!rs->"adoEOF")

_variant_t var = rs->Fields->Item["uid"]->Value;
printf("%s\n",(char *)_bstr_t(var));
rs->MoveNext();

rs->close();

catch(_com_error e)

printf("%s\n",(char *)e.Description());

if(cn->State) cn->Close();
::CoUninitialize();
exit(0);


错误提示:

--------------------Configuration: test2 - Win32 Debug--------------------
Compiling...
test.cpp
e:\vc98\include\stdio.h(142) : error C2501: 'rename' : missing storage-class or type specifiers
e:\vc98\include\stdio.h(142) : error C2078: too many initializers
e:\vc98\include\stdio.h(142) : error C2440: 'initializing' : cannot convert from 'char [7]' to 'int'
This conversion requires a reinterpret_cast, a C-style cast or function-style cast
e:\vc98\include\stdio.h(142) : error C2143: syntax error : missing ';' before '<class-head>'
e:\vc98\include\stdio.h(331) : error C2373: 'rename' : redefinition; different type modifiers
E:\大学课程\vc++\课程设计\test2\test.cpp(2) : see declaration of 'rename'
e:\vc98\include\stdio.h(461) : error C2143: syntax error : missing ';' before ''
e:\vc98\include\stdio.h(461) : error C2143: syntax error : missing ';' before ''
e:\vc98\include\stdio.h(461) : error C2143: syntax error : missing ';' before ''
E:\大学课程\vc++\课程设计\test2\test.cpp(6) : error C2143: syntax error : missing ';' before ''
E:\大学课程\vc++\课程设计\test2\test.cpp(6) : error C2447: missing function header (old-style formal list?)
Error executing cl.exe.

test2.exe - 10 error(s), 0 warning(s)
我把头文件STDIO.H重新下载了一个装上去,现在问题提示变成了

e:\vc98\include\stdio.h(36) : error C2448: '<Unknown>' : function-style initializer appears to be a function definition
e:\vc98\include\stdio.h(36) : fatal error C1004: unexpected end of file found

#import "C:\program files\common files\system\ado\msado15.dll" no_namespace rename("EOF","adoEOF") //要写在一行,很重要,主要的问题都在这
#include <stdio.h>

void main()

_ConnectionPtr cn;
::CoInitialize(NULL);
cn.CreateInstance(__uuidof(Connection));
_bstr_t connStr = "Provovider = Microsoft.Jet>OLEDB.4.0; Data Source=test.mdb";
try

cn->CursorLocation=adUseClient;
cn->Open(connStr,"","",adModeUnknown);
_variant_t rowsAffected;//影响行数
_RecordsetPtr rs;
rs = cn->Execute("SELECT * FROM T_person",&rowsAffected,adCmdText);
while(!rs->adoEOF) //不能有引号

_variant_t var = rs->Fields->Item["uid"]->Value;
printf("%s\n",(char *)_bstr_t(var));
rs->MoveNext();

rs->Close(); //close的第一个字母要大写

catch(_com_error e)

printf("%s\n",(char *)e.Description());

if(cn->State) cn->Close();
::CoUninitialize();
exit(0);

//PS:stdio.h换回去追问

运行成功了!但是程序捕捉到错误“未发现数据源名称且未指定默认驱动程序”这个是我的test.mdb的问题?我加了全路径名也不行。

追答

_bstr_t connStr = "Provider=microsoft.jet.oledb.4.0;data source=c:\\test.mdb;persist security info=false;Jet OLEDB:Database";
我不知道你为什么会错,把数据库放c盘,然后试试我写的连接字符串吧。

参考技术A 貌似是加载的时候有问题啊

使用boost python编译在python代码内部调用的c ++代码时出错

【中文标题】使用boost python编译在python代码内部调用的c ++代码时出错【英文标题】:error while compiling a c++ code which is called inside of a python code, with boost python 【发布时间】:2019-09-14 11:15:59 【问题描述】:

我在 Python 中开始了一个项目,我想使用一些图像对象。我想在我的 Python 代码中调用一些 C++ 函数。经过一番研究,我决定使用 Python Boost 库在我的 Python 代码中调用 C++ 函数。

我的 Boost 版本是:libboost_python3-py36.so.1.65.1。 我正在使用 Python v3.6。

我在 CppProject.cpp 中编写了这样的 C++ 代码:


char const* myMethod() 
    // do some operations ...


    return "It is Done";


#include <boost/python.hpp>

BOOST_PYTHON_MODULE(CppProject) 
    boost::python::def("getTryString", myMethod); // boost::python is the namespace


另外,我像这样创建了我的 CMakeLists.txt:

cmake_minimum_required(VERSION 2.8.3)
FIND_PACKAGE(PythonInterp)
FIND_PACKAGE(PythonLibs)
FIND_PACKAGE(Boost COMPONENTS python)

INCLUDE_DIRECTORIES($Boost_INCLUDE_DIRS $PYTHON_INCLUDE_DIRS)

PYTHON_ADD_MODULE(NativeLib CppProject)
FILE(COPY MyProject.py DESTINATION .) # See the whole tutorial to understand this line

最后,这是我在 MyProject.py 中的 Python 代码:

import NativeLib
# some preprocess
print (NativeLib.getTryString)

编写代码后,我创建了一个名为 build 的目录。 在那个目录中,我运行了这个命令:

cmake -DCMAKE_BUILD_TYPE=Release ..

在那之后,在我运行我的 Python 代码之前,我确实做到了,最后,我运行了我的 python 代码,但是发生了分段错误!

有人可以帮我解决这个错误吗?

【问题讨论】:

你能提取一个minimal reproducible example吗?此外,您使用的 Python 和 Boost 版本可能很重要。 与您的当前问题无关,但 Python 脚本并没有真正调用该函数。 当您创建 minimal reproducible example 向我们展示时,还包括构建该示例的 fullcomplete 错误输出,包括任何可能的信息笔记。并且不要忘记该示例需要向我们展示您拥有的所有#include 指令(简而言之,我们应该可以复制粘贴它并尝试复制错误)。 你没有包含boost头文件 你说你“写了我的 c++ 代码 like 这个”(强调我的)...这真的是你使用的 exact 代码吗?不包括任何头文件? 【参考方案1】:

编译器需要在您使用它们之前声明您在程序中使用的所有符号。如果您使用尚未声明的符号,它将给您一个错误,因为它不知道。

现在当您使用BOOST_PYTHON_MODULE 时,编译器不知道该符号,因此整个语句在语法上是错误的。

您必须包含定义 BOOST_PYTHON_MODULE 宏以及 boost::python::def 的 Boost 头文件。

【讨论】:

你是对的。我将 #include 添加到我的 c++ 代码中,然后它就正确了。但是当我运行我的 python 代码时,发生了分段错误。

以上是关于c/c++ 数据库连接时编译出错的主要内容,如果未能解决你的问题,请参考以下文章

Linux编译C语言时出错 /home/zwlong/222/LESduct2.c:323: undefined reference to `sqrt'

C/C++语言编译生产可执行的二进制文件的过程??求大神详尽解释,

MongoDB Mongoose 连接数据库时出错

SQL2005 连接出错

C# .Net + MongoDB Atlas 连接字符串 MongoDB.Driver.Legacy 尝试运行客户端时出错

怎么在linux环境下通过c/c++语言连接oracle数据库