在VF中像本地表一样使用ADO远程数据表 VF9.0中使用CursorAdapter更新数据

VF中,我们可以通过ADO来取得数据并且可以绑定到窗体上
但是ADO使用使用起来并不是那么方便,比如不能方便地插入,更新数据,而在VF的本地环境中,如果加载了数据环境
那么这一切就变得比较轻松了,

这里我们可以做使用VF自带的数据环境中的ADO的自动生成CursorAdapter
的向导来,为我们生成相关的代码,然后加以改造就可以了
生成的SCX文件用EditPlus或者UtlraEdit打开就可以了,可以从里边清楚地看到代码
以下是我改造的一段代码


Define Class Data1 As DataEnvironment && 数据环境类
 Name = "Dataenvironment"
 
 Top = 220
 Left = 1
 Width = 520
 Height = 200
 Datasource = .Null.
 DataSourceType = "ADO" 

 Procedure BeforeOpenTables
 *** Select connection code: DO NOT REMOVE

 Local loConnDataSource
 loConnDataSource = Createobject('ADODB.Connection')
 ***<DataSource>
 
 &&loConnDataSource.ConnectionString = [Provider=SQLOLEDB.1;Password=cxy;Persist Security Info=True;User ID=sa;Ini] + ;
 && [tial Catalog=bussetup;Data Source=.;]
 
 loConnDataSource.ConnectionString = conString
 ***</DataSource>
 loConnDataSource.Open()
 This.Datasource = Createobject('ADODB.RecordSet')
 This.Datasource.CursorLocation   = 3  && adUseClient
 This.Datasource.LockType         = 3  && adLockOptimistic
 This.Datasource.ActiveConnection = loConnDataSource
 *** End of Select connection code: DO NOT REMOVE

 ENDPROC
 
Enddefine && 添加 Cursor 类对象 
 
 
 
 

DEFINE CLASS demo as CursorAdapter
UseDeDataSource= .T.
 
SelectCmd="select * from ........."
 

CursorSchema ="ID I, 日期 T"
 

 

Alias = "demotable"
Flags = 0
KeyFieldList = "ID"
Tables = ".......D"
UpdatableFieldList = "................"
UpdateNameList = "......................."
UseCursorSchema = .T.
Name = "demo"


 Procedure Init
 *** Setup code: DO NOT REMOVE
 Local llReturn
 Do Case
 Case Not Pemstatus(This, '__VFPSetup', 5)
  This.AddProperty('__VFPSetup', 0)
 Case This.__VFPSetup = 1
  This.__VFPSetup = 2
 Case This.__VFPSetup = 2
  This.__VFPSetup = 0
  Return
 Endcase
 Set Multilocks On
 llReturn = DoDefault()
 *** End of Setup code: DO NOT REMOVE

 *** Setup code: DO NOT REMOVE
 If This.__VFPSetup = 1
  This.__VFPSetup = 2
 Endif
 Return llReturn
 *** End of Setup code: DO NOT REMOVE

 Endproc
 Procedure AutoOpen
 *** Setup code: DO NOT REMOVE
 If Not Pemstatus(This, '__VFPSetup', 5)
  This.AddProperty('__VFPSetup', 1)
  This.Init()
 Endif
 *** End of Setup code: DO NOT REMOVE

 Endproc


ENDDEFINE


&&这是一些表格
DEFINE CLASS grdDemotable as Grid
columnCount = 29
Left = 48
RecordSource = "demotable"
RecordSourceType = 1
Top = 24
Name = "grdDemotable"
Column1.ControlSource = "demotable.id"
Column1.Name = "Column1"
................
...............
ENDDEFINE

 

Define Class cxyform As Form
 Top = 0
 Left = 0
 Height = 386
 Width = 587
 DoCreate = .T.
 Caption = "cxyform"
 Name = "FORM1"
 
 DataEnvironment="" && DataEnvironment 是表单的一个属性

 Procedure Destroy 

 Try
  Thisform.DataEnvironment.CloseTables && 在 destroy 过程的结束处关闭表
 Catch To mException
   RETURN .f.
 ENDTRY
 
 thisform.Hide
 Clear Events
 ENDPROC
 
 
 Procedure Unload 
 Clear Events
 
 ENDPROC
 
 Procedure Load
 * DataEnvironment 被实例化,且表单的属性
 * DataEnvironment 引用该对象. DataEnvironment
 * 并没有实际地添加到表单. THISFORM.DATAENVIRONMENT
 * 只是一个指向 DataEnvironment 对象的指针.
 myde=Createobject("Data1")
 Thisform.DataEnvironment=myde
 myde.ADDOBJECT("demoname", "demo")
 &&myde.demoname.selectcmd="select top 10 * from ................"
 myde.demoname.selectcmd=comSql

 
 * 在 LOAD 开始时打开表.
 Thisform.DataEnvironment.OpenTables
 thisform.AddObject("bb","grdDemotable")
 thisform.bb.visible=.T. 
 thisform.bb.Width=thisform.Width
 thisform.bb.Height=thisform.Height
 thisform.bb.Top=0
 thisform.bb.Left=0  
 
 
 thisform.bb.Column1.visible=.f. 
 thisform.bb.Column2.visible=.f. 
 thisform.bb.Column3.visible=.f.
 thisform.bb.Column4.visible=.f. 
 thisform.bb.Column5.visible=.f.
 thisform.bb.Column6.visible=.f.
 thisform.bb.Column7.visible=.f.
 thisform.bb.Column8.header1.caption="站点名称"
 thisform.bb.Column9.header1.caption="全票"
 
 thisform.bb.Column12.visible=.f.
 thisform.bb.Column13.header1.caption="结进金额" 
 

 
 BINDEVENT(this,"Resize",this,"changesize")
  
 ENDPROC 
 
 PROCEDURE changesize
  thisform.bb.width=thisform.Width
  thisform.bb.height=thisform.Height
 ENDPROC
 

Enddefine

转载于:https://www.cnblogs.com/sunbingzibo/archive/2008/07/15/1243477.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
是的,你可以使用 SQLite 数据库来存储用户输入的课程信息。以下是一个简单的 Java 代码示例,它使用 SQLiteOpenHelper 类来创建和管理数据库: ```java public class CourseDatabaseHelper extends SQLiteOpenHelper { private static final String DATABASE_NAME = "course.db"; private static final int DATABASE_VERSION = 1; public CourseDatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL("CREATE TABLE courses (_id INTEGER PRIMARY KEY AUTOINCREMENT, " + "course_name TEXT, course_day_of_week INTEGER, " + "course_start_time INTEGER, course_end_time INTEGER);"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // Implement database upgrade logic here } } ``` 在这个示例,我们创建了一个名为“courses”的表,其包括课程名称、星期几、开始时间和结束时间等字段。 接着,我们可以使用 CursorAdapter 来将数据数据显示在课程表。以下是一个简单的代码示例,它使用 SimpleCursorAdapter 类来实现: ```java public class CourseListFragment extends ListFragment implements LoaderManager.LoaderCallbacks<Cursor> { private static final int LOADER_ID = 0; private CourseDatabaseHelper mDbHelper; private SimpleCursorAdapter mAdapter; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mDbHelper = new CourseDatabaseHelper(getActivity()); mAdapter = new SimpleCursorAdapter(getActivity(), R.layout.list_item_course, null, new String[] { "course_name", "course_day_of_week", "course_start_time", "course_end_time" }, new int[] { R.id.course_name, R.id.course_day_of_week, R.id.course_start_time, R.id.course_end_time }, 0); setListAdapter(mAdapter); getLoaderManager().initLoader(LOADER_ID, null, this); } @Override public Loader<Cursor> onCreateLoader(int id, Bundle args) { return new CursorLoader(getActivity(), CourseProvider.CONTENT_URI, null, null, null, null); } @Override public void onLoadFinished(Loader<Cursor> loader, Cursor data) { mAdapter.swapCursor(data); } @Override public void onLoaderReset(Loader<Cursor> loader) { mAdapter.swapCursor(null); } } ``` 在这个示例,我们创建了一个名为“CourseListFragment”的 Fragment,它使用 SimpleCursorAdapter 来将数据数据显示在 ListView 。我们使用 LoaderManager 来异步加载数据,并在数据加载完成后更新 ListView。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值