C或C++语言连接ACCESS数据库代码是啥

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C或C++语言连接ACCESS数据库代码是啥相关的知识,希望对你有一定的参考价值。

要做一个学生成绩管理系统
需要连接ACCESS
不知如何具体实现
有没有详细讲解

参考技术A #include<stdio.h>
#include<string.h>
typedef struct
char name[20];
int number;
int grade;
int class;
float mark[10];
float average;
T;
void show(T *student,int *tp,int n) /* 把成绩显示在屏幕上 */

int i,j;
char a[3]=" ";
printf("***********************************************************\n");
printf(" name number grade class average order\n");
for(i=0;i<n;i++)

printf("-----------------------------------------------------------\n");
printf("%d:\n",i+1);
printf(" %s %d %d %d %f %d\n",student[tp[i]].name,student[tp[i]].number,student[tp[i]].grade,student[tp[i]].class,student[tp[i]].average,tp[i]+1);
printf("mark:");
for(j=0;j<2;j++)
printf("%s%d:%f",a,j+1,student[tp[i]].mark[j]);
printf("\n");

printf("***********************************************************\n");
printf("\n\n\n");

void writefile(T *student,int n) /* 把成绩存在磁盘上 */

FILE *fp;
int i,j;
if((fp=fopen("d:\\kanwei.txt","w+"))==NULL)

printf("can't open file");
exit(0);

for(i=0;i<=n;i++)

fprintf(fp,"%s %d %d %d ",student[i].name,student[i].number,student[i].grade,student[i].class);
for(j=0;j<2;j++)
fprintf(fp,"%f ",student[i].mark[j]);
fprintf(fp,"%f\n",student[i].average);

fclose(fp);

void students(T *student,T *temp,int m,int n,int k) /* 实现两个结构体的拷贝 */

int i;
if(k==0)

strcpy(student[n].name,temp[m].name);
student[n].number=temp[m].number;
student[n].grade=temp[m].grade;
student[n].class=temp[m].class;
for(i=0;i<2;i++)
student[n].mark[i]=temp[m].mark[i];
student[n].average=temp[m].average;

else if(k==1)

strcpy(temp[m].name,student[n].name);
temp[m].number=student[n].number;
temp[m].grade=student[n].grade;
temp[m].class=student[n].class;
for(i=0;i<2;i++)
temp[m].mark[i]=student[n].mark[i];
temp[m].average=student[n].average;


void addfile(T *student,int n) /* 加入新学生到文件 */

T temp[2];
int i,j=1;
float ave=0.0;
printf("Please input the student:\n");
printf(" name number grade class mark1 mark2\n");
printf("****************************************************\n");
scanf("%s",temp[0].name);
scanf("%d",&temp[0].number);
scanf("%d",&temp[0].grade);
scanf("%d",&temp[0].class);
for(i=0;i<2;i++)

scanf("%f",&temp[0].mark[i]);
ave=ave+temp[0].mark[i];

temp[0].average=ave=ave/2;
i=0;
while(ave<=student[i].average&&i<n)
i++;
students(student,temp,j%2,i,1); /* temp[j/2]=student[i]; */
students(student,temp,(j+1)%2,i,0); /* student[i]=stu; */
for(;i<n;i++)

j++;
students(student,temp,j%2,i+1,1); /* temp[(i+2)/2]=student[i+1]; */
students(student,temp,(j+1)%2,i+1,0); /* student[i+1]=temp[(i+1)/2]; */

writefile(student,i);

void showall(T *student,int n) /* 显示文件中所有的学生 */

int i;
int a[30];
for(i=0;i<n;i++)
a[i]=i;
show(student,a,n);

int find(T *student,int n,int *tp) /* 在文件中查询学生可以多行查询 */

int k,im=0,i,m,num,gra,clas;
char na[20];
float ord;
printf("*******************************\n");
printf(" name n&g&c ave order\n");
printf(" 1 2 3 4 \n");
printf("*******************************\n");
scanf("%d",&k);
switch(k)

case 1:
scanf("%s",&na);
for(i=0;i<n;i++)

if(strcmp(student[i].name,na)==0)

tp[im++]=i;


break;
case 2:
scanf("%d%d%d",&num,&gra,&clas);
for(i=0;i<n;i++)

if(student[i].number==num&&student[i].grade==gra&&student[i].class==clas)

tp[im++]=i;


break;
case 3:
scanf("%f",&ord);
for(i=0;i<n;i++)

if(ord==student[i].average)

tp[im++]=i;


break;
case 4:
scanf("%d",&m);
if(m<=n)

tp[im++]=m-1;

break;
case 5:
break;
default:
printf("error operate!\n");
exit(0);

if(im>=1)
show(student,tp,im);
if(im==0&&k<5&&k>=1)
printf("cant find!\n");
return(im);

dele(T *student,int n,int *tp) /* 对某个学生进行删除 */

int j;
printf("choose the student:\n");
j=find(student,n,tp);
if(j>=1)

if(j>1)

printf("Which one do you want to choose?\n");
scanf("%d",&j);
j=tp[j-1];

else
j=tp[0];
for(;j<n-1;j++)
students(student,student,j+1,j,0);
writefile(student,j-1);


void modify(T *student,int n,int *tp) /* 对某个学生进行修改 */

dele(student,n,tp);
addfile(student,n-1);

void readfile(int m) /* 读取文件中的数据,程序的基础 */

FILE *fp;
T student[30];
float mark[10],ave;
int i=0,j,tp[20];
if((fp=fopen("d:\\kanwei.txt","a+t"))==NULL)

printf("can't open file");
exit(0);

while(fscanf(fp,"%s%d%d%d",student[i].name,&student[i].number,&student[i].grade,&student[i].class)!=EOF)


for(j=0;j<2;j++)

fscanf(fp,"%f",&mark[j]);
student[i].mark[j]=mark[j];

fscanf(fp,"%f",&ave);
student[i].average=ave;
i++;

fclose(fp);
switch(m)

case 1:
find(student,i,tp);
break;
case 2:
addfile(student,i);
break;
case 3:
dele(student,i,tp);
break;
case 4:
modify(student,i,tp);
break;
case 5:
showall(student,i);
break;
default:
exit(0);


main() /* 主程序 */

int i=1;
while(i)

printf(" Choose the operate:\n");
printf("******************************************************\n");
printf(" find add delete modify showall exit\n");
printf(" 1 2 3 4 5 0\n");
printf("******************************************************\n");
scanf("%d",&i);
readfile(i);


(这是一个关于成绩系统的,下面的可以参照,我也不知道是做什么的。)

用ODBC吧,不过还是要用到MFC..知道创建数据源吗? 首先创建一个名为rsgl(举例而已,自己取个)的数据源连接数据库,然后写如下代码通过数据源访问数据库:

C/C++ code

#include "afxdb.h"

//---------------------------------------------------------------
// Create and open a database object;
// do not load the cursor library
CDatabase db;
//db.OpenEx( NULL, CDatabase::forceOdbcDialog );
db.OpenEx( "DSN=[color=#FF0000]rsgl[/color];UID=;PWD=", CDatabase::noOdbcDialog );

// Create and open a recordset object
// directly from CRecordset. Note that a
// table must exist in a connected database.
// Use forwardOnly type recordset for best
// performance, since only MoveNext is required
CRecordset rs( &db );
rs.Open( CRecordset::forwardOnly,
_T( "SELECT * FROM system_table" ) );

// Create a CDBVariant object to
// store field data
CDBVariant varValue;

// Loop through the recordset,
// using GetFieldValue and
// GetODBCFieldCount to retrieve
// data in all columns
short nFields = rs.GetODBCFieldCount( );
while( !rs.IsEOF( ) )

for( short index = 0; index < nFields; index++ )

rs.GetFieldValue( index, varValue );
// do something with varValue
AfxMessageBox(*varValue.m_pstring);

rs.MoveNext( );


rs.Close( );
db.Close( );

(不知道有没有用,我其他地方找的。)本回答被提问者采纳

怎样用C或C++(最好是C)语言向Access数据库写入或读出数据?

我一直做的是C或C++独立方面的程序,不知道该怎么做,最好是C语言是因为,我C++才刚开始学习模板……
有谁会的先谢谢了

参考技术A 最好是用C++,说起来很多,去你下载孙鑫 C++深入讲解,那里面有一课是对ACC开发,我就是看那个看会的。本回答被提问者和网友采纳 参考技术B 可以 使用odbc接口,也可以 使用ado接口
~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
参考技术C 建议直接使用ODBC 参考技术D 头文件中定义:
_ConnectionPtr m_pConnection;
_RecordsetPtr m_pRecordset;

________________________________________________________________
AfxOleInit();
try

// 打开本地Access库student.mdb
m_pConnection.CreateInstance(__uuidof(Connection));
m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=student.mdb","","",adModeUnknown); //student.mdb 更换为自己的

catch(_com_error e)

AfxMessageBox("数据库连接失败,确认数据库student.mdb是否在当前路径下!");
return FALSE;


m_pRecordset.CreateInstance(__uuidof(Recordset));

try

m_pRecordset->Open("SELECT * FROM shujuku", // 查询shujuku表中所有字段
m_pConnection.GetInterfacePtr(), // 获取库接库的IDispatch指针
adOpenDynamic,
adLockOptimistic,
adCmdText);

catch(_com_error *e)

AfxMessageBox(e->ErrorMessage());


以上是连接数据库的代码。

int bj;
CString sex;
while(!m_pRecordset->adoEOF)

bj=atoi((char*)(_bstr_t)m_pRecordset1->GetCollect("班级")); 转换成int型;
sex.Format("%s",(char*)(_bstr_t)m_pRecordset1->GetCollect("性别")); 转换成CString型。
m_pRecordset->MoveNext();

以上是读取shujuku中班级 和 性别列中的数据;

CString str,str1;
_bstr_t sql;

try

sql = "UPDATE shujuku SET 语文='"+str+"',日期='"+nData+"' WHERE 学号='"+str1+"'";//写入语文成绩 日期 按学号。

m_pConnection->Execute(sql,NULL,adCmdText);

catch (_com_error e)

MessageBox("发生错误,保存失败!");


以上是写入数据库代码;

如何向一个新表中写入数据我也不知道,正在查找中~!请高手不吝赐教。
第5个回答  2011-01-04 项目一、在文本框中设计一个滚动字幕
实验步骤:
1. 建立一个单文本框工程,如:mfc_7。
2. 在查看菜单中添加一个新的菜单项“启动”,并设置其ID为ID_TEST。
3. 为“启动”菜单添加消息处理函数OnTest(),注意是在CMfc_7View类中添加。
4. 为OnTest( )函数添加如下代码:
void CMfc_7View::OnTest( )

// TODO: Add your command handler code here
SetTimer(1,200,NULL);

5. 在类视图(ClassView)下添加数据成员:private: int x;
6. 修改OnDraw( )函数如下:
void CMfc_7View::OnDraw(CDC* pDC)

// CMfc_7Doc* pDoc = GetDocument();
// ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
TRACE("This is a little app.");
pDC->TextOut(x,100,"你妈喊你回家吃饭喽!");
x=x+50;
RECT re;
GetClientRect(&re);
if(x>re.right-re.left)
x=0;

7. 在类向导中,为CMfc_7View类添加一个WM_TIMER的消息响应函数OnTimer( ),代码如下:
void CMfc_7View::OnTimer(UINT nIDEvent)

// TODO: Add your message handler code here and/or call default
Invalidate();

8. 运行测试。

以上是关于C或C++语言连接ACCESS数据库代码是啥的主要内容,如果未能解决你的问题,请参考以下文章

visual c++ 是啥软件

计算机二级考试内容是啥?

c语言中stdio.h是啥意思

c++语言中class是啥意思

C语言判断指定文件是不是存在

将静态库添加到 C 或 C++ 项目的常用方法是啥?