Ext JS に関しては,新しい記事は Sunvisor Lab. ExtJS 別館 にあります。そちらもよろしくお願いいたします。
ER図の論理名をコメントに設定する
投稿者:sunvisor 投稿日時:2008/05/31(土) 11:50
A5:SQLでER図の論理名をコメントに設定するスクリプトを書いてみました。スクリプトをツールフォルダに保存して,ツールメニューから実行するとSQLウィンドウにSQL文をはき出します。
// ER図の論理名をコメントに設定(&C) function isSQLServer(dbName){ var regini = new RegIni("Software\\mmatsubara\\A5M2"); var s = regini.read("DataSources",dbName,""); return (s.match(/Provider=SQLOLEDB.*/) || s.match(/Provider=SQLNCLI.*/)); } function delQuate(s){ var r = s.replace(/^"/i,""); r = r.replace(/"$/,""); r = r.replace(/""/g,'"'); return r; } function tableExists(cnn, sTable){ var tables = cnn.getTableList(); var exp = new RegExp(sTable,"i"); return tables.toString().match(exp); //return tables.indexOf(sTable) >= 0; } function fieldExists(cnn, sTable, sField){ if(tableExists(cnn, sTable)){ var fields = cnn.getTableColumnList(sTable); var fieldNames = new Array(fields.length); for(var i=0; i<fields.length; i++){ fieldNames[i] = fields[i].columnName; } writeln(fieldNames.toString()); var exp = new RegExp(sField,"i"); return fieldNames.toString().match(exp); }else{ return false; } } function setDescriptionMSSQL(cnn, sTable, sTDescription, sField, sFDescription){ var sCmdField, rs, sCmd, sDescription; if(isNull(sField)){ sCmdField = "NULL, NULL"; sDescription = sTDescription; }else{ sCmdField = "'COLUMN','"+sField+"'"; sDescription = sFDescription; } rs = cnn.executeQuery("select value from fn_listextendedproperty( 'MS_Description', 'SCHEMA', 'dbo', 'TABLE', '"+sTable+"', "+sCmdField+");"); sCmd = "N'MS_Description', N'"+sDescription+"', N'SCHEMA', N'dbo', N'TABLE', N'"+ sTable+"', "+sCmdField+";\n"; if(rs.eof()){ return "EXECUTE sp_addextendedproperty "+sCmd; }else{ return "EXECUTE sp_updateextendedproperty "+sCmd; } } function setDescriptionOra(cnn, sTable, sTDescription, sField, sFDescription){ if(isNull(sField)){ return "comment on table "+sTable+" is '"+sTDescription+"';\n"; }else{ return "comment on column "+sTable+"."+sField+" is '"+sFDescription+"';\n"; } } function setDescription(cnn, sSQL, sTable, sTDescription, sField, sFDescription){ var isComment; if(isNull(sField)){ if(sTDescription.length==0){ return sSQL; } isComment = !tableExists(cnn, sTable); }else{ if(sFDescription.length==0){ return sSQL; } isComment = !fieldExists(cnn, sTable, sField); } if(isComment){ sSQL = sSQL + '-- '; } var dbName = application.dbTree.getSelectedDatabaseName(); if(isSQLServer(dbName)){ return sSQL + setDescriptionMSSQL(cnn, sTable, sTDescription, sField, sFDescription); }else{ return sSQL + setDescriptionOra(cnn, sTable, sTDescription, sField, sFDescription); } } function SetLogicalName(){ var cnn = application.dbTree.getSelectedDatabaseConnection(); var dbName = application.dbTree.getSelectedDatabaseName(); var form = application.getActiveWindow(); var sSQL = ''; if(isUndefined(dbName)){ alert('更新対象のデータベースを選択してください'); return; } if(form.formType != 'A5EREditor'){ alert('ERエディタ上で実行してください'); return; } var s, A, inEntity=false, sTableP, sTableL, sField, aField; var sTableCmd, sFieldCmd; for(var I=0; I<form.source.Count; I++){ s = form.source[I]; if(s.match(/^\[.*\]$/)){ inEntity = s.match(/\[Entity\]/); } if(inEntity){ if(s.match(/PName=.*/)){ A = s.split(/=/); sTableP = A[1]; } if(s.match(/LName=.*/)){ A = s.split(/=/); sTableL = A[1]; sSQL = sSQL + "-- Table " + sTableP + "\n"; sSQL = setDescription(cnn, sSQL, sTableP, sTableL, null, null); } if(s.match(/Field=.*/)){ A = s.split(/=/); sField = A[1]; aField = sField.split(/,/); for(var J=0; J<aField.length; J++){ aField[J] = delQuate(aField[J]); } sSQL = setDescription(cnn, sSQL, sTableP, sTableL, aField[1], aField[0]); } } }//for var frmSQL = application.newSqlEditor(sSQL); //frmSQL.runSql(); //application.dbTree.reload(); } SetLogicalName();