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
#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盘,然后试试我写的连接字符串吧。
使用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 向我们展示时,还包括构建该示例的 full 和 complete 错误输出,包括任何可能的信息笔记。并且不要忘记该示例需要向我们展示您拥有的所有#include
指令(简而言之,我们应该可以复制粘贴它并尝试复制错误)。
你没有包含boost头文件
你说你“写了我的 c++ 代码 like 这个”(强调我的)...这真的是你使用的 exact 代码吗?不包括任何头文件?
【参考方案1】:
编译器需要在您使用它们之前声明您在程序中使用的所有符号。如果您使用尚未声明的符号,它将给您一个错误,因为它不知道。
现在当您使用BOOST_PYTHON_MODULE
时,编译器不知道该符号,因此整个语句在语法上是错误的。
您必须包含定义 BOOST_PYTHON_MODULE
宏以及 boost::python::def
的 Boost 头文件。
【讨论】:
你是对的。我将 #include以上是关于c/c++ 数据库连接时编译出错的主要内容,如果未能解决你的问题,请参考以下文章
Linux编译C语言时出错 /home/zwlong/222/LESduct2.c:323: undefined reference to `sqrt'
C/C++语言编译生产可执行的二进制文件的过程??求大神详尽解释,
C# .Net + MongoDB Atlas 连接字符串 MongoDB.Driver.Legacy 尝试运行客户端时出错