ejemplos de programación ODBC en Visual C ++

      Microsoft Developer Studio proporciona controladores ODBC de 32 bits para la mayoría formato de base de datos estándar. Estos formatos de datos estándar, incluyendo: SQL Server, Access, Paradox, dBase, FoxPro, Excel, Oracle y Microsoft texto. Si el usuario desea utilizar otros formatos de datos, la necesidad de instalar el controlador ODBC y el DBMS.   

      Después de que el usuario utilice su propia función de gestión de base de datos DBMS para generar un nuevo esquema de base, puede iniciar sesión origen de datos mediante ODBC. Para la aplicación del usuario, siempre y cuando se instala el controlador, puede registrarse muchas bases de datos diferentes. Para más detalles ver la base de datos de registro de ayuda en línea acerca de ODBC.   

      A, clases de base de datos ODBC proporcionadas por MFC   
      de biblioteca de clases de base de Visual C ++ MFC define varias clase base de datos. Al utilizar ODBC programación menudo utilizar para la CDatabase (tipo de base de datos), el CRecordSet (clase de registros) y CRecordView (visual clase conjunto de registros).   
      objeto de la clase CDatabase proporciona la conexión a la fuente de datos, la fuente de datos puede ser operado por el mismo.   
      objeto clase CRecordset proporciona el extraída conjunto de registros de la fuente de datos. objeto CRecordSet se usa típicamente en dos formas: un conjunto dinámico de filas (conjuntos de registros dinámicos) y conjunto de instantáneas (instantáneas). Cambiar el conjunto de línea dinámica para mantener el ritmo con otros usuarios pueden hacer, a continuación, la instantánea es una visión estática de los datos. Cada conjunto de formularios se abre en el momento de la grabación de un conjunto de registros se proporcionan, excepto que, cuando se establece en una fila en el desplazamiento dinámico para una grabación, la grabación hecha por otros usuarios o aplicaciones de otro conjunto de la grabación los cambios que se muestra en consecuencia.   
      CRecordView registros de la base objeto de clase se pueden mostrar en la forma de control, este punto de vista se conecta directamente a una vista de tabla de objetos CRecordSet.   

      En segundo lugar, la programación de ODBC aplicación
      
aplicación de Visual C ++ Asistente para aplicaciones puede generar automáticamente un marco de aplicación ODBC, los pasos son: Abrir el menú Archivo, Nueva opción, seleccionar los proyectos, rellene el nombre del proyecto, seleccionar aplicaciones de MFC (exe), a continuación, siga las instrucciones appwizard ser operación.   
      Cuando se le preguntó si el Asistente para aplicaciones incluyen soporte de base de datos, si desea leer y escribir la base de datos, seleccionar la vista de base de datos con soporte de archivos, si desea acceder a la información en la base de datos sin volver escribir los cambios realizados, a continuación, seleccione Vista de base de datos sin el soporte de archivos. Después de seleccionar el apoyo de base de datos, base de datos botón Source está activada, seleccione para llamar cuadro de diálogo Opciones de datos. Mostrará el recurso de base de datos ODBC se ha registrado en el cuadro de las opciones de base de datos de diálogo, seleccione la base de datos para operar, tales como: Super_ES, seleccionar tablas de base de datos aparece el cuadro de diálogo después de hacer clic en OK, que enumera todas la tabla de base de datos seleccionada incluido; después de seleccionar la tabla de operar, y haga clic en OK. Después de seleccionar la base de datos y datos de la tabla, se puede seguir el Asistente para aplicaciones funcionan como de costumbre.   
      De particular interés es que: en el marco de aplicación generada Vista (tales como: CSuper_ESView), el objeto contiene un puntero que apunta a CSuper_ESSet m_pSet, el puntero está configurado por el Asistente para aplicaciones, el objetivo de establecer un enlace entre el aparato y la forma visual la grabación, de tal manera que registro centralizado de los resultados de la consulta se puede visualizar fácilmente en la forma visual.   
      Para establecer contacto con el programa de fuente de datos, es necesario CDateBase :: OpenEx () o CDatabase :: Open () es para inicializar. objeto de base de datos debe ser inicializado antes de que se construye con el objeto de conjunto de registros.

      En tercer lugar, el ejemplo
  1. Registro de búsqueda de
  registros de consulta utilizan CRecordSet :: Open () y la función miembro CRecordset :: Requery (). Antes de utilizar un CRecordSet clase de objeto debe utilizar la función CRecordset :: Open () para obtener un conjunto válido de registros. Una vez que haya utilizado la función CRecordset :: Open (), se puede utilizar de nuevo la función CRecordset :: Requery () consulta.
  Al llamar a la función CRecordset :: Open () cuando, si uno ya está abierta CDatabase objeto puntero pasado a las variables miembro de clase de objeto m_pDatabase CRecordSet, a continuación, utilizar la base de datos objeto de establecer una conexión ODBC, de lo contrario, si m_pDatabase es un puntero nulo, para crear un CDatabase objeto de la clase, y está conectado a la fuente de datos predeterminado y, a continuación inicializar el objeto CRecordSet clase. La fuente de datos predeterminado es se obtiene función GetDefaultConnect (). También puede proporcionar la instrucción SQL necesaria, y con él para llamar a la función CRecordset :: Open (), por ejemplo: Super_ESSet.Open (AFX_DATABASE_USE_DEFAULT, strSQL);
  si no se especifican parámetros, el programa utiliza la instrucción SQL predeterminado, que en GetDefaultSQL función () especificado en la instrucción SQL para operar:

  CString :: CSuper_ESSet GetDefaultSQL ()
  {_T retorno ( "[BsicData], [MinSize]");}

  Para la función GetDefaultSQL () devuelve el nombre de la tabla, correspondiente a la operación por defecto de una instrucción SELECT, a saber:

  * SELECT BasicData, MainSize

  En el proceso de investigación, también se pueden utilizar las variables miembro y m_strFilter m_strSort CRecordSet condiciones para realizar consultas y ordenar los resultados. m_strFilter a las condiciones de almacenamiento cadena de filtro después de la sentencia de SQL en cadena; m_strSort a ordenar cadenas, la cadena almacenada en el comunicado POR ORDEN SQL. Tales como:

  Super_ESSet.m_strFilter = "type ="电动机' "; 
  Super_ESSet.m_strSort = "tensión";
  Super_ESSet.Requery ();

  Correspondiente instrucción SQL es:

  * SELECT BasicData, MainSize
  donde tipo = '电动机'
  ORDER BY VOLTAJE

  Además de la asignación directa a m_strFilter, también puede utilizar parametrizado. La parametrización puede utilizar más intuitiva y fácil de completar las condiciones de la tarea de consulta. La etapa de utilizar un parametrizado de la siguiente manera:
  S comunicado paramétrica:

  CString p1;
  flotar p2;

  S en el constructor inicializa un parámetro variable:

  p1 = _T ( "");
  p2 = 0.0f;
  m_nParams = 2;

  La unión columna correspondiente paramétrica S:

  pFX-> SetFieldType (CFieldExchange :: param)
  RFX_Text (pFX, _T ( "P1"), p1);
  RFX_Single (pFX, _T ( "P2"), p2);

  Después de la terminación de los pasos anteriores se puede llevar a cabo utilizando un paramétricas condiciones de consulta:

  m_pSet-> m_strFilter = "= Tipo? Y VOLTAJE =? "; M_pSet-> p1 ="电动机";
  m_pSet-> p2 = 60,0;
  m_pSet-> Requery ();

  El valor del parámetro variable para reemplazar la cadena de consulta "?" Comodín en el orden de vinculación.
  Si el resultado de la consulta es una pluralidad de registros, puede funcionar Move CRecordSet clase (), MoveNext (), MovePrev (), MoveFirst () y la MoveLast () para mover el cursor.
  2. Añadir registro
  de base de datos utilizando la función incremento registrado AddNew (), los requisitos deben basarse permitiendo aumentó abierta:

  m_pSet-> AddNew (); // añadir un nuevo registro al final de la tabla
  m_pSet-> SetFieldNull (& (m_pSet-> m_type), FALSO);
  m_pSet-> m_type = "motor";
  ......
  // introducir el nuevo valor del campo
  m_pSet-> Update ();
  // nuevos registros en una base de datos
  m_pSet-> Requery ();
  // reconstruir conjunto de registros

  3. Eliminar registros
  se pueden utilizar directamente la función de eliminación () a los registros de eliminación, y llamar a delete () no es necesario llamar a la función Update () después de la función:

  m_pSet-> Eliminar ();
  si (m_pSet-> IsEOF ()!)
  m_pSet-> MoveNext ();
  otra cosa
  m_pSet-> MoveLast ();

  4. Modificar registro
  Revisión grabación usando la función de edición ():

  m_pSet-> Editar ();
  // modificar el registro actual
  m_pSet-> m_type = "generador";
  // modificar el valor del campo del registro actual
   ......
   m_pSet-> Update (); // modificará los resultados en la base de datos
  m_pSet-> NuevaConsulta ();

  es la operación de deshacer
  desea abandonar la operación en curso si el usuario selecciona para añadir o modificar registros puede ser llamado antes de la función Update ():
  el CRecordSet :: Movimiento (AFX_MOVE_REFRESH) para modificar o deshacer el modo de aumento, y restaurar o modificar el patrón antes de añadir el registro actual. En el que el valor del parámetro es cero AFX_MOVE_REFRESH.
  6. Base de datos multiplexados conexiones
  definidas en un CRecordSet clase m_pDatabase variable miembro:

  CDatabase * m_pDatabase;

  Es un puntero a la base de datos de objeto de clase. Si la clase de objeto CRecordset la llamada a Open () función antes, se ha abierto un puntero a objeto de clase pasó m_pDatabase CDatabase, pueden compartir el mismo objeto de la clase CDatabase. Tales como:

  CDatabase m_db;
  CRecordSet m_set1,m_set2;
  m_db.Open(_T(″Super_ES″)); //建立ODBC连接
  m_set1.m_pDatabase=&m_db;
  //m_set1复用m_db对象
  m_set2.m_pDatabse=&m_db;
  // m_set2复用m_db对象

  7.SQL语句的直接执行
  虽然我们可以通过CRecordSet类完成大多数的查询操作,而且在CRecordSet::Open()函数中也可以提供SQL语句,但是有时候我们还是希望进行一些其他操作,例如建立新表、删除表、建立新的字段等,这时就需要使用CDatabase类直接执行SQL语句的机制。通过调用CDatabase::ExecuteSQL()函数来完成SQL语句的直接执行:

  BOOL CDB::ExecuteSQLAndReportFailure(const CString& strSQL)
  {TRY
  {m_pdb->ExecuteSQL(strSQL);
  //直接执行SQL语句}
  CATCH (CDBException,e)
  {CString strMsg;
  strMsg.LoadString(IDS_EXECUTE_SQL_FAILED);
  strMsg+=strSQL;
  return FALSE;}
   END_CATCH
  return TRUE;}

  应当指出的是,由于不同的DBMS提供的数据操作语句不尽相同,直接执行SQL语句可能会破坏软件的DBMS无关性,因此在应用中应当慎用此类操作。
  8.动态连接表
  表的动态连接可以利用在调用CRecordSet::Open()函数时指定SQL语句来实现。同一个记录集对象只能访问具有相同结构的表,否则查询结果将无法与变量相对应。

void CDB::ChangeTable()
{  
if (m_pSet->IsOpen()) m_pSet->Close();
 switch (m_id)
 {
  case 0: 
   m_pSet->Open(AFX_DB_USE_DEFAULT_TYPE,″SELECT * FROM SLOT0″);
   //连接表SLOT0
   m_id=1; 
   break;
  case 1: 
   m_pSet->Open(AFX_DB_USE_DEFAULT_TYPE,″SELECT * FROM SLOT1″); //连接表SLOT1
   m_id=0;
   break;
 }
}

  9.动态连接数据库
  可以通过赋与CRecordSet类对象参数m_pDatabase来连接不同数据库的CDatabase对象指针,从而实现动态连接数据库。

void CDB::ChangeConnect()
{
 CDatabase* pdb=m_pSet->m_pDatabase;
 pdb->Close();
 switch (m_id)
 {   
case 0:
   if (!pdb->Open(_T(″Super_ES″)))
    //连接数据源Super_ES
   {
    AfxMessageBox(″数据源Super_ES打开失败″,″请检查相应的ODBC连接″, MB_OK|MB_ICONWARNING);
    exit(0);
   }
   m_id=1;
   break; 
    case 1:
   if (!pdb->Open(_T(″Motor″)))
   //连接数据源Motor
   {
    AfxMessageBox(″数据源Motor打开失败″,″请检查相应的ODBC连接″, MB_OK|MB_ICONWARNING);
    exit(0);
   }
   m_id=0; 
   break;
 }
}

  总结:
  Visual C++中的ODBC类库可以帮助程序员完成绝大多数的数据库操作。利用ODBC技术使得程序员从具体的DBMS中解脱出来,从而可以减少软件开发的工作量,缩短开发周期,并提高效率和软件的可靠性。

发布了1 篇原创文章 · 获赞 0 · 访问量 2715

Supongo que te gusta

Origin blog.csdn.net/yjj350418592/article/details/105127058
Recomendado
Clasificación