C或C++语言连接ACCESS数据库代码是啥
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C或C++语言连接ACCESS数据库代码是啥相关的知识,希望对你有一定的参考价值。
要做一个学生成绩管理系统
需要连接ACCESS
不知如何具体实现
有没有详细讲解
#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++才刚开始学习模板……
有谁会的先谢谢了
~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 参考技术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数据库代码是啥的主要内容,如果未能解决你的问题,请参考以下文章