例如删除最大行的数据
delete
table
where
id
=
(select
max(id)
from
table)
上面的语句就表示删除table里id最大的.
你用易语言取出的表只是一个虚拟表.你没有自动编号的话就得删除其他字段的一个特定值.
否则你的 *** 作虽然不会报错.但是也不会成功.因为你所获得的行记录只是虚拟表的.不影响真实表数据.
想要真正删除的话就得是
delete
table
where
bt
='请删除我'
1、重建一个临时文件,把原文件内容向临时文件里拷贝,遇到要删除的内容就跳过。结束后关闭文件,用remove("原文件名")把原文件删除,用rename("临时文件名","原文件名")把临时文件名改为原文件名就OK了。
2、比如要按题面要求在原文件123.txt中删除编号为2和4的信息行,则可用以下代码实现:
//#include "stdafx.h"//If the vc++6.0, with this line.#include "stdio.h"
#include "stdlib.h"
int main(void){
FILE *fin,*ftp
char a[1000]
fin=fopen("123.txt","r")//读打开原文件123.txt
ftp=fopen("tmp.txt","w")//写打开临时文件tmp.txt
if(fin==NULL || ftp==NULL){
printf("Open the file failure...\n")
exit(0)
}
while(fgets(a,1000,fin))//从原文件读取一行
if(a[0]!='2' && a[0]!='4')//检验是要删除的行吗?
fputs(a,ftp)//不是则将这一行写入临时文件tmp.txt
fclose(fin)
fclose(ftp)
remove("123.txt")//删除原文件
rename("tmp.txt","123.txt")//将临时文件名改为原文件名
return 0
}
用fseek函数定义流指针位置,位置需要自己计算。利用offset。然后再写入新内容覆盖旧内容。但这么做有缺陷,新内容必须和就内容一样长,否则覆盖不完全或把后面的内容也覆盖。
所以,我建议直接新建新文件写入完整的新数据,更简单。
fseek()用来移动文件流的读写位置.
1、参数stream 为已打开的文件指针,
2、参数offset 为根据参数whence 来移动读写位置的位移数。参数 whence 为下列其中一种:
SEEK_SET 从距文件开头offset 位移量为新的读写位置. SEEK_CUR 以目前的读写位置往后增加offset 个位移量.
SEEK_END 将读写位置指向文件尾后再增加offset 个位移量. 当whence 值为SEEK_CUR 或
SEEK_END 时, 参数offset 允许负值的出现.
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)