Red de conocimiento informático - Consumibles informáticos - (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?

(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?

Déjame darte un fragmento de código que uso en un programa para escribir registros en EXCEL a través de ADO y guardarlo.

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 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 )

{

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>

//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;

}

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);