Ver Mensaje Individual
  #2 (permalink)  
Antiguo 04/02/2010, 14:08
Dav1d
 
Fecha de Ingreso: noviembre-2005
Mensajes: 186
Antigüedad: 18 años, 5 meses
Puntos: 1
Respuesta: Problema de base de datos, al borrar en cascada

Cita:
Iniciado por Dav1d Ver Mensaje
Hola

Estoy con un proyecto con Adobe air, en as3, creo la base de datos mediante código sin problemas. Tengo dos tablas, una principal con un campo code como clave primaria y otra sencudaria a la que podemos llamar DetailTable, con varios campos en clave primaria, y quiero que al eliminar el campo code de la tabla principal, se elimine todas las filas de la tabla secundaría donde el campo code valga igual que el campo code de la tabla principal.

Esta es la sentencia que utilizo al crear las tablas:

var sql2:String = "CREATE TABLE IF NOT EXISTS MainTable (" +
" code INTEGER PRIMARY KEY AUTOINCREMENT, " +
" name TEXT, " +
" date DATE " +
" " +
")";

var sql3:String = "CREATE TABLE IF NOT EXISTS DetailTable (" +
" code INTEGER,position INTEGER, type INTEGER, " +
" path TEXT, document TEXT, " +
" PRIMARY KEY (code,position,type)" +
" FOREIGN KEY (codigo) REFERENCES Detallesecuencia(codigo) ON DELETE CASCADE " +
")";

pues bien, luego una vez creadas, insertado los datos, Me conecto (pongo el código de conexión sin problemas, borro una fila, de la tabla principal, por ejemplo la fila con code=4, se puede ver en el código que pongo acontinuación, pero no sé borra ni una fila de la tablaSecundaria con code=4 ¿por qué?

Código:
// Dentro de una clase

private var conn:SQLConnection;

public function constructorClass(){
conn = new SQLConnection();
ConexionBD();
}

function ConexionBD() {

			conn.addEventListener(SQLEvent.OPEN, openHandler);
			conn.addEventListener(SQLErrorEvent.ERROR, errorHandler);
			var dbFile:File=File.applicationDirectory.resolvePath("mydatabase.db");
			conn.openAsync(dbFile, SQLMode.UPDATE);
		}

function deleteRow(){
			selectData:SQLStatement = new SQLStatement();
			selectData.sqlConnection=conn;
			selectData.text="DELETE FROM MainTable WHERE code = :param1";
			selectData.addEventListener(SQLEvent.RESULT, resultHandler);
			selectData.addEventListener(SQLErrorEvent.ERROR, errorHandler);

			//delete row in MainTable with code=4, but not delete all rows in DetailTable with code=4
			selectData.parameters[":param1"]=4;
			
			selectData.execute();
		}
Saludos