用ADO控件,
表dx,无主键,结构为:
类别 th 内容
语文 1 a
数学 2 b
语文 3 c
英文 4 d
语文 5 e
数学 6 f我先对“类别”字段排序,生成临时表,再删除原表,将临时表复制成原表,类别 th 内容
语文 1 a
语文 3 c
语文 5 e
数学 2 b
数学 6 f
英文 4 d结果“th”(题号)的顺序就乱了,想重新排序Adodc1.RecordSource = "dx"
Adodc1.Refresh
i = 1
Do While Not Adodc1.Recordset.EOF
Adodc1.Recordset.Fields("th") = i
Adodc1.Recordset.Update
i = i + 1
Adodc1.Refresh
Adodc1.Recordset.MoveNext
Loop
Adodc1.Refresh我如果用调试-->程序运行到,将光标点到 .update,那行,然后按f8,直到循环结束(能不能有别的方法,比如我点到最后一行,按某一个键一次,就可以执行到最后一行,而不是按F8,一次一个语句的走?),则可以将“th”重新排序。但将这段程序放入FORM_LOAD中则数据库无变化,请问:有什么办法可以解决?原因是什么?是否是主键的问题?
表dx,无主键,结构为:
类别 th 内容
语文 1 a
数学 2 b
语文 3 c
英文 4 d
语文 5 e
数学 6 f我先对“类别”字段排序,生成临时表,再删除原表,将临时表复制成原表,类别 th 内容
语文 1 a
语文 3 c
语文 5 e
数学 2 b
数学 6 f
英文 4 d结果“th”(题号)的顺序就乱了,想重新排序Adodc1.RecordSource = "dx"
Adodc1.Refresh
i = 1
Do While Not Adodc1.Recordset.EOF
Adodc1.Recordset.Fields("th") = i
Adodc1.Recordset.Update
i = i + 1
Adodc1.Refresh
Adodc1.Recordset.MoveNext
Loop
Adodc1.Refresh我如果用调试-->程序运行到,将光标点到 .update,那行,然后按f8,直到循环结束(能不能有别的方法,比如我点到最后一行,按某一个键一次,就可以执行到最后一行,而不是按F8,一次一个语句的走?),则可以将“th”重新排序。但将这段程序放入FORM_LOAD中则数据库无变化,请问:有什么办法可以解决?原因是什么?是否是主键的问题?
解决方案 »
- 当读取SQL的数值为NULL时,该怎么写?
- 请大家帮忙
- 在FTP中用GET怎么无法覆盖文件
- 为何我的SQL查询总是提示FROM子句语法错误?当我所要查询的条件为一个变量时如何处理?
- 求教:怎样调用绘制数学曲线的API函数
- 我为什么总碰到这些不会的问题??急死我了。大家行帮我看一下吧!!不好意思。我就10分了。
- 用MAPI 制作发邮件的程序时,是不是一定需要调用到 OUTLOOK ?
- 请问怎样把屏显示不下的数全显示出来,比如计算i=i+1<100,
- 怎樣編輯SQL2000中的時間值? 請您點擊一下...
- 前一段时间要电子书的朋友快来这里!!!领书¥
- mdi窗体问题,帮忙,急!
- 请问怎么用sql编程的可以让单机版变成网络版?
类别 th 内容
语文 1 a
语文 2 c
语文 3 e
数学 4 b
数学 5 f
英文 6 d
acn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=tk.mdb;Persist Security Info=False;Jet OLEDB:Database Password=''"
acn.Open
For j = 1 To 5
Sql = "drop table ls"
acn.Execute Sql
Sql = "select * into ls from dx order by 类别(th)"<<----是这个重新排序吗?
acn.Execute Sql
Sql = "drop table dx"
acn.Execute Sql
Sql = "select * into dx from ls order by 类别(th)"<<----是这个重新排序吗?
acn.Execute Sql
next我是先用上面这段代码对类别排序,删除原表,将临时表复制成原表,然后再对th排序,删除原表,将临时表复制成原表,但都不行啊,出现的情况和我上面列出来的是一模一样的!谁有更好的办法啊?
这样做也不行啊
Dim acn As New ADODB.Connection, Sql$
acn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=tk.mdb;Persist Security Info=False;Jet OLEDB:Database Password=''"
acn.OpenSql = "drop table ls"
acn.Execute Sql
Sql = "select * into ls from dx order by 类别(th)"<<----是这个重新排序吗?
acn.Execute Sql
Sql = "drop table dx"
acn.Execute Sql
Sql = "select * into dx from ls order by 类别(th)"<<----是这个重新排序吗?
acn.Execute Sql我是先用上面这段代码对类别排序,删除原表,将临时表复制成原表,然后再对th排序,删除原表,将临时表复制成原表,但都不行啊,出现的情况和我上面列出来的是一模一样的!谁有更好的办法啊?
这样做也不行啊
Adodc1.RecordSource = "select * from dx order by th"
Adodc1.RecordSource = "select * from dx order by th"哪有豆腐,给块给我撞死算啦!!!
5555555555555,要是能这么用,我还排序做什么啊?
苍天,,,,,
我就是要重新做一个有序的新表,还有别的用途的啊!!!!
表中数据的排列有其一定规则,如果程序中的操作要取决于表中数据的排列,你觉得科学吗?
好好看看相关基础书吧
Sql = "drop table ls"
acn.Execute Sql
Sql = "select * into ls from dx order by 类别(th)"<<-生成已经排好序的临时表,
acn.Execute Sql
'Z注意在这里你可以用ACCESS打开数据库看一下是否已经排好了
Sql = "drop table dx"
acn.Execute Sql
Sql = "select * into dx from ls order by 类别(th)"<<----这是重新建立表
acn.Execute Sql
'实际上,排好序的recordset是直接可以用的,你就不需要一个物理的排序表了
最简单的方法就是将 th 字段作为主键,当然前提是数据不能重复。
否则,你可以用:select * into new_tb from tb where 1=2 创建一个空白的同结构新表,然后添加一个自动编号字段作为你的主键。你用insert into new_tb select * from tb order by th 语句按th排序插入,应该就可以了
不知你的具体情况,以上两点仅供参考
Sql = "drop table ls"
acn.Execute Sql
Sql = "select * into ls from dx order by 类别(th)"<<-生成已经排好序的临时表,
acn.Execute Sql
'Z注意在这里你可以用ACCESS打开数据库看一下是否已经排好了
Sql = "drop table dx"
acn.Execute Sql
Sql = "select * into dx from ls order by 类别(th)"<<----这是重新建立表
acn.Execute Sql
'实际上,排好序的recordset是直接可以用的,你就不需要一个物理的排序表了从开始我就说了,[如果用 调试-->程序运行到,将光标点到 .update,那行,然后按f8,直到循环结束(能不能有别的方法,比如我点到最后一行,按某一个键一次,就可以执行到最后一行,而不是按F8,一次一个语句的走?),则可以将“th”重新排序。]就是可以排序的,我打开ACCEss数据库,就是可以看到TH在重新排序,反正,我用调试状态,数据就可以成功排序;放到FORM_LOAD里面,直接不用手工干涉,就得不到我要的结果,仍然还是原来的数据库状态!
另外,关于增加字段的问题,我以前做个一个表,对它进行连续删除、增加字段好像到某个上限是无法做增加字段的操作的!
所以,我想以我的思路做,就差这一点更新结构的区别了,看看各位大侠还有什么高招!会不会有个什么暂停啊之类的工具来延缓一下就可以了??
还不如告诉我们你在哪里调用它,看看那里怎么解决吧,并且你在ACCESS直接用SQL做实验,你会发现楼上的句子肯定可以得到你要的结果
adodc1.recordsouce="select * from dx order by th"
i = 1
Do While Not Adodc1.Recordset.EOF
Adodc1.Recordset.Fields("th") = i
Adodc1.Recordset.Update
i = i + 1
Adodc1.Recordset.MoveNext
Loop
Adodc1.Refresh
CPLiu(老了) 的="select * from dx order by th"应该是order by 类别
其他都对
lightwu,我就是要重写编号,并按编号重新排序
adodc1.recordsouce="select * from dx order by th"
i = 1
Do While Not Adodc1.Recordset.EOF
Adodc1.Recordset.Fields("th") = i
Adodc1.Recordset.Update
i = i + 1
Adodc1.Recordset.MoveNext
Loop
Adodc1.RefreshDim acn As New ADODB.Connection, Sql$
acn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=tk.mdb;Persist Security Info=False;Jet OLEDB:Database Password=''"
acn.OpenSql = "drop table ls"
acn.Execute Sql
Sql = "select * into ls from dx order by 类别(th)"<<----是这个重新排序吗?
acn.Execute Sql
Sql = "drop table dx"
acn.Execute Sql
Sql = "select * into dx from ls order by 类别(th)"<<----是这个重新排序吗?
acn.Execute Sql
Adodc1.CommandType = 1
ls = "select * from dx order by 类别"
Adodc1.RecordSource = ls
Adodc1.Refresh
i = 1
Do While Not Adodc1.Recordset.EOF
Adodc1.Recordset.Fields("th") = i
Adodc1.Recordset.Update
i = i + 1
Adodc1.Recordset.MoveNext
Loop
Adodc1.RefreshDim acn As New ADODB.Connection, Sql$
acn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data_Source=tk.mdb;Persist Security Info=False;Jet OLEDB:Database Password="";"
acn.OpenSql = "drop table ls"
acn.Execute Sql
Sql = "select * into ls from dx order by th"
acn.Execute Sql
Sql = "drop table dx"
acn.Execute Sql
Sql = "select * into dx from ls order by th"
acn.Execute Sql好了,这就是解决的代码.
结帖。