- 浏览: 564602 次
-
博客专栏
-
-
开源视频会议bigblue...
浏览量:87336
文章分类
最新评论
-
qq632680822:
你好,请问第八条sql优化最佳实践中from 子句--执行顺序 ...
高效sql性能优化极简教程 -
tan_zheng:
大神 ,为什么我没有 bbb-conf --setup-dev ...
开源视频会议bigbluebutton开发(4)——构建开发环境,客户端开发 -
lixuejian:
6666666
过年了,让你的服务器提高警惕! -
tonney:
直播直播直播
直播技术视频教程分享 -
GYHui881204:
直播
直播技术视频教程分享
废话不多说,直接上代码讲解:
首先是对datagrid的管理界面,里面有增加,删除,修改,界面如下:
然后主页面名字:EditeBusPdGo.xml,代码如下:
点击增加,弹出AddBusLineRunTime.mxml,界面如下:
代码如下:
此页面又弹出添加AddShouMo.mxml,添加任意组首末站的界面:
代码如下:
再然后就是一个修改的页面:UpdateBusLineRunTm.mxml界面如下:
代码如下:
下面说下这其中的难点:
源代码,和后台webservice以及数据库文件在附件中,其中涉及到一个数据传输的问题,webservice可以传输可以序列化的数据类型,本demo中,是以xml的方式传输的,webservice,我用c#写的,首先就是连接数据库,这里使用的OLEDB连接的数据库:首先在web.config中加入如下字段:
然后连接数据库
由于是同时操作一对多的两张表,增删改,我们如何保证数据的一致性和完整性呢
先建立一个序列
每次插入,先从序列拿到值:
同时插入主表和附表就保证了主键的唯一性以及主表附表的数据的完整性
取得收据,后要生成xml,传给前台
前台到后台的xml的遍历:
oracle时间类型的处理:
关于oracle时间处理的详解:
ORACLE/JSP技术涉及日期、时间问题的处理
(1)在英文版本的ORACLE中默认日期格式为'DD-MON-YY',例如'01-JAN-98'
在汉化的中文版本中ORACLE默认日期格式为'日-月-年',例如'21-8月-2003'或'21-8月-03'
(2)转换字符串为日期
使用ORACLE内部函数to_date()
to_date()函数的参数是to_char()函数参数的反转。
to_date(string_value , date_format)
变量定义如下:
string_value :为字符串直接值(字符串本身)、字符串列(数据库中定义的某个表的某列)或某字符串内部函数的返回值。
date_format为合法的Oracle日期格式。
下列更新语句均符合ORACLE的日期格式,更新成功:
create table student (name varchar2(10) not null primary key , enrolldate date not null);//创建student表
insert into student values('mark',to_date('08-21-2003','MM-DD-YYYY'));
insert into student values('mark1',to_date('21-08-2003','DD-MM-YYYY'));
insert into student values('mark2','21-8月-2003');
insert into xiongxiaomin.student values('mark3','21-8月-03');
(3)转换日期为字符串
使用ORACLE内部函数to_char()
to_char(date_value,date_format)
变量定义如下:
date_value :为日期型直接值(日期本身)、日期型列值(数据库中定义的某个表的某列)或某内部函数的返回的日期型值。
date_format为合法的Oracle日期格式。
选择enrolldate字段的时间部分:
select (to_char(enrolldate,'HH24:MI:SS'))enrolldate from student;
(4)注意:ORACLE中的date数据类型定义的列包含日期和时间。
1、系统当前日期为2003年8月21日,之后执行下列语句
insert into student values('mark5',to_date('09:28:03','HH:MI:SS'));//注意此种在一条记录的date类型字段中插入时间的方法,系统默认的日期为系统当前日期所在月份的第一天,因此得到的记录为
Name enrolldate
mark5 01-八月 -2003 09:28:03 AM
2、修改系统当前日期为2003年7月21日,之后执行下列语句
insert into student values('mark6',to_date('09:28:03','HH:MI:SS'));
得到的记录为
Name enrolldate
mark6 01-七月 -2003 09:28:03 AM
insert into student values('mark8',to_date('20:28:03','HH24:MI:SS'));
3、同时在一条记录中插入日期和时间的方法
insert into student values('mark9',to_date('21-08-2003
20:28:03','DD-MM-YYYY HH24:MI:SS'));//同时在一条记录中插入日期和时间的方法
insert into student values('mark',to_date('21-08-2003
09:52:03','DD-MM-YYYY HH:MI:SS'));//同时在一条记录中插入日期和时间的方法
注意不能使用下列方法同时插入日期和时间
insert into student values('mark2','21-8月-2003'+to_date('
09:52:03','HH:MI:SS'));//无效插入记录方法
4、在SQL*Plus Worksheet中执行下列SQL语句
select * from student;
得到的记录结果如下:注意date类型字段中只显示了日期,时间并未显示
NAME ENROLLDATE
mark 18-8月 -03
mark1 21-8月 -03
mark2 21-8月 -03
已选择3行。
5、但在JSP程序中同样执行select * from student order by enrolldate
显示结果见下图(既显示了日期,又显示了时间)
JSP页面中的显示结果
6、在SQL*Plus Worksheet中执行下列SQL语句
select name,to_char(enrolldate,'DD-MM-YYYY HH:MI:SS') from student;
得到的记录结果如下:注意date类型字段中显示了日期和时间
NAME TO_CHAR(ENROLLDATE,'DD-MM-YYYYHH:MI:SS
mark 21-08-2003 12:00:00
mark1 21-08-2003 12:00:00
已选择2行
注意:5和6中的不同,时间到秒时,JSP页面中显示时多出了". 0"
7、在SQL*Plus Worksheet中执行下列SQL语句
select name,to_char(enrolldate,'DD-MM-YYYY HH24:MI:SS') from student;
得到的记录结果如下:注意date类型字段中显示了日期,时间
NAME TO_CHAR(ENROLLDATE,'DD-MM-YYYYHH24:MI:
mark 18-08-2003 17:40:20
mark1 21-08-2003 00:00:00
mark2 21-08-2003 00:00:00
已选择3行。
注意:6和7中的SELECT中的"HH:MI:SS"和"HH24:MI:SS"两者的不同是"HH"为小时制,值的范围为0-12;"HH24"为24小时制,值的范围为0-23。
看下列例子:
①insert into student values('南太里',to_date('08-19-2003
13:54:05','MM-DD-YYYY HH24:MI:SS'));
ORACLE中的记录结果为:
NAME enrolldate
南太里 19-八月 -2003 01:54:05 PM
②insert into student values('南太里2',to_date('08-19-2003
13:54:05','MM-DD-YYYY HH:MI:SS'));//插入错误
错误提示为:
insert into student values('南太里2',to_date('08-19-2003 13:54:05','MM-DD
*
ERROR 位于第 1 行:
ORA-01849: 小时值必须介于 1 和 12 之间
即应用"HH"时,不能应用"13:54:05",而应改为"01:54:05"
正确语句如下:
insert into student values('南太里2',to_date('08-19-2003
01:54:05','MM-DD-YYYY HH:MI:SS'));
ORACLE中的记录结果为:
NAME enrolldate
南太里2 19-八月 -2003 01:54:05 AM
注意上述两种方式得出的结果一种为PM,另一种为AM。
为了提高正确性,建议都是用地一种方式"HH24"
8、但在JSP程序中同样执行select name,to_char(enrolldate,'DD-MM-YYYY HH:MI:SS') from student
显示结果见下图。(其结果与在SQL*Plus Worksheet中执行下列SQL语句
select name,to_char(enrolldate,'DD-MM-YYYY HH:MI:SS') from student;相同)
9、在SQL*Plus Worksheet中执行下列SQL语句
select name,to_char(enrolldate,'month dd,yyyy HH24:MI:SS') from student;
得到的记录结果如下:注意date类型字段中显示了日期,时间
NAME TO_CHAR(ENROLLDATE,'MONTHDD,YYYYHH24:MI:SS')
mark 8月 18,2003 17:40:20
mark1 8月 21,2003 00:00:00
mark2 8月 21,2003 00:00:00
已选择3行。
10、to_char()函数,'DD-MM-YYYY'格式及'MM-DD-YYYY'格式和'month dd,yyyy'格式的不同
'DD-MM-YYYY'格式:21-08-2003
'month dd,yyyy'格式:8月 21,2003
11、注意:在日期和时间格式中非常容易混淆的是月份和秒的格式(即MM和MI)
在SQLPlus*Worksheet中执行下列语句,不报错。
insert into student values('王嘉',to_date('08:05','HH24:MM'));//08被认为是小时,05被认为是月份。
commit;
在表编辑器中查看:实际插入值为
NAME ENROLLDATE
王嘉 01-五月 -2003 08:00:00 AM
select name,to_char(enrolldate,'DD-MM-YYYY HH24:MI:SS')enrolldate from
student where name='王嘉';
NAME ENROLLDATE
王嘉 01-05-2003 08:00:00
已选择 1 行。
insert into student values('汪嘉2',to_date('08-19-2003
13:54:05','MM-DD-YYYY HH24:MI:SS'));
12、使用Oracle的date数据类型的另一个优点是:它支持日期的运算。可以对已经存在的
日期加上或减去若干天,例如:
insert into student values('熊',sysdate+7);
还有一个问题就是附表主键自增长问题,写一个序列和触发器:
序列:
触发器:
flex前端,xml转array:
array转xml
其他见附件
首先是对datagrid的管理界面,里面有增加,删除,修改,界面如下:

然后主页面名字:EditeBusPdGo.xml,代码如下:
<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" creationComplete="init()"> <fx:Declarations> <!-- 将非可视元素(例如服务、值对象)放在此处 --> </fx:Declarations> <fx:Script> <![CDATA[ import mx.collections.ArrayCollection; import mx.collections.ArrayList; import mx.controls.Alert; import mx.controls.DataGrid; import mx.controls.dataGridClasses.DataGridColumn; import mx.events.CloseEvent; import mx.events.ListEvent; import mx.formatters.DateFormatter; import mx.managers.PopUpManager; import mx.rpc.events.ResultEvent; import mx.rpc.soap.WebService; public var dgDataArr:Array; private static var dateFormatter:DateFormatter = new DateFormatter(); // private var formatString:String="YYYY-MM-DD"; [Bindable] private var notes:ArrayCollection ; private var addNoteScreen:AddBusLineRunTime; private var UpdateNoteScreen:UpdateBusLineRunTm; private var WebServiceUrl:String="http://localhost:10635/AnalysisRdBl/AnalysisBL.asmx?wsdl"; private var setBusName:String="99路"; private var setTime:String="2012-12-02"; private function init():void{ runTimeTable.text=setBusName+"行车计划时刻表"; doTime.text="实施日期: "+setTime; getdata(); addNoteScreen = new AddBusLineRunTime(); addNoteScreen.addEventListener("SaveNote", saveNote); UpdateNoteScreen=new UpdateBusLineRunTm(); UpdateNoteScreen.addEventListener("SaveNote",update); } private function update(e:Event):void { var ob:Object=new Object(); ob.线路名=setBusName; ob.路牌名=UpdateNoteScreen.lupai.text; ob.圈=UpdateNoteScreen.quan.text; ob.实施时间=setTime; ob.报到=UpdateNoteScreen.baodao.text; ob.工时=UpdateNoteScreen.gongshi.text; ob.出场=UpdateNoteScreen.chuchang.text; ob.离场=UpdateNoteScreen.lichang.text; var updatenotes:ArrayCollection= new ArrayCollection(); updatenotes.addItem(ob); var temparr:ArrayCollection=new ArrayCollection(); temparr=UpdateNoteScreen.notes; var xx:XML=TWOarrToXml(updatenotes,temparr); var xxString:String=xx.toXMLString(); //trace(xx.toXMLString()); var ws1:WebService = new WebService(); ws1.loadWSDL(WebServiceUrl); ws1.updateTable.addEventListener(ResultEvent.RESULT, resultUpdateData); ws1.updateTable.send(updateO,xxString); PopUpManager.removePopUp(UpdateNoteScreen); } private function resultUpdateData(e:ResultEvent):void { getdata(); if(e.result as String=="success") { Alert.show("更新成功!"); } else { Alert.show("更新失败!"); } } private function getdata():void { var ws1:WebService = new WebService(); ws1.loadWSDL(WebServiceUrl); ws1.GetBusRunTimeList.addEventListener(ResultEvent.RESULT, resultGetData); ws1.GetBusRunTimeList.send(setBusName,setTime); } public var ObObArr:Array; private function refreshObOb():void { ObObArr=new Array(); for(var i:int=0;i<dgDataArr.length;i++) { var LuLU:String=dgDataArr[i]["路牌名"].toString(); ObObArr.push(LuLU); } } private function resultGetData(e:ResultEvent):void{ if(e.result as String=="noData") { Alert.show("您好,本线路下面还没有具体线路信息,请添加","没有信息!") } else{ var returnValue:XMLList=XML(e.result).children(); //ShowRunTimeTable.dataProvider=xmlListToArray(returnValue); dgDataArr=new Array(); dgDataArr=xmlListToArray(returnValue); refreshObOb(); // for(var i:int=0;i<dgDataArr.length;i++) // { // var LuLU:String=dgDataArr[i]["路牌名"].toString(); // trace(LuLU); // ObObArr.push(LuLU); // // // } //deleteArr=xmlListToArray(returnValue); showTableInit(); } } private function xmlListToArray(results:XMLList):Array { var array:Array=new Array(); for each(var child:XML in results) { var obj:Object=new Object(); //obj[child.nodeKind()]=child[child.nodeKind()]; for each(var ite:XML in child.children()) { obj[ite.name().toString()]=child[ite.name().toString()]; } //array.addItem(obj); array.push(obj); } return array; } private function getArraylistFromXMLList(data:XMLList):Array { var al:Array=new Array(); for(var i:int=0;i<data.length();i++) { var obj:Object=new Object(); for(var j:int=0;j<data[i].children().length();j++) { var dataColoum:String=data[i].children()[j].localName(); obj[dataColoum]=data[i].children()[j].toString(); } al.addItem(obj); } return al; } //public var deleteArr:Array=new Array(); //public var xxfc:Function; private function showCol():Array { var arr:Array=new Array(); var dataNum:int=dgDataArr[0]["站长"]; //trace(dataNum.toString()); //trace(dgDataArr[0]["OBJECTID"]); var shouzhan:String="首站"; var mozhan:String="末站"; for(var i:int=1;i<=dataNum;i++) { var temp1:String=shouzhan+i.toString(); var temp2:String=mozhan+i.toString(); arr.push(temp1); arr.push(temp2); } return arr; } // private function upArray(ii:int):void // { // var dataNum:int=dgDataArr[ii]["此长"]; // //trace(dataNum.toString()); // // // //trace(dgDataArr[0]["OBJECTID"]); // var shouzhan:String="首站"; // var mozhan:String="末站"; // // for(var i:int=1;i<=dataNum;i++) // { // var temp1:String=shouzhan+i.toString(); // var temp2:String=mozhan+i.toString(); // arr.push(temp1); // arr.push(temp2); // // } // // // // } //public var upArr:Array=new Array(); public var dataGrid:DataGrid; private var busNam:String="99路"; private function showTableInit():void { var dgData:ArrayCollection = new ArrayCollection(dgDataArr); dataGrid = new DataGrid(); dataGrid.horizontalScrollPolicy = "on"; dataGrid.x = 10; dataGrid.y = 20; //dataGrid.editable = true; dataGrid.percentWidth = 100; dataGrid.percentHeight=90; dataGrid.setStyle("fontSize", 14); dataGrid.styleName dataGrid.dataProvider = dgData; //dataGrid.addEventListener(ListEvent.ITEM_CLICK, itemClickHandler); showDT.removeAllElements(); showDT.addElement(dataGrid); var columns:Array = new Array(); var col:DataGridColumn; var buslineName1:String=dgDataArr[0]["线路名"]; //busNam=buslineName1; var time:String=dgDataArr[0]["实施时间"]; var lupaicol:DataGridColumn=new DataGridColumn(); lupaicol.headerText="路牌"; lupaicol.dataField="路牌名"; columns.push(lupaicol); var baodaocol:DataGridColumn=new DataGridColumn(); baodaocol.headerText="报到"; baodaocol.dataField="报到"; columns.push(baodaocol); var chuchangcol:DataGridColumn=new DataGridColumn(); chuchangcol.headerText="出场"; chuchangcol.dataField="出场"; columns.push(chuchangcol); var arr:Array= showCol(); for(var i:int=1;i<=arr.length;i++) { var d:String=arr[i-1]; if(i%2==0) { col = new DataGridColumn(d); col.headerText="末站"; columns.push(col); } else{ col = new DataGridColumn(d); col.headerText="首站"; columns.push(col); } } var lichangcol:DataGridColumn=new DataGridColumn(); lichangcol.headerText="离场"; lichangcol.dataField="离场"; columns.push(lichangcol); var gongshicol:DataGridColumn=new DataGridColumn(); gongshicol.headerText="工时"; gongshicol.dataField="工时"; columns.push(gongshicol); var quancol:DataGridColumn=new DataGridColumn(); quancol.headerText="圈"; quancol.dataField="圈"; columns.push(quancol); dataGrid.columns=columns; } private function itemClickHandler(e:ListEvent):void { trace(e.target); } private function addNote():void { PopUpManager.addPopUp(addNoteScreen, this, true); PopUpManager.centerPopUp(addNoteScreen); addNoteScreen.ObObArr=ObObArr; //addNoteScreen.author.text = ""; //addNoteScreen.topic.text = ""; //addNoteScreen.description.text = ""; } private function close():void { PopUpManager.removePopUp(this); } private function arrToXml(arr:ArrayCollection):XML{ var root:XML = new XML("<result/>"); for(var i:int = 0;i<arr.length;i++){ var node:XML = new XML("<item/>"); node.线路名=arr[i].线路名; node.路牌名=arr[i].路牌名; node.圈=arr[i].圈; node.实施时间=arr[i].实施时间; node.报到=arr[i].报到; node.工时=arr[i].工时; node.出场=arr[i].出场; node.离场=arr[i].离场; root.appendChild(node); } return root; } private function TWOarrToXml(arr:ArrayCollection,arr2:ArrayCollection):XML{ var root:XML = new XML("<result/>"); for(var i:int = 0;i<arr.length;i++){ var node:XML = new XML("<item/>"); node.线路名=arr[i].线路名; node.路牌名=arr[i].路牌名; node.圈=arr[i].圈; node.实施时间=arr[i].实施时间; node.报到=arr[i].报到; node.工时=arr[i].工时; node.出场=arr[i].出场; node.离场=arr[i].离场; for(var j:int=0;j<arr2.length;j++) { var shou:String="首站"+(j+1); var mo:String="末站"+(j+1); node[shou]=arr2[j].首站; node[mo]=arr2[j].末站; } root.appendChild(node); } return root; } public var xxString:String; private function saveNote(e:Event):void { var ob:Object=new Object(); ob.线路名=setBusName; ob.路牌名=addNoteScreen.lupai.text; ob.圈=addNoteScreen.quan.text; ob.实施时间=setTime; ob.报到=addNoteScreen.baodao.text; ob.工时=addNoteScreen.gongshi.text; ob.出场=addNoteScreen.chuchang.text; ob.离场=addNoteScreen.lichang.text; notes= new ArrayCollection(); notes.addItem(ob); var temparr:ArrayCollection=new ArrayCollection(); temparr=addNoteScreen.notes; var xx:XML=TWOarrToXml(notes,temparr); var ws1:WebService = new WebService(); ws1.loadWSDL(WebServiceUrl); ws1.insertTable.addEventListener(ResultEvent.RESULT, resultInsert); //ws1.insertTable.send(xxString); //xxString="<result><item><线路名>640路</线路名><路牌名>88</路牌名><圈>88</圈> <实施时间>2012-06-10</实施时间><报到>88</报到><工时>88</工时> <出场>88</出场> <离场>88</离场> <首站1>765</首站1><末站1>654</末站1> <首站2>543</首站2><末站2>432</末站2><首站3>321</首站3><末站3>210</末站3></item></result>"; //ws.GetBusRunTimeList.send(); xxString=xx.toXMLString(); //trace(xxString); ws1.insertTable.send(xxString); //trace(xxString); // trace(notes.toString()); //trace(arr1.toString()); //trace(arr2.toString()); PopUpManager.removePopUp(addNoteScreen); //var upadteString:String= } private function resultInsert(e:ResultEvent):void{ var sh:String=String(e.result); getdata(); if(sh=="success") { Alert.show("插入成功!","成功"); } else { Alert.show("插入失败!","失败"); } } private function deletePiece(event:CloseEvent):void{ if (event.detail==Alert.YES){ if (dataGrid.selectedItems == null) return; var index:int=0; var seledIndexs:int=dataGrid.selectedIndex; //for (var i:int=0; i < seledIndexs.length; i++) //{ //index=seledIndexs[i]; //dgDataArr[0]["线路名"] //var id:Number=xxfc(seledIndexs) as Number; //trace(xxfc(seledIndexs)); var s:String=(dgDataArr[seledIndexs]["OBJECTID"].toString()); //delete(dgDataArr[seledIndexs]); //notes.removeItemAt(seledIndexs); var deletewsl:WebService=new WebService(); deletewsl.loadWSDL(WebServiceUrl); deletewsl.deleteData.addEventListener(ResultEvent.RESULT, resultDelete); deletewsl.deleteData.send(s); delete(dgDataArr[seledIndexs]); //ObObArr.splice(0,ObObArr.length); //refreshObOb(); //delete(ObObArr[seledIndexs]); } } private function resultDelete(e:ResultEvent):void { var sh:String=String(e.result); getdata(); if(sh=="success") { Alert.show("删除成功!","成功"); } else { Alert.show("删除失败!","失败"); } } private var updateO:String; private function updatePiece():void{ UpdateNoteScreen.ObObArr=ObObArr; UpdateNoteScreen.oldLupai=dgDataArr[seledIndexs]["路牌名"].toString(); updateO=dgDataArr[seledIndexs]["OBJECTID"].toString(); PopUpManager.addPopUp(UpdateNoteScreen, this, true); PopUpManager.centerPopUp(UpdateNoteScreen); if (dataGrid.selectedItems == null) return; var index:int=0; var seledIndexs:int=dataGrid.selectedIndex; UpdateNoteScreen.lupai.text=dgDataArr[seledIndexs]["路牌名"].toString(); UpdateNoteScreen.baodao.text=dgDataArr[seledIndexs]["报到"].toString(); UpdateNoteScreen.chuchang.text=dgDataArr[seledIndexs]["出场"].toString(); UpdateNoteScreen.lichang.text=dgDataArr[seledIndexs]["离场"].toString(); UpdateNoteScreen.gongshi.text=dgDataArr[seledIndexs]["工时"].toString(); UpdateNoteScreen.quan.text=dgDataArr[seledIndexs]["圈"].toString(); //UpdateNoteScreen.time.text=dgDataArr[seledIndexs]["实施时间"].toString(); var notes:ArrayCollection=new ArrayCollection(); //trace(dgDataArr[seledIndexs]["此长"].toString()); var len:int=int(dgDataArr[seledIndexs]["此长"].toString()); //trace(len.toString()); for(var i:int=1;i<=len;i++) { var sh:String="首站"+i; var mo:String="末站"+i; var ob:Object=new Object(); //trace(sh); //trace(dgDataArr[seledIndexs][sh].toString()); ob.首站=dgDataArr[seledIndexs][sh].toString(); ob.末站=dgDataArr[seledIndexs][mo].toString(); //note.author = addNoteScreen.author.text; //note.topic = addNoteScreen.topic.text; //note.description = addNoteScreen.description.text; notes.addItem(ob); //trace(notes.length.toString()); //UpdateNoteScreen.shoumo.dataProvider=notes; UpdateNoteScreen.notes=notes; UpdateNoteScreen.shoumo.dataProvider=UpdateNoteScreen.notes; } } private function deleteAsk():void { Alert.show("确定删除?","系统提示",(1|2),this,deletePiece); } ]]> </fx:Script> <!-- <s:Button x="156" y="114" label="显示数据" click="getdata()"/> <s:DataGrid id="showData" x="525" y="128" requestedRowCount="4"> </s:DataGrid> <s:DataGrid id="xx" x="301" y="114" requestedRowCount="4"> <s:columns> <s:ArrayList> <s:GridColumn dataField="OBJECTID" headerText="列 1"></s:GridColumn> </s:ArrayList> </s:columns> </s:DataGrid> --> <s:Panel title="公交时刻行车计划表" width="100%" height="100%"> <s:VGroup x="0" y="0" width="100%" height="100%" gap="0" horizontalAlign="left" verticalAlign="top"> <s:HGroup width="100%" height="29"> <s:Group width="100%" height="30"> <s:Label id="companyName" x="19" y="10" text="公司名称:杨高公交"/> <s:Label id="runTimeTable" x="374" y="10" text="行车时刻计划表"/> <s:Label id="doTime" x="739" y="11" text="实施日期:"/> <!--<s:Button x="159" y="10" label="按钮" click="getdata()"/>--> </s:Group> </s:HGroup> <s:HGroup width="100%" height="27"> <s:Button label="增加" click="addNote()"/> <s:Button label="删除" click="deleteAsk()"/> <s:Button label="修改" click="updatePiece()"/> </s:HGroup> <s:VGroup width="100%" id="showDT" height="90%"> </s:VGroup> </s:VGroup> </s:Panel> </s:Application>
点击增加,弹出AddBusLineRunTime.mxml,界面如下:

代码如下:
<?xml version="1.0" encoding="utf-8"?> <mx:TitleWindow xmlns:mx="library://ns.adobe.com/flex/mx" xmlns:fx="http://ns.adobe.com/mxml/2009" layout="absolute" width="498" height="598" title="增加一条数据" xmlns:s="library://ns.adobe.com/flex/spark" creationComplete="init()"> <fx:Script> <![CDATA[ import mx.collections.ArrayCollection; import mx.controls.Alert; import mx.managers.PopUpManager; // [Bindable] public var notes:ArrayCollection=new ArrayCollection(); public var ObObArr:Array=new Array(); private var addNoteScreen:AddShouMo; private var WebServiceUrl:String="http://localhost:8081/AnalysisBL.asmx?wsdl"; private function close():void { PopUpManager.removePopUp(this); } private function save():void{ // for(var i:int=0;i<ObObArr.length;i++) // { // // trace(ObObArr[i].toString()); // } if(ObObArr.indexOf(lupai.text.toString())==-1) { this.dispatchEvent(new Event("SaveNote")); } else { Alert.show("已经存在该路牌名!请重新输入!"); } } private function init():void{ addNoteScreen = new AddShouMo(); addNoteScreen.addEventListener("SaveShouMo", SaveShouMo); } private function add():void{ PopUpManager.addPopUp(addNoteScreen, this, true); PopUpManager.centerPopUp(addNoteScreen); //addNoteScreen.author.text = ""; //addNoteScreen.topic.text = ""; //addNoteScreen.description.text = ""; } private function SaveShouMo(e:Event):void { // notes= // if(notes.length!=0) // { // notes.removeAll(); // } //var note:Note = new Note(); var ob:Object=new Object(); ob.首站=addNoteScreen.shouzhan.text; ob.末站=addNoteScreen.mozhan.text; //note.author = addNoteScreen.author.text; //note.topic = addNoteScreen.topic.text; //note.description = addNoteScreen.description.text; notes.addItem(ob); PopUpManager.removePopUp(addNoteScreen); shoumo.dataProvider=notes; } private function shanchu():void{ if (shoumo.selectedItems == null) return; var index:int=0; var seledIndexs:int=shoumo.selectedIndex; //for (var i:int=0; i < seledIndexs.length; i++) //{ //index=seledIndexs[i]; notes.removeItemAt(seledIndexs); //} } ]]> </fx:Script> <fx:Metadata> [Event(name="SaveNote")] </fx:Metadata> <mx:Label x="35" y="10" text="路牌"/> <mx:TextInput id="lupai" width="150" x="84" y="8"/> <mx:Label text="报到" y="36" x="35"/> <mx:TextInput id="baodao" width="150" x="84" y="34"/> <mx:Button label="取消" x="233" y="490" click="close()"/> <mx:Button label="保存" x="344" y="490" click="save()"/> <s:Label x="37" y="75" text="出场"/> <s:TextInput id="chuchang" x="84" y="65" width="150"/> <s:Label x="37" y="110" text="离场"/> <s:Label x="37" y="147" text="工时"/> <s:Label x="43" y="185" text="圈"/> <s:TextInput id="lichang" x="84" y="100" width="150"/> <s:TextInput id="gongshi" x="84" y="137" width="150"/> <s:TextInput id="quan" x="84" y="175" width="150"/> <s:DataGrid x="84" y="234" width="148" height="234" requestedRowCount="4" id="shoumo"> <s:columns> <s:ArrayList> <s:GridColumn dataField="首站" headerText="首站"></s:GridColumn> <s:GridColumn dataField="末站" headerText="末站"></s:GridColumn> </s:ArrayList> </s:columns> </s:DataGrid> <s:Button x="84" y="205" label="增加" click="add()"/> <s:Button x="162" y="205" label="删除" click="shanchu()"/> </mx:TitleWindow>
此页面又弹出添加AddShouMo.mxml,添加任意组首末站的界面:

代码如下:
<?xml version="1.0" encoding="utf-8"?> <mx:TitleWindow xmlns:mx="library://ns.adobe.com/flex/mx" xmlns:fx="http://ns.adobe.com/mxml/2009" layout="absolute" width="348" height="138" title="增加首末站"> <fx:Script> <![CDATA[ import mx.managers.PopUpManager; private function close():void { PopUpManager.removePopUp(this); } private function save():void{ this.dispatchEvent(new Event("SaveShouMo")); } ]]> </fx:Script> <fx:Metadata> [Event(name="SaveShouMo")] </fx:Metadata> <mx:Label text="首站" x="35" y="10"/> <mx:TextInput id="shouzhan" width="150" x="84" y="8"/> <mx:Label text="末站" y="36" x="35"/> <mx:TextInput id="mozhan" width="150" x="84" y="34"/> <mx:Button label="取消" x="154" y="69" click="close()"/> <mx:Button label="保存" x="257" y="68" click="save()"/> </mx:TitleWindow>
再然后就是一个修改的页面:UpdateBusLineRunTm.mxml界面如下:

代码如下:
<?xml version="1.0" encoding="utf-8"?> <mx:TitleWindow xmlns:mx="library://ns.adobe.com/flex/mx" xmlns:fx="http://ns.adobe.com/mxml/2009" layout="absolute" width="498" height="598" title="增加一条数据" xmlns:s="library://ns.adobe.com/flex/spark" creationComplete="init()"> <fx:Script> <![CDATA[ import mx.collections.ArrayCollection; import mx.controls.Alert; import mx.managers.PopUpManager; [Bindable] public var notes:ArrayCollection=new ArrayCollection(); public var ObObArr:Array=new Array(); private var addNoteScreen:AddShouMo; public var oldLupai:String; private function close():void { PopUpManager.removePopUp(this); } private function save():void{ if(lupai.text.toString()==oldLupai) { this.dispatchEvent(new Event("SaveNote")); } if(ObObArr.indexOf(lupai.text.toString())==-1) { this.dispatchEvent(new Event("SaveNote")); } else { Alert.show("已经存在该路牌名!请重新输入!"); } } private function init():void{ addNoteScreen = new AddShouMo(); addNoteScreen.addEventListener("SaveShouMo", SaveShouMo); //shoumo.dataProvider=notes; } private function add():void{ PopUpManager.addPopUp(addNoteScreen, this, true); PopUpManager.centerPopUp(addNoteScreen); //addNoteScreen.author.text = ""; //addNoteScreen.topic.text = ""; //addNoteScreen.description.text = ""; } private function SaveShouMo(e:Event):void { // notes= // if(notes.length!=0) // { // notes.removeAll(); // } //var note:Note = new Note(); var ob:Object=new Object(); ob.首站=addNoteScreen.shouzhan.text; ob.末站=addNoteScreen.mozhan.text; //note.author = addNoteScreen.author.text; //note.topic = addNoteScreen.topic.text; //note.description = addNoteScreen.description.text; notes.addItem(ob); PopUpManager.removePopUp(addNoteScreen); // shoumo.dataProvider=notes; } private function shanchu():void{ if (shoumo.selectedItems == null) return; var index:int=0; var seledIndexs:int=shoumo.selectedIndex; //for (var i:int=0; i < seledIndexs.length; i++) //{ //index=seledIndexs[i]; notes.removeItemAt(seledIndexs); //} } ]]> </fx:Script> <fx:Metadata> [Event(name="SaveNote")] </fx:Metadata> <mx:Label x="35" y="10" text="路牌"/> <mx:TextInput id="lupai" width="150" x="84" y="8"/> <mx:Label text="报到" y="36" x="35"/> <mx:TextInput id="baodao" width="150" x="84" y="34"/> <mx:Button label="取消" x="209" y="539" click="close()"/> <mx:Button label="保存" x="291" y="539" click="save()"/> <s:Label x="37" y="75" text="出场"/> <s:TextInput id="chuchang" x="84" y="65" width="150"/> <s:Label x="37" y="110" text="离场"/> <s:Label x="37" y="147" text="工时"/> <s:Label x="43" y="185" text="圈"/> <s:TextInput id="lichang" x="84" y="100" width="150"/> <s:TextInput id="gongshi" x="84" y="137" width="150"/> <s:TextInput id="quan" x="84" y="175" width="150"/> <s:DataGrid x="81" y="258" width="148" height="234" requestedRowCount="4" id="shoumo" > <s:columns> <s:ArrayList> <s:GridColumn dataField="首站" headerText="首站"></s:GridColumn> <s:GridColumn dataField="末站" headerText="末站"></s:GridColumn> </s:ArrayList> </s:columns> </s:DataGrid> <s:Button x="81" y="215" label="增加" click="add()"/> <s:Button x="164" y="215" label="删除" click="shanchu()"/> </mx:TitleWindow>
下面说下这其中的难点:
源代码,和后台webservice以及数据库文件在附件中,其中涉及到一个数据传输的问题,webservice可以传输可以序列化的数据类型,本demo中,是以xml的方式传输的,webservice,我用c#写的,首先就是连接数据库,这里使用的OLEDB连接的数据库:首先在web.config中加入如下字段:
<appSettings> <add key="oracleconnection" value="Provider=MSDAORA;Persist Security Info=true;User ID=pdjt;password=pdjt;Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=xxxxxxxxxxxxxxxxxxooooooooooooooooooo)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=orcl)))"/> <add key="SDEServer" value="xxxxxxxxxxxxxxxxxxooooooooooooooooooo"/> <add key="SDEInstance" value="5151"/> <add key="SDEUser" value="pdjt"/> <add key="SDEPwd" value="pdjt"/> <add key="SDEDatabase" value="ORCL"/> <add key="SDEVersion" value="SDE.DEFAULT"/> <add key="bufferDistance" value="5"/> <add key="filterDistance" value="10"/> </appSettings>
然后连接数据库
//连接并打开数据库 string connString = System.Configuration.ConfigurationManager.AppSettings["oracleconnection"]; OleDbConnection conn = new OleDbConnection(connString); conn.Open();
由于是同时操作一对多的两张表,增删改,我们如何保证数据的一致性和完整性呢
先建立一个序列
CREATE SEQUENCE "PDJT"."NewSequence" INCREMENT BY 1 MINVALUE 1 MAXVALUE 2147483647 START WITH 161 CACHE 20; GRANT SELECT, ALTER ON "PDJT"."NewSequence" TO PUBLIC;
每次插入,先从序列拿到值:
string sql = "Select YZN001.nextval from dual"; OleDbCommand commsql = new OleDbCommand(sql, conn); double OBJECTID=Convert.ToDouble(commsql.ExecuteScalar()) ;
同时插入主表和附表就保证了主键的唯一性以及主表附表的数据的完整性
取得收据,后要生成xml,传给前台
XmlDocument doc = new XmlDocument(); doc.AppendChild(doc.CreateElement("result")); XmlElement item = doc.CreateElement("item"); XmlElement nodeZhanZhang = doc.CreateElement("站长"); nodeZhanZhang.InnerText = maxIN.ToString(); item.AppendChild(nodeZhanZhang); XmlElement nodeCiChang = doc.CreateElement("此长"); nodeCiChang.InnerText = tbl.Rows.Count.ToString(); item.AppendChild(nodeCiChang); .........doc.LastChild.AppendChild(item); return doc.InnerXml;
前台到后台的xml的遍历:
XmlDocument doc = new XmlDocument(); doc.LoadXml(xmlString); ArrayList headersubList = new ArrayList(); //获取当前XML文档的根 一级 XmlNode oNode = doc.DocumentElement; //获取根节点的所有子节点列表 XmlNodeList oList = oNode.ChildNodes; //标记当前节点 XmlNode oCurrentNode; //遍历所有二级节点 for (int i = 0; i < oList.Count; i++) { //二级 oCurrentNode = oList[i]; // 线路名 = oList[i].Value; //检测当前节点的名称,节点的值是否与已知匹配 if (oCurrentNode.Name.ToLower().Equals("item")) { //检测是否有子节点 三级 if (oCurrentNode.HasChildNodes) { //Console.WriteLine(oCurrentNode.ChildNodes.Count); //遍历当前节点的所有子节点 for (int n = 0; n < oCurrentNode.ChildNodes.Count; n++) {,
oracle时间类型的处理:
public string 实施时间 = "2012-06-05"; to_date('" + 实施时间 + "','yyyy-mm-dd'));
关于oracle时间处理的详解:
ORACLE/JSP技术涉及日期、时间问题的处理
(1)在英文版本的ORACLE中默认日期格式为'DD-MON-YY',例如'01-JAN-98'
在汉化的中文版本中ORACLE默认日期格式为'日-月-年',例如'21-8月-2003'或'21-8月-03'
(2)转换字符串为日期
使用ORACLE内部函数to_date()
to_date()函数的参数是to_char()函数参数的反转。
to_date(string_value , date_format)
变量定义如下:
string_value :为字符串直接值(字符串本身)、字符串列(数据库中定义的某个表的某列)或某字符串内部函数的返回值。
date_format为合法的Oracle日期格式。
下列更新语句均符合ORACLE的日期格式,更新成功:
create table student (name varchar2(10) not null primary key , enrolldate date not null);//创建student表
insert into student values('mark',to_date('08-21-2003','MM-DD-YYYY'));
insert into student values('mark1',to_date('21-08-2003','DD-MM-YYYY'));
insert into student values('mark2','21-8月-2003');
insert into xiongxiaomin.student values('mark3','21-8月-03');
(3)转换日期为字符串
使用ORACLE内部函数to_char()
to_char(date_value,date_format)
变量定义如下:
date_value :为日期型直接值(日期本身)、日期型列值(数据库中定义的某个表的某列)或某内部函数的返回的日期型值。
date_format为合法的Oracle日期格式。
选择enrolldate字段的时间部分:
select (to_char(enrolldate,'HH24:MI:SS'))enrolldate from student;
(4)注意:ORACLE中的date数据类型定义的列包含日期和时间。
1、系统当前日期为2003年8月21日,之后执行下列语句
insert into student values('mark5',to_date('09:28:03','HH:MI:SS'));//注意此种在一条记录的date类型字段中插入时间的方法,系统默认的日期为系统当前日期所在月份的第一天,因此得到的记录为
Name enrolldate
mark5 01-八月 -2003 09:28:03 AM
2、修改系统当前日期为2003年7月21日,之后执行下列语句
insert into student values('mark6',to_date('09:28:03','HH:MI:SS'));
得到的记录为
Name enrolldate
mark6 01-七月 -2003 09:28:03 AM
insert into student values('mark8',to_date('20:28:03','HH24:MI:SS'));
3、同时在一条记录中插入日期和时间的方法
insert into student values('mark9',to_date('21-08-2003
20:28:03','DD-MM-YYYY HH24:MI:SS'));//同时在一条记录中插入日期和时间的方法
insert into student values('mark',to_date('21-08-2003
09:52:03','DD-MM-YYYY HH:MI:SS'));//同时在一条记录中插入日期和时间的方法
注意不能使用下列方法同时插入日期和时间
insert into student values('mark2','21-8月-2003'+to_date('
09:52:03','HH:MI:SS'));//无效插入记录方法
4、在SQL*Plus Worksheet中执行下列SQL语句
select * from student;
得到的记录结果如下:注意date类型字段中只显示了日期,时间并未显示
NAME ENROLLDATE
mark 18-8月 -03
mark1 21-8月 -03
mark2 21-8月 -03
已选择3行。
5、但在JSP程序中同样执行select * from student order by enrolldate
显示结果见下图(既显示了日期,又显示了时间)
JSP页面中的显示结果
6、在SQL*Plus Worksheet中执行下列SQL语句
select name,to_char(enrolldate,'DD-MM-YYYY HH:MI:SS') from student;
得到的记录结果如下:注意date类型字段中显示了日期和时间
NAME TO_CHAR(ENROLLDATE,'DD-MM-YYYYHH:MI:SS
mark 21-08-2003 12:00:00
mark1 21-08-2003 12:00:00
已选择2行
注意:5和6中的不同,时间到秒时,JSP页面中显示时多出了". 0"
7、在SQL*Plus Worksheet中执行下列SQL语句
select name,to_char(enrolldate,'DD-MM-YYYY HH24:MI:SS') from student;
得到的记录结果如下:注意date类型字段中显示了日期,时间
NAME TO_CHAR(ENROLLDATE,'DD-MM-YYYYHH24:MI:
mark 18-08-2003 17:40:20
mark1 21-08-2003 00:00:00
mark2 21-08-2003 00:00:00
已选择3行。
注意:6和7中的SELECT中的"HH:MI:SS"和"HH24:MI:SS"两者的不同是"HH"为小时制,值的范围为0-12;"HH24"为24小时制,值的范围为0-23。
看下列例子:
①insert into student values('南太里',to_date('08-19-2003
13:54:05','MM-DD-YYYY HH24:MI:SS'));
ORACLE中的记录结果为:
NAME enrolldate
南太里 19-八月 -2003 01:54:05 PM
②insert into student values('南太里2',to_date('08-19-2003
13:54:05','MM-DD-YYYY HH:MI:SS'));//插入错误
错误提示为:
insert into student values('南太里2',to_date('08-19-2003 13:54:05','MM-DD
*
ERROR 位于第 1 行:
ORA-01849: 小时值必须介于 1 和 12 之间
即应用"HH"时,不能应用"13:54:05",而应改为"01:54:05"
正确语句如下:
insert into student values('南太里2',to_date('08-19-2003
01:54:05','MM-DD-YYYY HH:MI:SS'));
ORACLE中的记录结果为:
NAME enrolldate
南太里2 19-八月 -2003 01:54:05 AM
注意上述两种方式得出的结果一种为PM,另一种为AM。
为了提高正确性,建议都是用地一种方式"HH24"
8、但在JSP程序中同样执行select name,to_char(enrolldate,'DD-MM-YYYY HH:MI:SS') from student
显示结果见下图。(其结果与在SQL*Plus Worksheet中执行下列SQL语句
select name,to_char(enrolldate,'DD-MM-YYYY HH:MI:SS') from student;相同)
9、在SQL*Plus Worksheet中执行下列SQL语句
select name,to_char(enrolldate,'month dd,yyyy HH24:MI:SS') from student;
得到的记录结果如下:注意date类型字段中显示了日期,时间
NAME TO_CHAR(ENROLLDATE,'MONTHDD,YYYYHH24:MI:SS')
mark 8月 18,2003 17:40:20
mark1 8月 21,2003 00:00:00
mark2 8月 21,2003 00:00:00
已选择3行。
10、to_char()函数,'DD-MM-YYYY'格式及'MM-DD-YYYY'格式和'month dd,yyyy'格式的不同
'DD-MM-YYYY'格式:21-08-2003
'month dd,yyyy'格式:8月 21,2003
11、注意:在日期和时间格式中非常容易混淆的是月份和秒的格式(即MM和MI)
在SQLPlus*Worksheet中执行下列语句,不报错。
insert into student values('王嘉',to_date('08:05','HH24:MM'));//08被认为是小时,05被认为是月份。
commit;
在表编辑器中查看:实际插入值为
NAME ENROLLDATE
王嘉 01-五月 -2003 08:00:00 AM
select name,to_char(enrolldate,'DD-MM-YYYY HH24:MI:SS')enrolldate from
student where name='王嘉';
NAME ENROLLDATE
王嘉 01-05-2003 08:00:00
已选择 1 行。
insert into student values('汪嘉2',to_date('08-19-2003
13:54:05','MM-DD-YYYY HH24:MI:SS'));
12、使用Oracle的date数据类型的另一个优点是:它支持日期的运算。可以对已经存在的
日期加上或减去若干天,例如:
insert into student values('熊',sysdate+7);
还有一个问题就是附表主键自增长问题,写一个序列和触发器:
序列:
CREATE SEQUENCE "PDJT"."NewSequence" INCREMENT BY 1 MINVALUE 1 MAXVALUE 2147483647 START WITH 281 CACHE 20; GRANT SELECT, ALTER ON "PDJT"."NewSequence" TO PUBLIC;
触发器:
CREATE OR REPLACE TRIGGER "PDJT"."NewTrigger" BEFORE INSERT ON "PDJT"."公交线路行车时刻计划表附表" REFERENCING OLD AS "OLD" NEW AS "NEW" FOR EACH ROW BEGIN SELECT YZN002.NEXTVAL INTO :NEW.OBJECTID FROM DUAL; END; ; ALTER TRIGGER "PDJT"."NewTrigger" ENABLE;
flex前端,xml转array:
private function xmlListToArray(results:XMLList):Array { var array:Array=new Array(); for each(var child:XML in results) { var obj:Object=new Object(); //obj[child.nodeKind()]=child[child.nodeKind()]; for each(var ite:XML in child.children()) { obj[ite.name().toString()]=child[ite.name().toString()]; } //array.addItem(obj); array.push(obj); } return array; }
array转xml
private function arrToXml(arr:ArrayCollection):XML{ var root:XML = new XML("<result/>"); for(var i:int = 0;i<arr.length;i++){ var node:XML = new XML("<item/>"); node.线路名=arr[i].线路名; node.路牌名=arr[i].路牌名; node.圈=arr[i].圈; node.实施时间=arr[i].实施时间; node.报到=arr[i].报到; node.工时=arr[i].工时; node.出场=arr[i].出场; node.离场=arr[i].离场; root.appendChild(node); } return root; }
其他见附件
发表评论
-
flex二维单列或者多列冒泡排序
2012-07-19 10:21 1528第一次循环,把二维数组中的一维数组的第一个元素最小的那一组放在 ... -
flex任意样式生成器
2012-07-11 13:35 1500flex任意样式生成器,各种风格,颜色,布局等等 -
flex任意多边形代码生成器
2012-07-11 13:29 1451flex任意多边形代码生成器,圆,多边形,星形代码生成器 ... -
flex任意多边形代码生成器
2012-07-11 13:22 1下面是flex任意多边形代码生成器, 在附件中 -
flex点到线段的距离
2012-06-27 15:17 1510// 计算两点之间的距离 private fu ... -
开心农场前端程序源码
2012-06-20 13:05 3193开心农场前端程序源码,界面: 源码附件中 -
flex中dictionary跟Object的区别与遍历
2012-06-12 10:09 1931flex中dictionary跟Object的区别与遍历 ... -
Array的复制
2012-04-26 10:57 986ActionSctipt中Array的复制方法,常用有 ... -
mx_internal_uid的在数据传递时的重复解决方法 - 两个datagrid直接拖拽复制数据
2012-04-12 16:12 1310我们首先了解一下【mx_internal_ui ... -
Flex的Array和ArrayCollection总结
2012-04-11 02:56 1581Flex的Array和ArrayCollecti ... -
flex中dictionary跟Object的区别与遍历
2012-04-11 02:55 1871AS3中Object和 Dictionary都可以用来 ... -
flex object 联合数组
2012-04-11 02:53 1945问题我要创建用名称元素作为索引的数组解决办法创建联合数组 ... -
flex数据基础 array和arraycollection
2012-04-11 02:50 1503Flex数据基础-Array与ArrayCollecti ... -
Flex Tree和其他控件的联动
2012-04-10 17:31 1434Flex Tree和其他控件的联动 在应用 ... -
flex button字竖排显示
2012-04-10 15:48 3559由于产品功能的要求,需要让按钮Label垂直显示,看了 ... -
flex titilewindow
2012-04-10 15:49 1122利用popupmanager两种创建titlewindow的方 ... -
flex弹出窗口的方式有几种
2012-04-10 14:44 14059Flex 中有两种弹出窗口: 1. 最简单的警告窗口 你需 ...
相关推荐
内容概要:本文详细介绍了基于TMS320F系列芯片的C2000串口读写方案及其编程器——FlashPro2000的功能特点和支持的接口模式。文中不仅涵盖了硬件连接的具体步骤,还提供了代码实例来展示Flash擦除操作,并对比了JTAG和SCI-BOOT两种模式的优缺点。此外,针对不同型号的C2000系列芯片,给出了详细的适配指导以及避免烧录过程中可能出现的问题的方法。 适合人群:从事DSP开发的技术人员,尤其是对TI公司C2000系列芯片有一定了解并希望深入了解其编程和烧录细节的人群。 使用场景及目标:适用于实验室环境下的程序调试阶段,以及生产线上的批量烧录任务。主要目的是帮助开发者选择合适的编程工具和技术手段,提高工作效率,减少因误操作导致设备损坏的风险。 其他说明:文中提供的代码片段和命令行指令可以直接用于实际项目中,同时附带了一些实用技巧,如防止芯片变砖的小贴士和自动化重试脚本,有助于解决常见的烧录难题。
汉字字库存储芯片扩展实验 # 汉字字库存储芯片扩展实验 ## 实验目的 1. 了解汉字字库的存储原理和结构 2. 掌握存储芯片扩展技术 3. 学习如何通过硬件扩展实现大容量汉字字库存储 ## 实验原理 ### 汉字字库存储基础 - 汉字通常采用点阵方式存储(如16×16、24×24、32×32点阵) - 每个汉字需要占用32字节(16×16)到128字节(32×32)不等的存储空间 - 国标GB2312-80包含6763个汉字,需要较大存储容量 ### 存储芯片扩展方法 1. **位扩展**:增加数据总线宽度 2. **字扩展**:增加存储单元数量 3. **混合扩展**:同时进行位扩展和字扩展 ## 实验设备 - 单片机开发板(如STC89C52) - 存储芯片(如27C256、29C040等) - 逻辑门电路芯片(如74HC138、74HC373等) - 示波器、万用表等测试设备 - 连接线若干 ## 实验步骤 ### 1. 单芯片汉字存储实验 1. 连接27C256 EPROM芯片到单片机系统 2. 将16×16点阵汉字字库写入芯片 3. 编写程序读取并显示汉字 ### 2. 存储芯片字扩展实验 1. 使用地址译码器(如74HC138)扩展多片27C256 2. 将完整GB2312字库分布到各芯片中 3. 编写程序实现跨芯片汉字读取 ### 3. 存储芯片位扩展实验 1. 连接两片27C256实现16位数据总线扩展 2. 优化字库存储结构,提高读取速度 3. 测试并比较扩展前后的性能差异 ## 实验代码示例(单片机部分) ```c #include <reg52.h> #include <intrins.h> // 定义存储芯片控制引脚 sbit CE = P2^7; // 片选 sbit OE = P2^6; // 输出使能 sbit
测控装备干扰源快速侦测系统设计研究.pdf
嵌入式八股文面试题库资料知识宝典-【开发】嵌入式开源项目&库&资料.zip
嵌入式八股文面试题库资料知识宝典-百度2022年嵌入式面试题.zip
少儿编程scratch项目源代码文件案例素材-空间站.zip
基于关联规则的商业银行个性化产品推荐.pdf
嵌入式八股文面试题库资料知识宝典-Linux基础使用.zip
内容概要:本文详细介绍了利用MATLAB进行轴棱锥生成贝塞尔高斯光束及环形光束光强图像的仿真研究。首先阐述了实验的背景与目标,强调了MATLAB在光学和计算科学领域的广泛应用。接着,具体描述了实验的方法与步骤,包括材料准备、仿真过程中的参数设定和光束生成代码编写。最后,对实验结果进行了深入分析,展示了贝塞尔高斯光束和环形光束的光强分布特点,验证了其光学性能的预期表现。文章还对未来的研究方向和技术改进提出了展望。 适合人群:从事光学、物理学及相关领域研究的专业人士,特别是对光束生成和光学性能分析感兴趣的科研工作者。 使用场景及目标:适用于需要进行光束生成和性能分析的实验室环境,旨在帮助研究人员更好地理解和优化光束特性和传播行为。 其他说明:本文不仅提供了详细的实验方法和步骤,还附有丰富的实验结果和数据分析,为后续研究提供了宝贵的参考资料。
内容概要:本文探讨了三电平NPC型有源电力滤波器(APF)的模型预测控制(MPC)中存在的开关频率过高问题及其解决方案。传统MPC方法会导致极高的开关频率,增加了系统的能耗和热量。通过引入滞环控制模块,可以在不大幅牺牲性能的情况下有效降低开关频率。具体来说,滞环控制通过在价值函数计算后增加一个判断条件,对状态切换进行惩罚,从而减少不必要的开关动作。实验结果显示,开关频率从4392Hz降至3242Hz,降幅达26.2%,虽然电流总谐波畸变率(THD)略有上升,但仍符合国家标准。此外,文中还提出了动态调整滞环宽度的方法,以进一步优化不同负载条件下的表现。 适合人群:从事电力电子、电力系统控制领域的研究人员和技术人员,特别是关注APF和MPC技术的人群。 使用场景及目标:适用于需要优化APF系统开关频率的研究和工程项目,旨在提高系统效率并降低成本。目标是在不影响系统性能的前提下,显著降低开关频率,减少能量损失和热管理难度。 其他说明:文章不仅提供了理论分析,还包括具体的实现代码片段,有助于读者理解和实践。同时,强调了在实际应用中需要注意的问题,如中点电位漂移等。
内容概要:本文介绍了三维POD DMD程序在处理原网格数据方面的独特优势和技术细节。首先阐述了该程序能读取结构化和非结构化网格数据及其拓扑关系,在生成模态数据过程中保持原始网格形态而不需要进行网格插值操作。接着展示了简化版本的Python代码片段,揭示了读取网格数据和生成模态数据的核心逻辑。最后提到提供的辅助学习资料如代码、视频教程、Word教程和实例数据,帮助用户深入理解并掌握该程序的应用。 适合人群:从事计算流体力学领域的研究人员和技术爱好者,尤其是那些希望提高数据处理效率的人群。 使用场景及目标:适用于需要处理复杂网格数据的研究项目,旨在简化数据处理流程,提升工作效率,同时保持数据的原始特性。 其他说明:文中不仅提供了理论性的讲解,还有具体的代码示例和丰富的学习资源,使读者可以边学边练,快速上手。
融合双向路由注意力的多尺度X光违禁品检测.pdf
嵌入式八股文面试题库资料知识宝典-Linux_Shell基础使用.zip
嵌入式八股文面试题库资料知识宝典-联发科2021武汉嵌入式软件开发.zip
基于有限体积法Godunov格式的管道泄漏检测模型研究.pdf
嵌入式八股文面试题库资料知识宝典-ARM常见面试题目.zip
基于LWR问题的无证书全同态加密方案.pdf
嵌入式八股文面试题库资料知识宝典-符坤面试经验.zip
内容概要:本文详细探讨了三电平逆变器在带不平衡负载条件下的仿真研究。主要内容包括仿真环境的搭建、不同拓扑结构的选择(如T型、I型NPC和ANPC)、延时相消法(DSC)和双二阶广义积分器(DSOGI)的正负序分离控制策略、SVPWM或SPWM调制技术的应用、双闭环PI控制以及直流均压控制。文中通过具体的参数设置(交流电压220V,直流侧电压750V)进行了详细的仿真实验,并展示了各个控制策略的效果。最终,通过仿真实验验证了所提出方法的有效性,确保了交流侧三相电压波形的对称性和电流波形的自适应调节。 适合人群:从事电力电子、电机驱动、新能源发电等领域研究的技术人员和研究人员。 使用场景及目标:适用于需要理解和掌握三电平逆变器在复杂负载条件下控制策略的研究人员和技术人员。目标是提高对三电平逆变器及其控制策略的理解,优化实际应用中的性能。 其他说明:本文不仅提供了理论分析,还包含了具体的仿真步骤和代码实现,有助于读者更好地理解和应用相关技术。