Hace un tiempo ya hice un tutorial sobre como conectar Flash con Access a través de mdm Zinc. Y en los comentarios me preguntaron si habría posibilidad de editar directamente el datagrid sin tener que usar campos de texto.

He adaptado ese tutorial para que se pueda conseguir esto. Simplemente tenemos que permitir editar el datagrid y luego añadirle un listener a éste para que cada vez que cambie, se actualize la base de datos.

Esto se consigue con las siguientes lineas:

Actionscript:
  1. theDataGrid.editable=true;
  2. myDataGridListener = new Object();
  3. myDataGridListener.cellEdit = function(event){
  4. var sqlString:String = "UPDATE ejemplo_agenda set nombre='"+theDataGrid.getItemAt(event.itemIndex).Nombre+"', apellidos='"+theDataGrid.getItemAt(event.itemIndex).Apellidos+"' where id="+theDataGrid.getItemAt(event.itemIndex).ID;
  5. mdm.Database.MSAccess.runQuery(sqlString);
  6. consulta();
  7. }
  8. theDataGrid.addEventListener("cellEdit", myDataGridListener);

Aquí os pongo la totalidad del código así como los archivos del ejemplo para que os los podáis descargar. He hecho un poco más simple la base de datos de access, solo tiene nombre y apellidos.

Actionscript:
  1. var databaseFile:String = "agenda.mdb";
  2. var databasePassword:String = "";
  3. var path:String = mdm.Application.path;
  4. mdm.Database.MSAccess.connectAbs(path+databaseFile,databasePassword);
  5. var success = mdm.Database.MSAccess.success();
  6. if (success == false) {
  7. var msg:String = "No se puede conectar a la bbdd";
  8. mdm.Dialogs.prompt(msg);
  9. return;
  10. }
  11. //FUNCION PARA HACER LA CONSULTA A LA BBDD
  12. theDataGrid.editable=true;
  13. function consulta(){
  14. theDataGrid.removeAll();
  15.  
  16. var sqlString:String = "SELECT id,Nombre,Apellidos FROM ejemplo_agenda order by id asc";
  17. // Ejecutamos la consulta sql
  18. mdm.Database.MSAccess.select(sqlString);
  19. // Comprobamos los errores
  20. var error:Boolean = (mdm.Database.MSAccess.error() == "true");
  21. if (error) {
  22. var msg:String = "Ha ocurrido un error en la consulta!";
  23. mdm.Dialogs.prompt(msg);
  24. return;
  25. }
  26. //Obtenemos los datos de la consulta
  27. var dataSet:Array = mdm.Database.MSAccess.getData();
  28.  
  29. var datos:Object;
  30. var newItemsArray:Array = new Array();
  31.  
  32. for (var i = 0; i<dataset.length;i++){>
  33. datos = {};
  34. datos.ID = parseInt(dataSet[i][0]);
  35. datos.Nombre = dataSet[i][1];
  36. datos.Apellidos = dataSet[i][2];
  37. newItemsArray.push(datos);
  38. }
  39. theDataGrid.dataProvider = newItemsArray;
  40. }</dataset.length;i++){>
  41.  
  42. //FUNCION PARA MONTAR EL DATAGRID
  43. function layoutGUI():Void {
  44. // Montamos el encabezado del datagrid
  45. theDataGrid.setStyle("fontSize",10);
  46. theDataGrid.columnNames = [ "Nombre", "Apellidos"];
  47. theDataGrid.vScrollPolicy = "auto";
  48. var gridWidth:Number = theDataGrid.width;
  49.  
  50. theDataGrid.getColumnAt(0).width = 0.35*gridWidth;
  51. theDataGrid.getColumnAt(0).headerText = "Nombre:";
  52. theDataGrid.getColumnAt(1).width = 0.65*gridWidth;
  53. theDataGrid.getColumnAt(1).headerText = "Apellidos:";
  54. theDataGrid.setStyle("alternatingRowColors", [0xFFFFFF, 0xF9FCFD]);
  55. }
  56.  
  57. //Funcion para insertar un dato
  58. bot_insertar.onRelease=function(){
  59. if(nombre_txt.text==""){
  60. nombre_txt.text="Este campo no puede estar vacio";
  61. }else{
  62. mdm.Database.MSAccess.runQuery("INSERT INTO ejemplo_agenda (nombre,apellidos) VALUES ('"+nombre_txt.text+"','"+apellidos_txt.text+"')");
  63. consulta();
  64. nombre_txt.text="";
  65. apellidos_txt.text="";
  66. }
  67. }
  68. //Borrado de datos
  69. bot_borrar.onRelease=function(){
  70. LineaGrid = theDataGrid.selectedIndex;
  71. if(LineaGrid!=undefined){
  72. var sqlString:String = "DELETE FROM ejemplo_agenda where id="+theDataGrid.getItemAt(LineaGrid).ID;
  73. mdm.Database.MSAccess.runQuery(sqlString);
  74. consulta();
  75. }
  76. }
  77. layoutGUI();
  78. consulta(); //Obtenemos los datos de la bbdd
  79.  
  80. myDataGridListener = new Object();
  81. myDataGridListener.cellEdit = function(event){
  82. var sqlString:String = "UPDATE ejemplo_agenda set nombre='"+theDataGrid.getItemAt(event.itemIndex).Nombre+"', apellidos='"+theDataGrid.getItemAt(event.itemIndex).Apellidos+"' where id="+theDataGrid.getItemAt(event.itemIndex).ID;
  83. mdm.Database.MSAccess.runQuery(sqlString);
  84. consulta();
  85. }
  86. theDataGrid.addEventListener("cellEdit", myDataGridListener);
  87. stop();

Y aquí están los archivos del ejemplo. El .fla guardado para flash 8, el .swf, la base de datos de access y el ejecutable final compilado con el mdm zinc.

Tags: , , , ,