当前位置:主页>销售管理软件> 列表

数据转移的问题!请大哥们帮忙!! 找网吧商品销售软件

进销存软件版1楼: 程序要实现的功能:删除学生资料并写入住宿历史表和删除学生资料不写入历史表。可以按系删除,按班级删除,按年级删除,按栋号删除.

!!在这里先实现按系删除!!

有三个表
1.系部编码表:
id xbbh(系部编号) xbmc(系部名称)
1 01 中文系
2 02 数学系
3 03 历史系
4 04 化学系
5 05 音乐系

2.住宿登记表: 其中xsbh(学生编号)的前两位和系部编码表的xbbh相同
id xsbh(学生编号) xh(学号) xm(姓名)donghao(栋号)fanghao(房号) rq(日期)
1 0101200401002 2004113002 张三 1 101 2005-12-4
2 0201200401004 2004113003 李四 2 102 2005-12-5
3 0301200401003 2004113004 王五 3 103 2005-12-6

3.住宿历史表. 这个表和住宿登记表是一摸一样的!他是住宿登记表的一个备注。

我的思路:查找出符合条件的记录-->取出并写入历史表-->把符合条件的记录删除!
我能实现查出符合条件的记录如下(大哥们要是有更好的方法给我说下)


procedure Tjttf.BitBtn1Click(Sender: TObject);
var sqlstr:string;
begin
if RadioButton1.Checked(删除学生资料并写入住宿历史表的选项) then
begin
if combobox1.Text=''中文系'' then sqlstr:=''select * from 学生住宿登记表 where substring(学生住宿登记表.xsbh,1,2)=01'';
if combobox1.Text=''数学系'' then sqlstr:=''select * from 学生住宿登记表 where substring(学生住宿登记表.xsbh,1,2)=02'';
with dm.ClientDataSet4 do begin
if active then active:=false;
commandtext:=sqlstr;
open;
end;
end;
end;

问题:怎样把这些记录一次性取出来写到住宿历史表并把他们一次性删除呢?我用的组件是ClientDataSet,用它的什么方法呢?最好给点代码!!!
注:我是菜鸟!说的可能不是很明白!希望看明白的大哥给解决下!谢谢!

2楼: 先写后删;

但我没用过ClientDataSet;
如果用BDE,转移只要用BATCHMOVE控件就可了;
也可一条一条写:
with dm.ClientDataSet4 do begin
open;
first;
while not eof do begin
....//insert....
next;
end;
end;
删除简单吧
将SQLStr中的SELECT *换成DELETE;将OPEN换成EXECSQL就可了吧;
********************

是什么样的数据库?转移也可用(删除)触发器;

如为SQL server,有更简单的方法;
可以分别按系,按班级,按年级,按栋号写4个转移到历史并删除原数据的存储过程
参数只要一个就可;
(如果系/班级/年级/栋号的长度都固定且不同,一个存储过程就可完成;)
按我理解一个就可:
0101200401002: 3
01:1系,
0101:101专业;
01012004:101专业2004级;
0101200401:101专业2004级1班
3:栋号,
系/班级/年级/栋号的长度分别固定为:2/10/8/1;根据长度跳转; 如网吧商品销售软件

3楼: 非常感谢jlyin大哥!你说的加个BATCHMOVE控件我不想用(也不太会),我觉得第二种方法可行,但是我还没有接触到存储过程,你能给详细说说吗??谢谢!

4楼: 忘了说了,我用的是sql server 2000

5楼: 写入:
select * into 住宿历史表 from 住宿登记表 where id in (select id from 系部编码表 where 你的筛选条件)
删除:
delete from 住宿登记表 where id in (select id from 系部编码表 where 你的筛选条件)
delete from 系部编码表 where 你的筛选条件
不知道有没有理解错你的意思,两头加事务保证数据完整性

6楼: 在明确一下我的问题吧!我上面查询出来了符合条件的记录:
procedure Tjttf.BitBtn1Click(Sender: TObject);
var sqlstr:string;
begin
if RadioButton1.Checked(删除学生资料并写入住宿历史表的选项) then
begin
if combobox1.Text=''中文系'' then sqlstr:=''select * from 学生住宿登记表 where substring(学生住宿登记表.xsbh,1,2)=01'';
if combobox1.Text=''数学系'' then sqlstr:=''select * from 学生住宿登记表 where substring(学生住宿登记表.xsbh,1,2)=02'';
with dm.ClientDataSet4 do begin
if active then active:=false;
commandtext:=sqlstr;
open;
end;
end;
end;
然后用ClientDataSet的什么属性或方法把这些成批的记录提取出来放到住宿历史表里的,只删除住宿登记表中的这些记录。我想知道的是用ClientDataSet的什么方法来执行sql语句 ,来执行上面两位大哥的想法,我不会写?
我很菜,希望大哥门耐心讲解!谢谢了!

进销存软件版7楼: 接受答案了,我的基础太差了