(Puntuación alta) ¿Cómo utilizar el método ADO para conectarse a la base de datos de Access en el proyecto MFC e importar el conjunto de registros consultado en un archivo de Excel?
Elija usted mismo las piezas útiles. Creo que puedes entender.
actualizar datos(TRUE);
setdlgitemtext(IDC_static 11, "Selección condicional");
if(m_list2.GetCurSel()==- 1| |m_list4. GetCurSel()==-1||m_list5. GetCurSel()==-1)
{
AfxMessageBox("¡Seleccione las condiciones completamente!"); /p>
Regresar;
}
if(m_check1)
{
if(m_list6.GetCurSel() = =-1)
{
AfxMessageBox("¡Seleccione una columna de la tabla B como fuente de la copia!");
Regresar;
}
}
_ conexión ptr m _ pconexión 1 = NULL
_ conexión ptr m _ p conexión 2 = NULL; >
_ RecordsetPtr m _ pRecordset = NULL;
//CString m _ SinFile
//CString m _ TableName
long lfiledcount 1; = 0;
long lfiledcount 2 = 0;
long lrowcount 1 = 0; //El número de registros en la tabla, excluyendo la fila del encabezado.
long lrowcount 2 = 0; //El número de registros en la tabla, excluyendo la fila del encabezado.
índice de fila larga 2 = 0
Inicialización total (NULL);
m_pConnection1. CreateInstance("ADODB.Connection");
m_Connection2. CreateInstance("ADODB.Connection");
m_pRecordset. CreateInstance("ADODB.Connection");
CString strtext 1;
m_list1. GetLBText(m_list1. GetCurSel(), strtext 1);
CString sqlstr 1
SQLstr1. Formato("SELECT * FROM [s$]", strtext 1);
CString strText2
m_list2. GetLBText(m_list2. GetCurSel(), strtext 2);
CString SQLstr2
SQLstr2.
Format("SELECT * FROM [s$]",strtext 2);
Pruebe
{
setdlgitemtext(IDC_static 12,"mark,patience Esperando. ..");
//Abrir archivo Excel
m _ pconnection 1->; Open((_bstr_t)path1, "", "", admode desconocido); < / p>
m _Connection2- gt; Open((_bstr_t)path2, "", "", modo ad desconocido);
_ RecordsetPtr precordset 1
_ RecordsetPtr pRecordset2
Conjunto de precodificación 1. crear instancia(_ _ uuidof(Recordset));
Conjunto de precodificación 2. crear instancia(_ _ uuidof(Recordset));
Try
{
// [Feature$] representa el nombre de la hoja de cálculo en la tabla de Excel .
pRecordset1->Open (_ variante _ t (sqlstr1), //Consulta todos los campos en la tabla degradable.
m _ p conexión 1 . getinterfaceptr(), // Obtener el puntero IDispatch de la biblioteca de conexión de la biblioteca
adOpenStatic, //adOpenDynamic, adOpenKeyset
adlock optimista,
ADC mdtext);
Conjunto de registros previos 2->Open(_variant_t(SQLstr2), //Consulta todos los campos en la tabla degradable.
M _ pconnection2.getinterfaceptr(), //Obtiene el puntero IDispatch de la biblioteca conectada a la biblioteca
adOpenStatic, //adOpenDynamic, adOpenKeyset
adlock optimista,
adc mdtext
CString lb3 // tabla de subconjunto del libro de trabajo. de todos los títulos de subcampos
CString lb4//Todos los títulos de subcampos del subconjunto del libro de la tabla B
CString lb5
CString lb6
int p 1 = 0; // La posición del índice de la columna que se comparará en la tabla a.
int p2 = 0; //La posición del índice de la columna a comparar en la tabla b.
int P3 = 0;
m_list3. GetLBText(m_list3. GetCurSel(), lb3);
m_list4. GetLBText(m_list4. GetCurSel(), lb4);
m_list5. GetLBText(m_list5. GetCurSel(), lb5);
m_list6. ObtenerLBText(m_list5.
GetCurSel(), lb6);
//Obtener el número de campos
lfiledcount 1 = precordset 1- gt; obtener campos()- GetCount();
lfiledcount 2 = precordset 2- gt; get campos()- gt; GetCount()
//Obtener el número de registros
lrowcount 1 = precordset 1- >GetRecordCount ();
lrowcount 2 = precordset 2- gt; GetRecordCount();
//Obtener el nombre del campo
_ bstr _ t * filename 1 = new _ bstr _ t[lfiledcount 1]; //Nombre del campo de almacenamiento
_ bstr _ t * filedname 2 = new _ bstr _ t[lfiledcount 2] //Nombre del campo de almacenamiento
for(int indexarchivo 1 = 0; indexarchivo 1 lt; lfiledcount 1; indexado1 )
{
nombre de archivo 1[filedindex 1]= precordset 1- gt; ()- gt;GetItem(_ variante _ t(long(filedindex 1)))- gt;GetName();
if(lb3 = =(LPCSTR)filedname 1[filedindex 1]) p>
{
p 1 = índice de archivo 1;
}
if(lb6 = =(LPCSTR)nombre de archivo 1[índice de archivo 1])
{
P3 = índice de archivo 1;
}
}
//FieldsPtr FDS = conjunto de registros previos 1- gt; obtener campos();
//FDS- gt; Append("S_id ", adTinyInt, NULL, adFldRowID
for(int fileindex 2 = 0; fileIndex2 ltlFiledCount2filedIndex2 ) p>
{
nombre de archivo 2[filedindex 2]= precordset 2- gt; obtener campos()- gt;_ variante _ t(long(filedindex 2)))- gt; GetName ();
if(lb4 = =(LPCSTR)filedname 2[filedindex 2])
{
p2 = filedindex2
}
}
long lrowindex 1 = 0;
CString str 1; //Almacena todos los datos en la tabla.
CString str2//Almacena todos los datos en la tabla.
int flag=m_list5.
FindString(-1, m_list str 5);
m_progress1. SetRange(0,lrowcount 1);
pRecordset1->MoveFirst();
Y (!pRecordset1->adoEOF)
{
//Presione la línea y luego almacene cada campo de cada dato.
str 1 = variante tostring(precordset 1->; obtener campos()- gt; GetItem(_ variante _ t(nombre de archivo 1[p 1])- gt; valor);
Conjunto pregrabado 2->MoveFirst();
Y (! Conjunto pregrabado 2->adoEOF)
{
// Pulsa la línea, luego almacene cada campo de cada dato.
str 2 = variante tostring(precordset 2- gt; get campos()- gt; GetItem(_ variante _ t(nombre de archivo 1[p2] )- gt ; valor);
if(str1==str2)
{
_ variante _ t t = _ variante _ t(long(bandera) );
pRecordset1->put Collect( amp; t, _ variante _ t(m _ eFlagStr));
lrow index 2
pRecordset1-; >actualizar( );
}
Prerecordset2->MoveNext();
}
pRecordset1->MoveFirst();
lrowindex 1;
m_progress1.SetPos(lrowindex 1);
pRecordset1->move(lrowindex 1);
} p>
p>
//pmy com- gt; Publicar();
pRecordset1->close();
Publicar();
precordset 1 = NULL;
Conjunto de pregrabación 2->close();
Conjunto de precodificación 2.
publicar();
pRecordset2 = NULL
m_pconnection1->close();
m_connection2-gt;close()
if (nombredearchivo1!=null)
{
eliminar[]nombre de archivo 1;
nombre de archivo 1 = NULL;
} p>
if (nombrearchivo2!=null)
{
Eliminar[]nombrearchivo 2;
nombrearchivo2 = NULL
}
}
catch(_com_error e)
{
EndWaitCursor();
AfxMessageBox(e . Descripción());
setdlgitemtext(IDC_static 12, "¡Falló el procesamiento!");
}
}
catch(. _com_error e)
{
AfxMessageBox(e . Descripción());
EndWaitCursor();
Retorno;
setdlgitemtext(IDC_static 12, "¡Falló el procesamiento!");
}
Número CString;
Formato de números("Se han marcado los registros d ¡completado!", índice lrow 2);
SetDlgItemText(IDC_static 12,num);