• Viernes 8 de Noviembre de 2024, 23:25

Autor Tema:  Interactuar con claves primaria c#  (Leído 3820 veces)

saitohfin

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Interactuar con claves primaria c#
« en: Miércoles 14 de Julio de 2010, 13:56 »
0
Buenas, tengo un problema y es que no entiendo muy bien como va a entender el access la sentencias SQL que le meto y luego como tratarlas. El caso que tengo entre manos es que he creado una BD de Access y he declarado una variable ID como primaria en una Tabla y en otra lo mismo pero que aparte será
clave ajena de la anterior.

Me gustaría saber a la hora de Insertar datos si tengo que especificar la ID(clave primaria) o si la rellenará el ACCESS por su cuenta. Os enseñó mí situación para que podais comprender.

T_DATOS{ Id CP INTEGER, Estudios VARCHAR, ...}          T_FORMULARIO{Id CP && Clave Ajena INTEGER, C1 INTEGER, ...}

Código:    (no pongo todo el código para simplificar y no marear)

Crear BASE DE DATOS: en principio esto esta bien, como he dicho falta mucho código, solo presento digamos la partes críticas
/***********************************************************************************/
     cat.Create(con)
     Conectar();
     conexion.Open();
     t = "CREATE TABLE DATOS(Id NUMBER(6) PRIMARY KEY, Edad NUMBER(2), Estudios VARCHAR(20) FOREIGN KEY (Estudios)Reference ESTUDIOS,)";
     comando = new OleDbCommand(t, conexion);
     t = "CREATE TABLE FORMULARIO(Id NUMBER(6) FOREIGN KEY (Id) REFERENCE DATOS ON UPDATE CASCADE ON DELETE CASCADE, C1 NUMBER(1))";
     conexion.Close();
/**********************************************************************************/

INSERTAR: Mí duda esta en esta parte de código
/**********************************************************************************/
String t = "INSERT INTO DATOS VALUES(@" + d.getId() + ",@" + d.getEdad() +")";
            comand = new OleDbCommand(t, conexion);
            t = "INSERT INTO FORMULARIO VALUES(@"+f.getId();
            for (int i = 0; i <= 14; i++) t += f.getRespuesta(i) + ",";
            t += f.getRespuestastring(14) + "," + f.getRespuestastring(15) + ")";
            conexion.Open();
            comand = new OleDbCommand(t, conexion);
            conexion.Close();

/**********************************************************************************/

En este caso que tengo que hacer, introducir el id manualmente, o no presentarlo y lo pone el access solo??

Muchas gracias por vuestra atención

gerloxxx

  • Miembro MUY activo
  • ***
  • Mensajes: 121
    • Ver Perfil
Re: Interactuar con claves primaria c#
« Respuesta #1 en: Jueves 15 de Julio de 2010, 18:08 »
0
cuando el id es autonumerico, access lo pone solo, luego lo pedes recuperar con un query, algo asi como:
Código: SQL
  1.  
  2. SELECT LAST(campo_clave) FROM tabla
  3.  
  4.  
si no es autonumerico tu tendrias que recuperar el ultimo para pasarselo como id (SELECT MAX(CAMPO) + 1 AS TOTAL FROM TABLA), para luego insertarlo en la otra tabla y crear la relacion

saludos

saitohfin

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Re: Interactuar con claves primaria c#
« Respuesta #2 en: Viernes 16 de Julio de 2010, 11:08 »
0
Ok muchas gracias, ahora tengo un problema haber si le podeis echar un vistazo, se trata de  que cuando intento insertar me dice que no existe la tabla Estudios, cuando inserto lo hago con parámetros y tal. Mí código al crear es este:

public void Crear_BD_Opeas(String ruta)
    ADOX.Catalog cat = new ADOX.Catalog();
    String con = "Provider=Microsoft.Jet.OLEDB.4.0;" + @"Data Source=" + ruta+ "Jet OLEDB:Engine Type=5";
    cat.Create(con);
    String t = "CREATE TABLE ESTUDIOS(Estudios VARCHAR(20) PRIMARY KEY, Bloque NUMBER(2) NOT NULL)";
        Conectar();
        conexion.Open();
        OleDbCommand comando = new OleDbCommand(t, conexion);
        comando.ExecuteNonQuery();
        conexion.Close();        
            }

He quitado los try{ catch{

Muchas gracias.

saitohfin

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Re: Interactuar con claves primaria c#
« Respuesta #3 en: Viernes 16 de Julio de 2010, 11:33 »
0
Después de debuggear he visto que el problema lo tengo en el CREATE TABLE, pero no sé donde, alguna idea de donde puede estar el problema?? Muchas Gracias!!

gerloxxx

  • Miembro MUY activo
  • ***
  • Mensajes: 121
    • Ver Perfil
Re: Interactuar con claves primaria c#
« Respuesta #4 en: Sábado 17 de Julio de 2010, 17:05 »
0
Debe ser algo asi:
Código: SQL
  1.  
  2. CREATE TABLE ESTUDIOS
  3. (
  4.    Estudios TEXT(20) PRIMARY KEY,
  5.    Bloque NUMBER NOT NULL
  6. )
  7.  
  8.  

saitohfin

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Re: Interactuar con claves primaria c#
« Respuesta #5 en: Jueves 12 de Agosto de 2010, 11:48 »
0
Muchas gracias, al final he conseguido hacerlo, como una sentencia SQL fuera y en vez de Number que es lo normal me lo coge con INTEGER y en vez de TEXT con VARCHAR, una muestra de como lo he hecho:

            t = "CREATE TABLE DATOS(ID INTEGER IDENTITY PRIMARY KEY, REF VARCHAR(8) NOT NULL, NOMBRE VARCHAR(25), ";
            t+="APELLIDO1 VARCHAR(25), APELLIDO2 VARCHAR(25),DNI VARCHAR(9) UNIQUE, DIRECCION VARCHAR(40), LOCALIDAD VARCHAR(20), ";
            t+="SEXO VARCHAR(1), FECHA_NCTO DATE, TELEFONO INTEGER, EMAIL VARCHAR(40), ENTR_AYTO DATE);";
            com.CommandText = t;
            com.ExecuteNonQuery();  //Introducimos sentencia en la ejecutamos con el comando.


Muchas gracias por la atención.