我想在已经连接的数据源的数据库上,再建造一个表,哪位大侠能提供思路!!

解决方案 »

  1.   

    CDatabase::ExecuteSQL
    void ExecuteSQL( LPCSTR lpszSQL );
    throw( CDBException );ParameterslpszSQLPointer to a null-terminated string containing a valid SQL command to execute. You can pass a CString.ResCall this member function when you need to execute an SQL command directly. Create the command as a null-terminated string. ExecuteSQL does not return data records. If you want to operate on records, use a recordset object instead.Most of your commands for a data source are issued through recordset objects, which support commands for selecting data, inserting new records, deleting records, and editing records. However, not all ODBC functionality is directly supported by the database classes, so you may at times need to make a direct SQL call with ExecuteSQL.ExampleCString strCmd = "UPDATE Taxes SET Federal = 36%";TRY
    {
       m_dbCust.ExecuteSQL( strCmd );
    }CATCH(CDBException, e)
    {
       // The error code is in e->m_nRetCode
    }END_CATCH
      

  2.   

    如果是CDaoDatabase
    CString SQL=sql语句
    pDaoDatabase->Execute(SQL)
      

  3.   

    ADO:   _ConnectionPtr m_pCon
    sql=create table.......
    hr=m_pCon->Execute(_bstr_t(sql),&v,adCmdText);
      

  4.   

    这样就打发别人了?
    CDatabase m_local;//定义本地数据库
    CTime sysdate,cssj;
    CString strcmd,lh_temp;
    lh_temp = "yangbit test!";
    strcmd.Format(_T("insert into test(cssj,lh) values (sysdate,'%s')"),lh_temp);
    m_local.OpenEx( _T("DSN=local;UID=xg_dba;PWD=gb2001"),CDatabase::noOdbcDialog );
    m_local.ExecuteSQL(strcmd);
    m_local.Close();这是一部分,插入表test中cssj,lh两个列中当前时间和字符串,数据库Oracle,sysdate在Oracle中是系统时间。
    如果要直接插入字符串就用
    strcmd.Format(_T("insert into test(cssj,lh) values (sysdate,'yangbit test!')"));
      

  5.   

    使用ADO6.1 概述ADO是ActiveX数据对象(ActiveX Data Object),这是Microsoft开发数据库应用程序的面向对象的新接口。ADO访问数据库是通过访问OLE DB数据提供程序来进行的,提供了一种对OLE DB数据提供程序的简单高层访问接口。ADO技术简化了OLE DB的操作,OLE DB的程序中使用了大量的COM接口,而ADO封装了这些接口。所以,ADO是一种高层的访问技术。ADO技术基于通用对象模型(COM),它提供了多种语言的访问技术,同时,由于ADO提供了访问自动化接口,所以,ADO可以用描述的脚本语言来访问VBScript,VCScript等。 6.2 在VC中使用ADO可以使用VC6提供的ActiveX控件开发应用程序,还可以用ADO对象开发应用程序。使用ADO对象开发应用程序可以使程序开发者更容易地控制对数据库的访问,从而产生符合用户需求的数据库访问程序。使用ADO对象开发应用程序也类似其它技术,需产生与数据源的连接,创建记录等步骤,但与其它访问技术不同的是,ADO技术对对象之间的层次和顺序关系要求不是太严格。在程序开发过程中,不必选建立连接,然后才能产生记录对象等。可以在使用记录的地方直接使用记录对象,在创建记录对象的同时,程序自动建立了与数据源的连接。这种模型有力的简化了程序设计,增强了程序的灵活性。下面讲述使用ADO对象进行程序设计的方法。6.21 引入ADO库文件使用ADO前必须在工程的stdafx.h文件里用直接引入符号#import引入ADO库文件,以使编译器能正确编译。代码如下所示:#define INITGUID#import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename("EOF","EndOfFile")#include "icrsint.h"这行语句声明在工程中使用ADO,但不使用ADO的名字空间,并且为了避免冲突,将EOF改名为EndOfFile。6.22 初始化ADO环境在使用ADO对象之前必须先初始化COM环境。初始化COM环境可以用以下代码完成:::CoInitialize(NULL);在初始化COM环境后,就可以使用ADO对象了,如果在程序前面没有添加此代码,将会产生COM错误。在使用完ADO对象后,需要用以下的代码将初始化的对象释放:::CoUninitialize();此函数清除了为ADO对象准备的COM环境。6.23 接口简介ADO库包含三个基本接口:__ConnectionPtr接口、__CommandPtr接口、__RecordsetPtr接口, __ConnectionPtr接口返回一个记录集或一个空指针。通常使用它来创建一个数据连接或执行一条不返回任何结果的SQL语句,如一个存储过程。用__ConnectionPtr接口返回一个记录集不是一个好的使用方法。通常同CDatabase一样,使用它创建一个数据连接,然后使用其它对象执行数据输入输出操作。 __CommandPtr接口返回一个记录集。它提供了一种简单的方法来执行返回记录集的存储过程和SQL语句。在使用__CommandPtr接口时,可以利用全局__ConnectionPtr接口,也可以在__CommandPtr接口里直接使用连接串。如果只执行一次或几次数据访问操作,后者是比较好的选择。但如果要频繁访问数据库,并要返回很多记录集,那么,应该使用全局__ConnectionPtr接口创建一个数据连接,然后使用__CommandPtr接口执行存储过程和SQL语句。 __RecordsetPtr是一个记录集对象。与以上两种对象相比,它对记录集提供了更多的控制功能,如记录锁定,游标控制等。同__CommandPtr接口一样,它不一定要使用一个已经创建的数据连接,可以用一个连接串代替连接指针赋给__RecordsetPtr的connection成员变量,让它自己创建数据连接。如果要使用多个记录集,最好的方法是同Command对象一样使用已经创建了数据连接的全局—ConnectionPtr接口,然后使用__Recordse7tPtr执行存储过程和SQL语句。6、24 使用ADO访问数据库__ConnectionPtr是一个连接接口,首先创建一个__ConnectionPtr接口实例,接着指向并打开一个ODBC数据源或OLE DB数据提供者(Provider)。以下代码分别创建一个基于DSN和非DSN的数据连接。   //使用__ConnectionPtr(基于DSN)  __ConnectionPtr MyDb;  MyDb.CreateInstance(__uuidof(Connection));  MyDb-〉Open("DSN=samp;UID=admin;PWD=admin","","",-1);  //使用—ConnectionPtr (基于非DSN)  __ConnectionPtr MyDb;  MyDb.CreateInstance(__uuidof(Connection));MyDb.Open("Provider=SQLOLEDB;SERVER=server;DATABASE=samp;UID=admin;PWD=admin","","",-1); //使用__RecordsetPtr执行SQL语句  __RecordsetPtr MySet;  MySet.CreateInstance(__uuidof(Recordset));MySet-〉Open("SELECT * FROM some__table",  MyDb.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);现在我们已经有了一个数据连接和一个记录集,接下来就可以使用数据了。从以下代码可以看到,使用ADO的__RecordsetPtr接口,就不需要像DAO那样频繁地使用大而复杂的数据结构VARIANT,并强制转换各种数据类型了,这也是ADO的优点之一。假定程序有一个名称为m__List的ListBox控件,下面代码我们用__RecordsetPtr接口获取记录集数据并填充这个ListBox控件:__variant__t Holder  try{while(!MySet-〉adoEOF)  { Holder = MySet-〉GetCollect("FIELD__1");  if(Holder.vt!=VT__NULL)  m__List.AddString((char)__bstr__t(Holder));  MySet-〉MoveNext();} }  catch(__com__error  e)  { CString Error = e-〉ErrorMessage();   AfxMessageBox(e-〉ErrorMessage());  } catch(...)  { MessageBox("ADO发生错误!");} 必须始终在代码中用try和catch来捕获ADO错误,否则ADO错误会使你的应用程序崩溃。当ADO发生运行错误时(如数据库不存在),OLE DB数据提供者将自动创建一个__com__error对象,并将有关错误信息填充到这个对象的成员变量。