C/Visual C - Crear nuevo registro con ADO en Oracle

 
Vista:

Crear nuevo registro con ADO en Oracle

Publicado por david (10 intervenciones) el 27/05/2003 12:15:15
Hola, tengo un pequeño problema con ADO y Visual C++. Tengo una BBDD y en un momento dado doy al usuario la opción de crear un nuevo registro en la BBDD, tengo que hacerlo con ADO (prohibido ADO.NET), la conexión la tengo creada perfectamente. Se que tengo que crear un ADO::Recorset, pero no se como abrir la tabla, crear un registro nuevo y actualizar, se que para añadir un registro debería hacer algo como "AddNew", ¿pero cómo abro una tabla en particular?, es decir no quiero hacer una select de la tabla que quiero abrir y luego hacer el AddNew, quiero abrir la tabla directamente. Yo lo hago así más o menos:

ADODB::_Connection pConn = m_pConnection->getConnectionPtr();
m_pRst->Open("Nombre_Tabla", _variant_t((IDispatch * pConn,true),
(ADODB::CursorTypeEnum) (3),
(ADODB::LockTypeEnum_T) (3), ADODB::CommandTypeEnum) (8) );
m_pRst->AddNew();
...
m_pRst->Update();

Pero me da error al hecer el update ¿Como debo hacer?

Gracias de antemano.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Uso de ADO para agregar registros en una base de datos

Publicado por Alejandro (1286 intervenciones) el 24/06/2025 18:59:27
David, para trabajar con ADO en Visual C++ y realizar operaciones de inserción en una base de datos, es importante asegurarse de que estás utilizando correctamente el objeto `Recordset` y que la conexión a la base de datos está configurada adecuadamente. A continuación, te muestro cómo abrir una tabla directamente, agregar un nuevo registro y actualizarlo.

Código para abrir una tabla y agregar un registro



Aquí tienes un ejemplo de cómo hacerlo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <iostream>
#include <comdef.h>
#include <atlbase.h>
#include <adoint.h>
 
void AgregarRegistro(ADODB::_ConnectionPtr pConn) {
    try {
        // Crear un objeto Recordset
        ADODB::_RecordsetPtr pRst = NULL;
        pRst.CreateInstance(__uuidof(ADODB::Recordset));
 
        // Abrir la tabla directamente
        pRst->Open("Nombre_Tabla", pConn.GetInterfacePtr(),
                    ADODB::adOpenKeyset, ADODB::adLockOptimistic,
                    ADODB::adCmdTable);
 
        // Agregar un nuevo registro
        pRst->AddNew();
 
        // Asignar valores a los campos del nuevo registro
        pRst->Fields->Item["Campo1"]->Value = "Valor1";
        pRst->Fields->Item["Campo2"]->Value = "Valor2";
        // Agrega más campos según sea necesario
 
        // Actualizar el registro en la base de datos
        pRst->Update();
 
        // Cerrar el Recordset
        pRst->Close();
    } catch (_com_error &e) {
        std::cerr << "Error: " << e.ErrorMessage() << std::endl;
    }
}

Explicación del código



1. Crear el Recordset: Se crea una instancia del objeto `Recordset` utilizando `CreateInstance`.

2. Abrir la tabla: En lugar de hacer una consulta SQL, se abre la tabla directamente utilizando `adCmdTable`. Esto permite trabajar con la tabla como un conjunto de registros.

3. Agregar un nuevo registro: Se llama a `AddNew()` para preparar el `Recordset` para un nuevo registro.

4. Asignar valores: Se asignan valores a los campos del nuevo registro utilizando `Fields->Item["NombreCampo"]->Value`.

5. Actualizar el registro: Se llama a `Update()` para guardar el nuevo registro en la base de datos.

6. Manejo de errores: Se utiliza un bloque `try-catch` para manejar posibles errores de COM.

Consideraciones



- Asegúrate de que los nombres de los campos que estás utilizando en `Fields->Item["Campo1"]` coincidan exactamente con los nombres de los campos en tu base de datos.
- Verifica que la conexión a la base de datos esté abierta y sea válida antes de intentar abrir el `Recordset`.
- Si sigues teniendo problemas con el `Update()`, revisa los tipos de datos que estás asignando a los campos y asegúrate de que sean compatibles con la base de datos.

Espero que esta información te ayude a resolver tu problema.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar